或許你會質疑——PHP 不是已經完蛋了嗎?市面上已經出現了很多“更好”的程式語言,不是嗎?
答案顯然是否定的,否則PHP
早就消失在人們的視野當中、還被踩上一萬隻腳。要找到背後的根源,我們恐怕先要弄清楚所謂“更好”的語言究竟是什麼意思。
如果大家還不理解PHP
為什麼仍然活蹦亂跳,那我們可能得從程式設計、程式設計師、市場以及技術大眾化等問題說起。是的,真正的原因在這裡,而非程式碼、函式或者語法。
曾幾何時,罵 PHP 代表一種潮流
要想在如今的編碼工程領域選定隊伍、站穩陣營,大家首先得把除領導指定語言之外的一切競爭性程式語言先痛罵一遍。這跟功能特性無關,而是業務文化的直接體現。換言之,這樣的情景常讓人想起入教儀式。
程式設計師們是一群固執己見的傢伙,包括我在內,我們都很囂張、喜歡抨擊一切自己不用或者不喜歡的語言。大家肯定都聽到過工程師說“Java
太爛了,C#就是坨垃圾、啥也不是。”這裡具體在說什麼語言並不重要,只要能博大家一笑就行。
但肆意痛斥的背後還隱藏著一種更深層次的不屑,這一點在最近的PHP
與Python
之爭中體現得尤其明顯。在很多學術人士看來,這就像是一場血腥的改朝換代、似乎有人想幹掉PHP
並用 Python
徹底取而代之。
不信大家可以上維基百科查一查,其中 LAMP
堆疊詞條中的“P”代表的是 Python
。有意思吧,20 年前我剛接觸 LAMP 的時候,這個“P”可絕對指代的是 PHP——沒錯,既不是 Python 也不是 Perl。我不是說情況不能演進轉變,但 Python 怎麼就在不知不覺中替代了 PHP 的文化地位?這確實是個值得深思的問題。
對於大多數程式設計師來說,我們會在學校裡學習 Python 以及其他一些在現實場景中可能永遠用不上的小眾語言。大家多少會聽到教授或者其他從業者說出“PHP 很爛”之類的話,但如果深究下去,我們會發現他們可能從來沒認真寫過哪怕一行 PHP 程式碼。
事實上,光是想想有人在全職寫 PHP 程式碼都會讓我們心底一寒,如同親眼見到惡魔撒旦真的有忠實信徒一般。
這種對 PHP 的蔑視其實相當合乎邏輯,甚至在程式設計師群體當中形成了一種內生性的共識。跟朋友們坐在星巴克享受下午時光,順便吐槽一下川普、流行搖滾還有 PHP,豈不美哉!
此外還有程式設計純粹主義者,他們願意浪費大量寶貴時間來論證 PHP 為什麼真就那麼爛。大多數爭論都圍繞著他們不喜歡的某些設計傾向或者細微差別展開,而且踩一捧一是這類交流中的常見伎倆了。語言嘛,必須得評出誰高誰低,畢竟紫金葫蘆都要分個公母呢。
可抱怨的也確實不少:PHP 是一門型別鬆散的語言,所以經常孕育出糟糕的程式碼。(但 JavaScript 和 Node.js 也一樣,怎麼沒見大家有那麼大怨氣?)PHP 的函式太多了。(沒錯,這樣太方便了,顯不出程式設計師的水平。)函式名稱不一致。(是的,當一種語言真正實現了大眾化、而非被全部掌握在單獨一個電腦科學博士的手裡時,就會出現這樣的問題。)
我們們迴歸正題,可以看到針對 PHP 的批評意見主要源自個人偏好或者對細節的挑三揀四。如果我們願意,也完全可以在 Python、C#、Java、Go 或者 JavaScript 等其他語言裡挑出類似的毛病。作為程式設計師,我們就是愛抱怨,抱怨讓我們快樂。
但程式設計師們喜歡抨擊 PHP 的真正原因,在於我們固有的傲慢態度與不斷膨脹的嫉妒心混合到了一起。
PHP 確實更容易使用
PHP 誕生於上世紀九十年代中期,歲數甚至比很多少壯派程式設計師還大。我是從 2000 年初開始接觸 PHP 的,當時它剛剛從版本 4 過渡到版本 5。後來,我開始在自己編寫的 CodeIgniter ZendFramework
框架中編寫應用程式。
在我看來,PHP 之所以能夠保持長青、多年過去仍無衰老跡象,主要原因就是它被嵌入到了全球各地的新舊應用程式當中、也被嵌入不分老少的開發者頭腦當中。有些人用過幾年,也有些人用了幾十年,PHP 都在他們心中留下了深刻印象。開發者不會消失、編寫出的商業程式碼也沒有消失,所以 PHP 依舊健在。而且有趣的是,Python 其實誕生於 1991 年,比 PHP 還要早。而且雖然生命週期更長,但 Python 一直沒能達到 PHP 目前的高度。
為什麼會這樣?
從個人觀點出發,我覺得跟 PHP 相比,Python 使用起來要更麻煩。這個問題在 Python 3 中有所改善,但退回 15 年前,Python 還沒有 PHP 中開箱即用的那些“花哨功能”(函式)。很多功能必須手動安裝,否則就沒得用。
而且長期貫穿 Python 語言的另一個老大難問題,就是其中的間隔語法。我真的非常討厭這種由程式碼間的空格數決定分隔關係的語法。我喜歡按自己喜歡的方式分隔程式碼,而且完全受不了程式語言本身在這裡動腦筋。大家可以隨意批評我的這種習慣,但這是我自己的程式碼、是我親手寫的,想要按自己的風格來有錯嗎?如果連這點權利都不給,我詛咒自以為是的槓精們天天查 bug。
Python 一直吹噓這種間隔語法“易於閱讀”,這明顯是營銷屁話。我話擱在這裡——Python 用的這套語法,堪稱程式語言界最自以為是、最糟糕的語法。
正是這種令人難以理解的自以為是,讓程式設計師們飽受折磨;在程式設計早期、還沒有 IDE 能幫我們糾正語法錯誤的年代,根本就不會有多少程式設計師願意正眼瞧瞧 Python。反正我自己是不想。更確切地說,這也是 Python 語言在誕生的前十年一直拿不下可觀市場份額的一大原因。沒錯,這種設計壓根沒有使用者友好性可言。
另外,Python 語言的存在感也不強。它是作為指令碼語言被嵌入到 Linux 發行版中的,這也是它最主要的用途所在。沒有人會歡呼“耶,Python 來了,我們可以用它構建網站了!”
當然,Python 也可以用來做網站,但優秀的工程師都能感受到它的特性並不適合 Web 開發場景。除了個人在語法層面的偏好之外,我承認 Python 是一種功能極為強大的語言,特別適合處理資料科學或者其他著重高精度數學運算的任務。
人人都能上手 PHP
過去 15 年以來,Python 確實迎來了脫胎換骨般的更新,所以在不少層面上已經超越了 PHP。但 Python 仍有兩個沉重的包袱沒能丟掉:第一,大部分更新的出現都晚了十年。
Python 3 釋出於 2008 年,它的出現破壞了向下相容性。除非額外修改,否則 Python 2 程式碼無法與 Python 3 一同執行。但企業環境下動不動就有幾十、上百萬條老版本程式碼,誰願意去費這個勁?
公平地講,PHP 7 和 8 也破壞了部分 PHP 5(並沒有 PHP 6 這個版本)程式碼。我曾是 ZendFramework 社群的一員,社群一直幫助更新框架以支援舊程式碼的 PHP 7 和 8 上執行。好訊息是,在將 ZendFramework 升級至 PHP 7 和 8 時,我們的遺留程式碼幾乎沒受到任何影響。因此,大部分 PHP 5.6 的程式碼都得到了良好的向下相容效果。
而真正讓 PHP 成為業界長青樹的分水嶺事件,也許是一家名為 Automattic 的小型初創企業在 2005 年的悄然建立。
如果 WordPress 是用 Python 編寫的,我敢保證 PHP 絕對沒有今天這麼得意。但我也敢說,Python 會阻礙、甚至扼殺掉 WordPress 獲得如今這樣廣泛成功的可能性。
一種語言或者應用程式要想在開源市場上持續生存,貢獻者的使用與擴充套件可謂至關重要。而誰更易於上手,誰就能在行業內吸引到更多貢獻者的支援。
作為受到科班培訓的軟體工程師,一切針對 PHP 的辱罵我都可以嘗試去理解,但我想提醒大家一點——使用 PHP 的並不只是有著正規文憑的工程師,還有兼職人員、家庭主婦、平面設計師、公司經理、企業家甚至是小學生。沒錯,成千上萬的小學生正在自己第一臺計算機用 PHP 編寫網頁。
也可以說,PHP 就是資訊時代下的 BASIC 語言。
而作為軟體工程師,很多批評者已經習慣了工程師的思維方式,卻忘記這世上還有無數只想為小公司建個網站、時間跟資源都很有限的 PHP 使用者。
WordPress 和 PHP 向他們敞開了熱情的懷抱。是的,WordPress 本身確實易於使用,但還不夠全面。而補充這個短板的正是 WordPress 外掛架構(「架構」這個詞在這可能不太準確,但大家能理解就行),允許普通人用 PHP 編寫一小段程式碼來實現相應變更。用不著重寫整個類、也不用考什麼軟體工程師認證,只需要一小段程式碼。
這數以百萬計的業餘程式設計師們就這樣邁出了自己的程式設計之路,並在網路上與他人分享自己的心得、最終建立起碩大無朋的 PHP 技術社群。
易於理解的 PHP 讓普通人也能有效編寫程式碼,它簡單、沒脾氣、型別鬆散、不涉及編譯,可以說是任勞任怨。
PHP 支撐著整個全球資訊網
快進到 15 年後,如今 PHP 支撐著 78%的 Web 系統。單是 WordPress 就在全部網站中佔比近 40%,並擁有近三分之二的 CMS 份額!更重要的是,“聲名卓著”的 Python 在這塊蛋糕上僅佔 10%!雖然作為競爭對手的 Python 死忠們對 PHP 充滿仇恨,但 Python 支援的 Web 佔比還不足 1.5%。
氣不氣?其實沒什麼可氣的。
對,理當如此。
有企業客戶的招聘人員聯絡過我,表示打算刪掉所有 Python Web 程式碼並替換成 PHP。這事聽著挺神奇,但其實經常發生。為什麼?因為有一說一,Python 並不怎麼適合 Web 應用。熟悉 Python 的開發者往往是資料科學及其他領域的專家,而且有經驗的人才在市場上可謂供不應求。讓他們搞 Web 開發,就挺沒必要的。
企業則希望在 Web 上靈活一點。當他們需要擴張或者削減團隊規模,也不想花幾周甚至幾個月慢慢找尋熟悉 Python 的人才。這類工程師很貴的,企業不大負擔得起。
但適應不同業務規模的 PHP 程式設計師在勞動力市場上則是保質保量,甚至可以根據需要快速培訓。更重要的是,就算想找一位經驗豐富、擁有數十年經驗的高階 PHP 架構師,難度也遠低於在 Python 領域找個同等水平的。
而且公司管理層也會教 Python 鐵粉們做人。你想在沒有硬性理由的前提下用 Python 寫 Web 或者中介軟體?人家根本沒那麼多預算,而且要求隨時方便撤換成其他工具,這些都是 Python 不擅長的。
要成為一名合格的應用程式架構師,首先就是學會用最有效的技術為業務或者企業提供“規模適度”的支援:我們的個人偏好不重要、技術時不時髦不重要,最重要的是多、快、好、省。
所以我發現適合完全用 Python 編寫的 SaaS 應用程式其實很少。考慮到 Python 在 Web 領域可憐的市場份額,似乎大多數應用程式架構師都跟我有著相同的判斷。他們只在最適合的地方使用 Python,並在更多其他適合的地方使用 PHP。
總結
作為工程師,我們都喜歡用自己熟悉的東西,也習慣了對自己不瞭解的東西大加貶低。別不敢承認,我們們程式設計師就這毛病。
高校一直努力把 Python 定位成一種通用型商業語言——但它並不是。Python 更適合作為一種高階語言,專門用於執行伺服器、資料科學、處理大規模複雜資料,甚至是處理加密貨幣採礦。這些才是它的專長。
而 PHP 則屬於大眾語言,也已經成為全球資訊網上的客觀標準。
所以如果願意,各位也可以繼續對 PHP 惡語相向,沒關係。但歸根結底,它仍是目前 Web 上使用範圍最廣的語言;而且隨著 WordPress 的持續增長以及 PHP 7 和 8 的持續升級,這種領導地位短期內也絕不會被動搖。
本作品採用《CC 協議》,轉載必須註明作者和本文連結