PHP沒戲了?想看PHP被淘汰還早著呢!
我寫這篇文章有段時間了,這里改改那里改改,但就是不知道什么時候發表。最近PHP 8發行,讓我覺得現在“是時候了”。
每個月我都會看到有人說PHP正在逐漸過時,我們不應該在使用它。如果你在一些論壇或者Stack Overflow上看到關于“學習PHP”的問題,百分百會看到有人發類似“為什么會想要學PHP?學點牛的不香嗎,比如說‘某牛語言’”的言論。
我寫PHP將近20年了(可能更久,我不太記得我什么時候開始的了)。在用其他語言的時候,大多數情況下,我都會直接忽略對話的大部分內容。這么多年來,PHP都在漸漸“失去生命力”,我早就應該不用它了。在任何語言上我都稱不上是專家,關于PHP我還有很多要學的,但是我發現自己一次又一次地選擇它。
偶爾讀到一些寫的不錯的勸人不要使用PHP的文章時,我也幾乎被說服了,所以我花了很多時間去學習其他語言。我必須承認這些探索使我收獲頗豐。雖然我可能在使用上永遠也達不到專家級水平,但是通過學習其他語言,我對程序員這個職業有了更深的理解。
如果說從這篇文章中有什么東西要學的話,那就是:去學新的語言。但是不是因為“PHP失去生命力了”——這是錯誤的觀點。你要學習其他的語言是因為這對于作為程序員的你有好處,如果PHP真的要沒戲了,那么你更應該去學別的語言。但是此時此刻,它并沒有失去生命力。
對于很多寫PHP的程序員來說,當他們需要捍衛自己的選擇時,他們可能最先會亮出一些表格,這些表格顯示了PHP在全網的歡迎程度。雖然這些數字很振奮人心,我還是有些懷疑它們帶有誤導性。
我們必須要認識到PHP受歡迎,是因為人們對于WordPress的喜愛。無論你喜歡不喜歡WordPress,都必須承認它的存在至關重要。但是說實話,WordPress還是有很多缺陷的,并且不在少數。但是我知道很多人都用WordPress完成很多了不起的事情,也賺了不少錢。
PHP不是WordPress,即使WordPress深深植根于PHP歷史的土壤中,PHP要比WordPress好得多,好得多得多的多。WordPress有很多不足的地方,PHP也有很多不足的地方,但這并不意味著它們不適用于所有項目。
我一般不會用C++去寫網絡程序,至少它會排在我選擇清單的末尾。但這不是說C++就是種不好的語言,它只是不適用而已,就像我不會用PHP去寫硬件驅動或任何和AI有關的東西,這已經超出了它的能力范圍了。
對語言的選擇當然也和你自身對它們的掌握程度緊密相連。就像老話說的那樣:時間就是金錢,用新學的語言去進行一個項目往往是艱巨的,這會讓本來就很緊張的時間雪上加霜。
我對PHP比較熟悉,所以我往往先選擇它。我略懂一點Python,但是我寫PHP要得心應手得多。同一項任務我也可以選Python,但是花費的時間可能會是兩倍(至少剛開始是這樣的)。這并不是說我之后都不會使用Python或者我對Python有什么不滿的,只是說PHP是我的首選。
學習一門編程語言并沒有那么難,一個有經驗的程序員可能花上一個周末就能掌握一門語言的要點。但是這并不意味著他們懂這門語言。了解哪個內置函數做什么不叫懂一門語言,你必須要有足夠的經驗知道什么時候用什么樣的特性,或者明確這整個生態系統如何結合在一起。
我懂PHP,但我也知道如何設置一個Nginx web服務器、如何配置FPM或opcache。我掌握的足夠多,有能力擺脫依賴的影響,做出正確的選擇。我知道如何在生產環境中安全地部署PHP應用程序,而且我知道如果不小心使用某些語言特性,可能會帶來安全問題。這些事情不僅僅是“了解”一門語言就能夠知道的。作為程序員,我們需要投入大量的時間來學習我們選擇的這些語言之外的東西。
這就是為什么當有的程序員說你選的語言就是“垃圾”,我會感到非常失望。我花了二十年的時間去在磨練這方面的技術,現在卻來了個人告訴我,我的選擇是錯誤的?
其實這并不是錯誤的選擇,PHP給我帶來了滿意的工作。我之所以能住上漂亮的房子,能開著豪華的轎車,正是因為我花了20年時間精通PHP。扯遠了,應該接著講為什么PHP不是垃圾的。
很多討厭PHP并認為它應該被淘汰的人,會列很多點來證明PHP是大錯特錯的選擇。有很多我們這幾年來一直聽到的觀點都是針對PHP的骨灰版本(我不知道為什么每個人都還抓著PHP4不放,搞啥呢?)。
還有些點根本就是無稽之談甚至是錯誤的。這不是爭奪“我的編程語言比你好”大賽,不需要歇斯底里,我打心底里認為每一種編程語言都有它本身的使命。那些發明這些語言的人(也就是那些比我聰明得多的人)發明這些語言都是有原因的,編程語言不是隨隨便便就能被搞出來的東西。
那么,為什么要選PHP呢?
答案很明了:因為它就在那里。我是自學PHP的,沒參加過多少正規培訓,除了偶爾參加的網絡培訓課程,我沒有上面蓋著“我可以教電腦做事情”的名牌大學畢業證。
我是學設計出身的,雖然我從大概七歲開始擺弄代碼和電腦,但是我對接受這方面的教育卻沒有同樣的熱情。我甚至不知道為什么,我熱愛電腦熱愛網絡,卻選擇了平面設計。我不想贅述這方面的內容,因為雖然我有這個學位,但是它在我今天的工作中卻沒有起到太大的作用。
我相信和大多數PHP程序員一樣,我開始使用PHP是因為我們想要網站做更多,不僅僅是顯示一張圖片和一段文字。當我學會了如何將數據從數據庫里提取出來顯示在網頁上時,我萬分激動,這太振奮人心了!這正是我想要的,所以我便一頭扎了進去。
后來,我遇到了WordPress。就像那些坐在電腦屏幕前,懂一點PHP基本知識的自以為是的人改變這一切一樣,WordPress也改變著一切。WordPress的成功要歸于像我這樣的人,我們這些年輕人想要一個自己的博客,卻不知道怎么自己建立。
你安裝了WordPress……然后添加了一個插件,改變了主題……然后你對主題做了一些小小的改變,所以它完成一些其他的東西,或看起來有點不同。然后你修改了一個插件。然后你創造了自己的主題。然后你在想,我還能做什么?
所以我認識了PHP,不是我選擇了PHP,而是PHP選擇了我。20年后我還在用PHP創造東西,早就不用WordPress了。我想我已經是個成熟的PHP程序員,有能力來寫這篇文章了。
“PHP太簡單了,你應該學點有挑戰性的”
PHP那么受歡迎的其中一個重要的原因就是它無處不在,哪里都裝著它。就連你最普通的MacBook中也預裝了PHP,真見鬼。
從頭寫PHP也非常容易,通常沒有什么特別的事情需要你做。創建一個index.php文件,在里面放一行PHP代碼,然后上傳到幾乎所有的共享主機賬戶:
- <?php
- echo Hello, World! ;
然后就完成了。入門PHP真的特別簡單,你不需要知道它的工作原理。你安安心心地干就完事了。然而,如果你相信的話,PHP的這種“易操性”實際上也可能是它的一種缺點。理論上講,如果PHP如此簡單,那么用PHP編寫危險的代碼也非常容易。
一想到這,我有點坐立難安。這是否意味著人們不太可能使用那些難的語言來編寫危險的代碼?我在哪里讀到過,微軟為Windows發布的修補程序中,大約有70%是為了解決由c++引起的內存問題(這話不是我說的)。我懷疑用c++寫微軟的人都是業余的,而且我很確定他們知道自己在做什么。
是的,雖然Windows比你用的購物車網站要復雜得多,但是我認為這個觀點是站得住腳的。Python是公認的新手友好型語言,但是卻沒有人說它“危險”。用任何語言寫任何危險的代碼都是容易的。不是語言創造了危險的代碼,而是缺乏相關的知識創造了危險的代碼。
“簡單”不是勸退新手學習PHP的理由,相反,這給了初學者們更好的工具,好讓他們在寫代碼的時候做出更好的選擇。這是也是幫助他們找到合適的資源正確學習PHP的原因。我還是挺幸運的,盡管我寫過不少“危險”代碼,我的學習之路上總會有一些貴人(不一定是PHP工程師)來幫助我找出需要改進的地方。
PHP很慢
并不。PHP 可以同步你寫代碼的速度。PHP是一種腳本語言,因此將其與編譯語言進行比較是毫無意義的,然而出于某種原因,我看到甚至有人將PHP與Rust或Go進行比較。這些比較沒什么意思。
把它和python或是Ruby比,可能還好一些,但是一種語言的“速度”是由多種因素決定的,語言本身,還有環境,運行的代碼,解釋器配置方式,等等。憑空就說PHP很慢是不夠意思的。
對于某些類型的任務,PHP確實很慢。例如,如果從事機器學習領域的工作,可能就別首選PHP (盡管有一些很有趣的項目正展現出一些前景)。
有時你會看到一些基準測試,兩種語言做同一件事,比如循環超過100萬條記錄,做一些簡單的計算。結果往往相差幾毫秒,這常常有時候被用來證明PHP運作慢(有時候用來證明快)。如果你編寫的軟件,在對一百萬條記錄進行循環時,多花幾毫秒就會造成災難性的后果,那也無話可說。
WordPress挺垃圾的
我還蠻同意這個觀點的。目前我不太喜歡WordPress,但是我也承認沒有WordPress,我們很可能也不會有今天的PHP社區。然而,因為一個軟件就說一種語言不好也有點草率。這就好像因為你不喜歡Microsoft Windows,就說C++是一種垃圾語言一樣。
PHP不是只有一種功能,WordPress也只是它的一部分。如果你想的話,有大量的框架和軟件包供你選擇。人們說Laravel是“讓PHP再次炫酷”。我必須承認,這個框架是到目前為止我最喜歡的框架之一,并且對我來說在大多數項目中選它都是最容易的。
因為WordPress是由PHP寫的,就說PHP不好有失公允。有人可能會說WordPress反映了PHP的局限性,但那是很久以前的事了,而且從那時起這門語言已經成熟了很多。
PHP不適合企業使用
為什么呢?我都不知道這種言論從何而來,但這種風真的很大。那么什么才能讓一種語言“適合企業”呢?Java可能是最受企業歡迎的一種語言之一了,但是并不是因為Java本身是適合企業的。是因為Java EE平臺的存在,我不是Java開發人員,所以有錯歡迎糾正。
在我看來,Java是一種構建企業應用軟件的平臺。聽起來有點像一個框架,對吧?所以可能這個問題應該是:“我最喜歡的PHP框架是不是適合企業的呢?”
要回答這個問題的話要再寫一篇文章了。我想說的點就是PHP和其他任何語言一樣,都是足夠適合企業使用的。這完全取決于你怎樣用它。
順便提一下,我曾是一個小型團隊的一員,這個團隊在南非一家最重要的金融機構的內部網絡上構建并部署了一個事件管理平臺(我可能會寫一些我在這方面的經驗)。該應用程序完全是用PHP和JavaScript編寫的。
隨著新冠疫情的全面爆發,整個系統承受著巨大的壓力,但它幾乎應付了所有的壓力。我們也遇到了一些問題,但都很快解決了。
PHP不可擴展
這可能是唯一一個有點理據的觀點了,但是這比你想象的要復雜許多。事實上,如果你編寫了像樣的代碼,PHP就能很好的擴展。當人們說PHP不可擴展時,他們通常指的是用PHP編寫的應用程序可能無法處理非常大量的請求(比如數百萬)。
問題是,這并不是那么簡單的,我認為很多對它的誤解來自于WordPress,最近WordPress因有擴展性問題而出名。
來舉個例子,Slack是一個通訊平臺,曾一度想要取email,它有幾百萬的用戶,他們每天用的這個系統的后端就是用PHP寫的。如果這還不能說明PHP可擴展,那我也無話可說了。
很多人引用Facebook作為一個很好的例子,即使我認為Facebook在一些形式上還使用PHP,但是大部分的應用都不用PHP了。但是說實話,Facebook這個例子有點特殊。
談論擴展性繞不開基礎設施。如果你在一個簡單的共享主機上托管一個WordPress博客,然后你突然得到成千上萬的點擊……這可能是一個問題,你的主機會給你發一封令人討厭的郵件,或者至少會給你開出比你預想的多得多的賬單。
擴展應用程序涉及的不僅僅是語言選擇。有很多變化的部分,每當PHP首當其沖受到指責時,我都感到難過。在適合的環境和配置下,新版本的PHP完全能夠每秒處理大量請求。Laravel Vapor是一個在AWS上運行的Laravel應用程序的第一方無服務器平臺,它有一些非常令人印象深刻的數字。
我有時候覺得擴展性這個問題有點夸張,我寫PHP20多年了,我從來都沒有遇到過每秒“數百萬個請求”的情況。甚至類似的情況也沒有。我們絕大多數的人都沒有機會去建立下一個Facebook,無論我們有多想。
在現實中,我們建立的軟件有針對性多了。我們打交道的是特定國家里的特定行業,所以我們不用擔心需要面臨每秒數百萬個請求的情況。對于我們參與的許多項目來說,這是一個巨大的數字。這并不意味著我們所做的不重要,只是意味著我們不需要考慮那種規模,擴展應用程序以處理數百萬個請求并不是我們日常工作的一部分。
PHP好丑
你怕不是在開玩笑吧,我把最煩人的這個觀點留到最后說。如果你是根據外觀來挑選技術堆棧的話,那我想說你錯了,你真的需要去重新評估一下你的選擇方式了。
話雖這么說,我認為PHP一點也不難看。有的人覺得不好看很可能是很早之前在HTML使用PHP,HTML是真的難看。問題是:現在沒人這么干了,再有人這么干會被嫌棄的。
我不是說那些所謂的“美麗的語言”是不好的選擇,但是“好看不好看”不應該成為你的評價標準。Java非常不好看,但卻是世界上最受歡迎的語言之一。鼓吹因為PHP難看而不要用PHP真的太傻了。
PHP可能不是最美麗的語言,但是我發現寫得好的話還是很有可讀性的。PHP8也有一些新的工具可以讓你的代碼看起來更“美麗”。
我愛PHP
我真的愛PHP。我愛這種編程語言和它的生態系統。我愛它在過去幾年中的完善,PHP 8不僅僅是同一種語言的另一種迭代。隨著每個主要版本的發布,我們得到了更好和更有用的工具。
我喜歡PHP的易上手,但我也喜歡它的復雜,要成為一名專業的PHP程序員有太多要學的東西了。我喜歡Symfony 和Laravel,我認為開發團隊作為PHP的核心,一直在推動這種語言的進步。
但是我最喜歡部分的還是當一個程序員。不僅僅是寫PHP,我喜歡用任何語言寫。我喜歡我可以告訴電腦可以去做什么以及我教會了我自己如何去這么做。這歸功于PHP。
沒有PHP,我不知道現在的自己會從事什么工作。也許我會成為一個平庸的設計師,然后討厭我的工作和生活(沒有冒犯設計師朋友們的意思,我也有一些才華橫溢的設計師朋友們,他們很熱愛自己的工作)。
但是最終,我用我愛的編程語言從事了熱愛的工作。
本文轉載自微信公眾號「讀芯術」,可以通過以下二維碼關注。轉載本文請聯系讀芯術公眾號。