PHP“垂死”十年
本文轉(zhuǎn)載自InfoQ,差不多一年前,我發(fā)布了一篇題為“PHP 可能在未來十年消失”的文章。我發(fā)布的這篇文章的總結(jié)就像一首《圣誕頌歌》,但不是 Ebenezer Scrooge(電影《圣誕頌歌》中的一個(gè)商人角色),而是 PHP:
-
過去,PHP 沒有修復(fù)它的問題,所以其它語(yǔ)言變得更有吸引力。
-
現(xiàn)在,PHP 缺乏當(dāng)前互聯(lián)網(wǎng)所需的特性。
-
將來,PHP 仍然不會(huì)有有意義的特性。
請(qǐng)注意,我從來沒有寫過“垂死”、“不要用它”,甚至“現(xiàn)在就放棄你的 PHP 項(xiàng)目!”。我只是說它會(huì)在 2030 之前的任何時(shí)候變得不再有意義,并對(duì)此為什么會(huì)發(fā)生做了的一個(gè)簡(jiǎn)單的解讀。
考慮到 PHP 龐大的用戶基礎(chǔ),一些指出 PHP 缺點(diǎn)的文章,往往會(huì)引爆一些狂熱者。他們認(rèn)為 PHP 是完美的,僅僅因?yàn)樗芊奖?#xff0c;或者因?yàn)樗麄兓?10 多年時(shí)間使用 PHP。我的文章也不例外。不管如何,我決定把它從消極的陰云中拉出來,給予更多思考。
1這不是我的問題,而是你的問題
首先說明,我對(duì) PHP 或者任何語(yǔ)言都沒有個(gè)人恩怨。我認(rèn)為它是一個(gè)非常成熟的工具,當(dāng)我需要“昨天”的東西時(shí),它也是我最喜歡使用的東西,因?yàn)樗鳛榻忉屝驼Z(yǔ)言非常方便,而且生態(tài)系統(tǒng)就在那里。
這也與代碼質(zhì)量無關(guān)。你不能因?yàn)殚_發(fā)人員沒有“正確地”使用一種語(yǔ)言,而責(zé)怪它,至少不能全怪。不論你的福特或蘭博基尼多么炫酷:如果你不關(guān)心它,維護(hù)就會(huì)很痛苦。
這也與世界上有多少人使用 PHP 無關(guān)。如果我們選擇“用戶基礎(chǔ)最高”,那么現(xiàn)在就開始將代碼遷移到 Javascript。這場(chǎng)比賽他們輕而易舉就贏了,無可匹敵。
先不說“是否被重要公司使用”——稍后再談。JavaScript 對(duì)于 SpaceX 的任務(wù)已經(jīng)非常關(guān)鍵,所以顯然它不是一種糟糕的語(yǔ)言,否則宇航員的生命就面臨風(fēng)險(xiǎn)。
只是現(xiàn)在,PHP 變成了一個(gè)只會(huì)玩一種把戲的小馬。這門語(yǔ)言以蓬勃發(fā)展的 web 開發(fā)聞名,但官方不愿采取進(jìn)一步措施。而其它語(yǔ)言已經(jīng)在進(jìn)一步改進(jìn)了。那是死亡的奧秘。
2語(yǔ)言會(huì)“死”嗎?
讓我們以古老的編程語(yǔ)言之一 COBOL 為例。
幾十年前,銀行和保險(xiǎn)公司背后的一些老的金融系統(tǒng)都是用 COBOL 編程的。世界各地的許多金融機(jī)構(gòu)仍在他們的大型機(jī)中使用 COBOL,主要的一個(gè)原因是:它仍然工作。這一點(diǎn)的證明是,由于流行病的爆發(fā),COBOL 雇傭人數(shù)突然增加,以維持這些來自世界各地的不斷受到?jīng)_擊的古老系統(tǒng)。
COBOL 沒有死,但這意味著什么呢?有一些工具可以使基于 COBOL 的軟件與當(dāng)今人們的需求兼容,比如網(wǎng)頁(yè),即使這意味著用一個(gè)簡(jiǎn)單的工具將火箭固定在磚塊上。仍然有人需要編寫和維護(hù) COBOL。甚至有一些公司為基于 COBOL 的系統(tǒng)提供某種支持。
我們可以放心得出結(jié)論:編程語(yǔ)言是不可能被消滅的。總有一個(gè)混蛋用它來賺錢,還有一個(gè)混蛋提供第三方支持來賺更多的錢。這是一種雙贏的局面。
在企業(yè)文化中,如果你的技術(shù)棧沒有使公司“損失”任何錢,那就沒關(guān)系了。否則,你就會(huì)像亞馬遜因?yàn)樗麄冏约旱?AWS 數(shù)據(jù)庫(kù)而拋棄了甲骨文一樣。
3如果它沒有死,那怎么“淡出”呢?
COBOL 沒有死,它只是“淡出了”:沒有一個(gè)頭腦正常的人會(huì)使用 COBOL 啟動(dòng)一個(gè)新項(xiàng)目,因?yàn)橛懈玫墓ぞ摺_@些工具擁有更高的性能、更好的可靠性、更方便編程或者有用的特性。在 COBOL 時(shí)代,還沒有 HTTP 協(xié)議、多線程和虛擬化等當(dāng)今軟件所使用的其它有用技術(shù)。
當(dāng)人們不再在新項(xiàng)目中使用一種語(yǔ)言時(shí),多米諾骨牌開始倒塌。針對(duì)這種語(yǔ)言的工具不再誕生和維護(hù)。由于沒有需求,語(yǔ)言不再引入新特性,社區(qū)不再創(chuàng)造新的工具集,它不再傳播到其它生態(tài)系統(tǒng)中——比如 Node.js 出現(xiàn)在服務(wù)器端。沒有新的程序員學(xué)習(xí)這門語(yǔ)言,已經(jīng)學(xué)習(xí)這門語(yǔ)言的程序員遷移到了“更綠色的牧場(chǎng)”。
這也意味著,公司不愿意投資于語(yǔ)言本身,包括雇傭程序員。與更豐富的語(yǔ)言相比,這變得更難找到這門語(yǔ)言的開發(fā)者,因此給這門語(yǔ)言的開發(fā)者支付的薪酬也需要更高。此時(shí),遷移到勞動(dòng)力成本更低的新平臺(tái)成為公司的一種選擇。
COBOL 的情況與 Visual Basic、ASP .Net、Pascal、Fortran、ActionScript、Objective C、Haskell、Ruby 等許多其它服務(wù)端語(yǔ)言一樣。它們完成了它們的技術(shù)周期,更好的語(yǔ)言用更多特性和工具集,或者更少的煩惱,取代了它們,就像 PHP 在 2000 年代中期針對(duì)互聯(lián)網(wǎng)做的那樣。一旦 Rust 成為 Linux 內(nèi)核開發(fā)的標(biāo)準(zhǔn),它也很可能發(fā)生在 C 和 C++ 中。
與其它替代語(yǔ)言相比,PHP 的崛起主要與 Wordpress 的首次出現(xiàn)和 PHP 在服務(wù)器領(lǐng)域的易賣性有關(guān)。特別是那些需要被編譯成二進(jìn)制的語(yǔ)言,即使這些替代語(yǔ)言有更多的特性或更好的性能,而 PHP 曾經(jīng)兩者都缺乏。正是因?yàn)?Wordpress 的崛起,媒體巨頭們害怕自己的作品被“一個(gè)有博客的家伙”扼殺,于是接受了這一趨勢(shì),開始使用 Wordpress 來增強(qiáng)他們的互聯(lián)網(wǎng)影響力。Wordpress 甚至為這些公司提供了 VIP 模式。
PHP 上的這種“硬鎖”現(xiàn)在正在改變,這主要?dú)w功于云服務(wù)為其它編程語(yǔ)言提供了新平臺(tái),但即使到了今天,租到一臺(tái)運(yùn)行 PHP 的服務(wù)器并在一天內(nèi)開始使用也不稀奇。事實(shí)是,今天也很容易租到一臺(tái)運(yùn)行 Node.JS 或 AWS Lambda 的服務(wù)器。你不需要多年的培訓(xùn)來使用一家云服務(wù)提供商,或者一個(gè)服務(wù)器服務(wù),甚至谷歌也提供了一個(gè)使用谷歌云平臺(tái)的教程。
盡管如此,PHP 仍然是能夠支持網(wǎng)站開發(fā)的屈指可數(shù)的語(yǔ)言之一。隨著越來越多的人參與進(jìn)來,社區(qū)和官方都推出了工具:Opcache 用于 I/O 性能處罰、PDO 用于通用數(shù)據(jù)庫(kù)層、Autoloader 用來使大型項(xiàng)目更易管理、Composer 用于依賴部署、PSR 用于標(biāo)準(zhǔn)化代碼規(guī)范、PHPUnit 用于測(cè)試、PECL 用于擴(kuò)展等等。
所以,回到概念上來,淡出意味著被取代。它的使用量不會(huì)增長(zhǎng),而是變得停滯不前。唯一可能發(fā)生的事情就是慢慢被其它解決方案取代。這不是發(fā)生在一夕之間,而是常年的積累。
從公司的角度來看,改變技術(shù)棧需要花費(fèi)大量的資源,而沒有立即的 ROI:遷移到新的技術(shù)棧不是沒有代價(jià)的,更不是一天就完成的。更糟糕的是,有些工具可能不存在,比如分析、調(diào)試、甚至部署工具,這些都必須從頭開始。
這使得很難說服老板進(jìn)行“技術(shù)棧”遷移。這些老板,不是負(fù)責(zé)你的人,而是那些投資為了保持利潤(rùn)比上一時(shí)期更高的人。除非你能證明有一個(gè)新的“商業(yè)機(jī)會(huì)”,舊的技術(shù)棧無能為力,或者與其它新技術(shù)棧相比會(huì)相對(duì)性地賠錢,否則通常很難改變已經(jīng)生效的一些東西。
4錘子是可靠的。射釘槍更好。
結(jié)合上下文,看看 W3Tech 對(duì) PHP 的看法,你會(huì)發(fā)現(xiàn) PHP 仍然因?yàn)楸皇褂玫刈疃喽鲗?dǎo)著因特網(wǎng),但不是在 100% 的真實(shí)流量上,而是在頭部網(wǎng)站上,包括非美國(guó)平臺(tái)。換句話說,如果 Facebook 使用了一個(gè) PHP 腳本,那并不意味著整個(gè)平臺(tái)都是基于 PHP 的——以及會(huì)更多地在該公司上。
Wordpress 仍然是事實(shí)上被廣泛使用的 CMS,與 WooCommerce 一起成為企業(yè)的首選。雖然也有 SaaS 提供相同的服務(wù),但可能沒有必要修復(fù)沒有損壞的東西。
由 W3Techs.com 收集的網(wǎng)站使用的服務(wù)端編程語(yǔ)言的比例
以上說明:PHP 仍然是任何 web 項(xiàng)目都要考慮的工具。到目前為止,Wordpress 是 PHP 的巔峰之作。仍然有新的網(wǎng)站正在使用 PHP 創(chuàng)建。當(dāng) PHP 滿足所有的復(fù)選框時(shí),一兩個(gè)人建立一個(gè)互聯(lián)網(wǎng)公司仍然是完全正常的... 直到它不能滿足所有條件。
今天有很多 web 技術(shù)可以使用:WebRTC、WebSockets、QUIC、HTTP/3、WebAssembly、WebAuthn、漸進(jìn)式 Web 應(yīng)用、機(jī)器學(xué)習(xí)、JSON Web 身份驗(yàn)證、gRPC 和服務(wù)端事件等等。這些技術(shù)支持了在線聊天系統(tǒng)、多媒體流、持續(xù)實(shí)時(shí)數(shù)據(jù)、新的身份驗(yàn)證機(jī)制等等。這些技術(shù),PHP 都很難支持,甚至不可能支持;例如,很難支持流式那樣傳輸大文件而不會(huì)阻塞自身,或者不可能支持 WebSockets。
Hack 只是大公司的未來,因?yàn)樗麄円婚_始就能燒錢運(yùn)行 HHVM...
因?yàn)橛泻芏喙ぷ饕?#xff0c;所以從一種語(yǔ)言過渡到多種語(yǔ)言,或者將服務(wù)推給向你提供所需功能的公司,比如讓 Mux 處理視頻平臺(tái),讓 Pusher 處理事件傳播,已經(jīng)成為一種常態(tài)。有人可能說你是花錢圖方便,但也有人會(huì)說你付錢是因?yàn)槟愕募夹g(shù)棧無法處理這些問題。
另一方面,你可以自己掌控所有東西。前端可以在 PHP 下工作,也可以是一個(gè)基于 JavaScript 或像 React、Angular 或 Vue 框架的單頁(yè)應(yīng)用(Single Page Application,SPA)。后端可以運(yùn)行在基于 Rust、Go、F#、HHVM、.Net Core、Node.js 或者別的什么語(yǔ)言的應(yīng)用上。因?yàn)?PHP 不能做所有事情,開發(fā)地獄就開始了,一致性會(huì)快速喪失。你開始從依賴一個(gè)生態(tài)系統(tǒng)到依賴非常多生態(tài)系統(tǒng)。
PHP 項(xiàng)目與其它 SaaS 或者基于 Node.js、Python、Go 或 Rust 編寫的運(yùn)行時(shí)結(jié)合在一起就不足為奇,添加另一個(gè)要維護(hù)的代碼庫(kù)或應(yīng)用程序。這可能弊大于利,因?yàn)槟惚仨殲轫?xiàng)目的每個(gè)部分處理兩個(gè)(或更多)部署方案。
雖然有少數(shù)人能夠處理所有事情,但向一個(gè)人提供合同的可能性非常小,主要是因?yàn)槟芴幚硭惺虑榈娜撕苌?#xff0c;而且也不便宜。
5“但是這個(gè)偉大的公司使用 PHP”
我經(jīng)常聽到的一句話是“但是 Facebook 使用 PHP”,好像它是一種蓬勃發(fā)展的 Web 技術(shù)。以 PHP 起家的頂級(jí)公司已經(jīng)明確表示,Hack 及 HHVM——“現(xiàn)代化 PHP 但消耗內(nèi)存”——是公司的后續(xù)措施:
-
Facebook 遷移到 Hack/HHVM 并從 2014 年開始運(yùn)行。
-
Wikipedia 也在 2014 年通過 HHVM 的支持拋棄了 PHP。
-
Etsy 也在 2015 年從 PHP 遷移到了 Hack。
-
Slack, 被 SalesForce 用 277 億美元收購(gòu),也在 2020 年從 PHP 遷移到了 Hack。
注意,我強(qiáng)調(diào)了“企業(yè)后續(xù)措施”。Hack 就是未來?事實(shí)上,Hack 只是大公司的未來,因?yàn)樗麄円婚_始就有錢運(yùn)行 HHVM,而且他們不想遷移 90% 的代碼。剩下的非百萬富翁公司只能使用 PHP 和廉價(jià)的服務(wù)器。
任何一家擁有大筆資金的公司都可以為自己的利益創(chuàng)造自己的語(yǔ)言,就像 Facebook、Apple、Google 和 Mozilla 那樣,因?yàn)樗麄冇腥?、有頭腦去做,有服務(wù)去實(shí)現(xiàn)。無論好壞,我們只是附帶的。
擁有一門內(nèi)在需求穩(wěn)定的語(yǔ)言可以讓它進(jìn)步,即使有時(shí)這意味著做出不太好的決定。
6它足夠了,直到它不能
有時(shí)候說“你不能在 PHP 上做那件事”有點(diǎn)兒讓人難過。新的 JIT 引擎很受歡迎,但它并不是將它與其它新興語(yǔ)言相結(jié)合的靈丹妙藥。性能過去是 PHP 的一個(gè)非常重要的問題,但現(xiàn)在它不是唯一的問題?;ヂ?lián)網(wǎng)在發(fā)展,而 PHP 沒有。
圖片來源:Carl Heyerdahl on Unsplash
如今,網(wǎng)頁(yè)只是起點(diǎn)。正在發(fā)生的 COVID-19 大流行表明,你需要系統(tǒng)針對(duì)不同數(shù)據(jù)類型的不斷變化的狀態(tài)做出反應(yīng)。如今,PHP 還不夠,當(dāng)它足夠的時(shí)候——看看最近的發(fā)展有多慢——開發(fā)人員將擁有更好的工具。沒人會(huì)等著 PHP 實(shí)現(xiàn)自身的現(xiàn)代化,也沒有企業(yè)會(huì)這樣做。這就是所謂的進(jìn)步:新工具取代老工具。
當(dāng)你需要的不僅僅是顯示一個(gè)具有基本交互的網(wǎng)頁(yè)時(shí),問題就出現(xiàn)了。就在那時(shí),PHP 展示了其二十多年的歷史,它是如何與當(dāng)今的技術(shù)和產(chǎn)品需求脫節(jié)。
我肯定不是唯一一個(gè)等了足夠時(shí)間讓 PHP 成為一個(gè)像樣的技術(shù)競(jìng)爭(zhēng)對(duì)手的人。從業(yè)務(wù)邏輯的角度來看,PHP 非常方便,因?yàn)樗恼Z(yǔ)法允許在專家手中非常有表現(xiàn)力的聲明操作,特別是在“業(yè)務(wù)邏輯”部分,但它不是萬能的。
PHP 是現(xiàn)在,但不是未來。
我認(rèn)為這些段落表明 PHP 因?yàn)槠浔举|(zhì)而仍然是王者。沒有哪一種語(yǔ)言在提供便利和成熟的同時(shí)獲得如此大的吸引力,而不是功能——另外,就是 Wordpress 效應(yīng)。
PHP 如何將被淘汰?每個(gè)人只需點(diǎn)擊幾下就可以創(chuàng)建它們自己的簡(jiǎn)介、商店、圖片庫(kù)、云存儲(chǔ)、群聊等等;無需托管,無需服務(wù)器和代碼。
我個(gè)人認(rèn)為,現(xiàn)在,由于 SaaS 和一鍵安裝的激增,我們已經(jīng)超越了像 Wordpress 那樣的“殺手級(jí)應(yīng)用”。我們現(xiàn)在處于“殺手級(jí)生態(tài)系統(tǒng)”,一種語(yǔ)言已經(jīng)描述了部分,而你帶來自己的膠水。也許是 Node.js? 也許是 Go?也許是 Python?也許是 TypeScript 編譯為二進(jìn)制?也許是 Rust 的垃圾收集器?也許是一種全新的語(yǔ)言?
7也許是 PHP 9?
我看到一些人希望對(duì) PHP 進(jìn)行大的修改。除非 Rogue Wave(Perforce)內(nèi)部有什么變化來推動(dòng) Zend 引擎在技術(shù)上向前發(fā)展,否則絕對(duì)不會(huì)。他們很可能是想要賣掉 Zend 服務(wù)器。我不認(rèn)為他們是成功的,當(dāng)你考慮到大公司盡快離開 PHP 的趨勢(shì),并使博客文章對(duì)每個(gè)人進(jìn)行嘲諷。
并不是說 PHP 明天就會(huì)停止使用:它仍然工作,而且很容易掌握,因?yàn)榭傆幸粋€(gè) MVP 可以開始,它不需要花里胡哨的東西。只不過,PHP 是現(xiàn)在,而不是未來,負(fù)責(zé)這一點(diǎn)的人其實(shí)并不在乎。也許一旦一種新的語(yǔ)言出現(xiàn),提供 PHP 和其它語(yǔ)言中最好的部分。Hack 剛剛證明了公司級(jí) PHP 有很好的代碼重用市場(chǎng)。
一旦下一個(gè)大事件席卷互聯(lián)網(wǎng),PHP 就來不及趕上了。
沒有語(yǔ)言會(huì)完全死掉。PHP 沒死,只是其它語(yǔ)言已經(jīng)超越了它。當(dāng)然,它們不像 PHP 那樣經(jīng)過戰(zhàn)斗測(cè)試... 但他們正在實(shí)現(xiàn)。
當(dāng)你認(rèn)為人類對(duì)未知事物有固有的恐懼時(shí),就會(huì)很容易同情那些被告知嘗試另一種工具時(shí)的語(yǔ)言狂熱者的憤怒。這適用于走出舒適區(qū)進(jìn)入新事物,在本例中,這是從一種可靠的語(yǔ)言(如 PHP)遷移到更適合您需求的其它語(yǔ)言。沒有人會(huì)因?yàn)閮H僅“浪費(fèi)”一周或一個(gè)月去學(xué)習(xí)和了解新的生態(tài)系統(tǒng)而死掉。最壞的情況是,你學(xué)會(huì)了不再去哪里,就像你選錯(cuò)了度假目的地。
通過多年的軟件開發(fā)解決問題,我認(rèn)識(shí)到,走向(而不是跑向)技術(shù)的地平線是工作的一部分,即使這意味著接受我們?cè)?jīng)熱愛的東西走向命中注定...
總結(jié)
- 上一篇: TPM设备管理学习心得
- 下一篇: 万花筒模拟