PHP 的過去、現在與未來
這原本是我打算作為 PHP 教學系列的序章,既然該教學已經胎死腹中,不如就移花接木一下把我當年的想法記錄下來。
這個標題中的「過去」、「現在」與「未來」,其實並沒有一個明確的時間點、甚至定義也會隨時間與環境而有所變化。
過去:網際網路熱潮與前框架時期
大約在 2000 年初,網際網路產業方興未艾(很熱門、篷勃發展的意思),隨著「社交網路」概念的流行(例如當時頗負盛名的無名小站、Yahoo 即時通),一些嗅覺敏銳的創業者開始發現人與人互動而促成的潛在商業能力。
- Facebook、Twitter、Plurk:微網誌
- Amazon、PCHome、淘寶:購物
- LINE、WhatsAPP:聊天
這個時代大家都在實踐一些很新鮮的、很新奇的點子,對於創業者來說,重要的是如何快速地把 MVP(最小可行產品)產出,並且在市場中驗證是否能夠成功。
而 PHP 很好地契合了「快速產出 MVP」這個趨勢,因此吃到了許多時代紅利,吸引了一批又一批的開發者前仆後繼。(例如 Facebook 最初就是使用 PHP 打造的,而時至今日還有許多人憑此作為 PHP 永生不死的鐵證在網路上四處宣揚)
PHP 有著很低的學習成本與自由度:我大學暑期打工時,老闆曾經誇口「只需要兩週,我能讓一個零經驗的人上線工作」,而我的同事們都是實證;然而高自由度就意味著每個開發者可能都存在不同的想法、不同的結構與標準,這也為 PHP 的第一次衰落埋下的隱憂。
現在:Laravel 的大統一時期
到了2010 年前後,一些程式語言或框架開始對 PHP 造成威脅,其中像是 Ruby on Rails 或 Javascript(Node.js),眾人們紛紛打著「PHP 是舊時代的產物了」、「PHP 效率低落」、「PHP 開發體驗不佳」的旗號,並且從 PHP 的瓜分一大部份開發者。
所有的工程師都鄙視 PHP 工程師。--《軟體工程師的鄙視鍊》(2014)
PHP 5.2 左右有一批優秀的核心開發者離開,這間接導致 PHP 6 難產,這個狀況直到 2015 年才因為 PHP 7 的釋出而有所改善;當時 Facebook 也受不了 PHP 運行效率低下而用 C++ 自行設計 HHVM 與 Hack 語言。
在這個內憂外患夾擊之下,PHP 迎來了第一次的衰落;而在此時,Lavavel 橫空出世。
Laravel 憑藉著優秀與先進(以當時 PHP 開發社群的眼光來看)的思想,在框架百家爭鳴(CodeIgniter、Symfony、Phalcon)的年代為自己打下一片江山;而 2015 年 Laravel 5 的釋出,搭配上年底 PHP 7 的釋出,以及 PSR 的出現,這無疑為 PHP 社群再次帶來活力。
PHP 7 與 Laravel 5.x 的搭配,使得 Ruby on Rails 的特點不像以往這麼亮眼,同時也有吸引一些開發者回流,使得 RoR 的熱度不若以往。
即便出現了 PHP 7,其底層仍是「陳舊」的。在 2010 年前後,即時應用程式大行其道(如線上聊天、推播通知等),單純依賴 HTTP 協定的 PHP 即便能夠靠著一些 workaround (polling 與 long-polling)達成即時應用程式,但是對性能的耗損也遠高於其它程式語言。(而 Laravel 社群對這個需求提供的解決方案是:採用 pusher.io,不過這也不能全怪 Laravel,畢竟語言本身就不支援,即便到現在仍不支援)
補充:Ruby on Rails 在 2012 年左右盛極一時,當時頗有取代 PHP 的氣勢:它有先進的思想、易於使用、執行效率還算過得去,即便有學習成本但不多,因此吸引了一大批開發者
補充:自從三大前端框架問世之後,Javascript 吞食了很大一部份的 PHP 前端市場,並且依靠 Node.js 積極佈局後端應用程式與 App 的可行性,PHP 直到現在都沒能再搶回 Javascript 帶走的前端市場
未來:雲原生、AI、低程式碼時代與後 Laravel 生態系
雲原生時代
到了 2020 年左右,Cloud Native 這個詞開始流行;而在這背後推波助瀾的就是將 Container 技術發揚光大的 Docker 與其語言 Go。
毫不誇大地說,Go 就是 Cloud Native 的母語:它清晰簡潔、效率高,並且能夠很好地搭配整個社群環境;並且它一再於各式複雜的情境下證明自己有能力達成這些目的,例如 Kubernetes。
PHP 難以容器化的問題我曾經在《PHP 容器化應用》中提過,這個缺陷天生不利於在雲原生時代被考慮。
AI 時代
如果說,Alpha Go 的出現讓大家注意到 AI 的潛力,而 GPT 的出現大概算得上 AI 的第一次產業爆發(至於後面還會爆幾次,又或是像泡沫一樣馬上破裂就不好說了),而從現在的眼光來看 Python 無疑是這個時代的絕對贏家。
PHP 過去最大的成就就是能夠快速產出與網站、網頁有關的產品,而 Python 的視野不僅限於網際網路產業,而是放眼於各種類型的學界與產業,這很好地培育起促成 AI 產業爆發時的人才積累(當統計學家、資料科學家、演算法工程師都擅長使用 Python 時,也不難預期 Python 會成為這輪產業爆發的贏家)
「假設今天一個精通 Python 的 AI 工程師想要用網站創業,你覺得他會選擇使用 Python 寫個網站,還是重新學習 PHP 呢?」
低程式碼時代
在前面提到,PHP 最大的優勢在於能夠快速產出 MVP;但如果這個優勢也被剝離呢?
前面提到,PHP 的前端市場被 Javascript 鯨吞;而後端領域一開始有兩個值的關注的對手,分別是專注於 APP 生態的 Firebase 與積極建立 Web 生態的 Parse。
雖然在 2013 年 Parse 被 Facebook 收購之後就未見起色(倒是在 2014 年 Google 收購 Firebase 之後混得有聲有色),但 Backend as a Service 的概念初見雛型。
到今天,我們有許多選擇:Runtime 端的 AWS Lambda、GCP App Engine 或 Knative;Database 端的 Cloudflare D1(以 SQLite 為基礎)或 AWS Aurora Serverless(當然,它們或多或少都有一點缺點與不足之處,但如果只是要端出 MVP 已經足夠了)。更有甚者,Supabase 提供了一系列開箱即用的 Self-Hosted Backend as a Service 解決方案。
「曾經我們會驚嘆於 Laravel 提供開箱即用的身份認證機制;時過境遷,現在身份認證還有 Auth0、Firebase、Ory Kratos 或 Keycloak 等選擇。」
如果說,我們只為了拿 PHP 做 MVP,那為何不試試更加「現代化」的方式呢?
後 Laravel 生態系
上面提到的雲原生、AI 與低程式碼時代,Laravel 其實也考慮到了。
為了簡化佈署流程,Laravel 先後推出 Forge 與 Vaper,最近更推出了 Laravel Cloud,並且 Accel 獲得 5700 萬的 A 輪融資。並且利用 Octane 積極整合 FrankenPHP, Swoole 與 Roadrunner,使其更容易被容器化。
AI 部份沒救了,跳過
而 Laravel 社群推行 Livewire 與 Inertia,試圖主導在 Laravel 開發時期的前端開發方式(不過我個人並不看好)。
從種種跡象可以窺見,Laravel 並不滿足於「只做個產品的 MVP」,而是希望開發者能夠像 Spring Boot 或 .NET Core 那樣安心地做產品。
結論
PHP 憑藉著龐大的開發者社群,短時間內應該還不至於「消滅」。
然而,隨著應用程式的複雜性日益堆疊,PHP 已開始不是首選,並且在可預見的未來這個情況只會越來越嚴重。如果 PHP 一直將自己定位為「只做 MVP 的程式語言」,那必然會迎來凋零的一天。
當然,短時間內仍會存在維護 PHP 應用程式的需求(就像直到今天也有維護 COBOL 的需求那樣),畢竟如此龐大的生態系也不是一兩天就能被更迭的。
