PHPer 請下來好好過一看過去 PHP、Java、Go都發生過什麼?這對於未來的發展很重要

han008發表於2022-01-13

本期圖文是《PHPer 請停下來好好想一想,你到底想要什麼樣的出路》的續篇,如果你沒有閱讀過它,請先閱讀上一篇,不然可能續不上茬口。在上篇部落格中,我們們已經說過,不同的程式語言有著完全不同的生存土壤和使用人群,甚至於可能決定了你的努力是否正確。在本期部落格中,我們們先談一談語言的發展史,你會明白這一切都是怎麼演化過來的,不光對於理解現在有幫助,對於未來的規劃應該也有些啟發。

PHP從誕生起就是自由職業者的最愛,時至今日依舊是。早期階段Java在後臺系統並沒發力,沒有特別好的框架和支撐體系,那個階段PHP風光無兩,因為生態有較大的優勢,甚至最早期人們玩Wodpress,Drupal 等 CMS 系統,一群沒什麼技術基礎的人做站長也能風生水起,當然現在這樣的人也有不少。那個階段全世界範圍來講,網際網路的基礎設施和使用者使用的網路訪問終端工具也相對較少。彼時手機根本是不怎麼上網的,更別說網路應用了,即便到了3G時代,大部分手機依舊是功能機,除了內建的小應用以外沒有什麼企業開發手機端應用。因為網速龜爬,毫無使用者體驗可言。開發成本也超級高,一般的企業想都不敢想,也基本不會去想。在這個階段,Java 在後端也開始發力了,有了成熟的框架,生態卻不成形。

4G是一個全新的時代,同時也是智慧手機的爆發期,企業發現隨著軟硬體基礎設施的完善,企業可以通過手機端的應用直接觸達終端使用者。不管是網站還是應用所面對的龐大流量是往日所不敢想象的。單機應用越來越少,幾乎所有的軟體都成為了網路應用,手機也從電話簡訊手機變成了純網路服務對接使用者的終端。此時智慧手機端的頭一批上架的應用必須面對龐大的使用者群所帶來的高併發訪問量。由於應用太少,再爛的應用都有龐大的使用者下載和使用。這個時候出現了全新的轉折點,這涉及到了兩門語言的轉折點。一門是PHP,另外一門就是Java。PHP的團隊當時還滿足於彼時的現狀,並未發覺新時代已然悄然到來,並未對PHP的執行效率方面下功夫,物件導向以及模組化等諸多適宜團隊協作和功能複用的機制也並未推出,這讓它無法滿足企業對於後端語言在團隊協作以及執行效率的需求,PHP開始正式進入下滑通道。

Java 則完全是另外一番場景,Java已然擺脫了“磨蹭先生”的標籤(曾經大家都鄙視它,覺得它沒技術含量)。早期安卓應用必須得用Java開發,僅憑這一點,Java應用端開發開發的需求就造就了Java工程師的高需求量,而最初階段除了頭部公司之外,大部分還都是單機應用。在Java開發者內部也開始分流,轉向伺服器後端開發,這個時候是 Struct 框架興盛期,雖然它臃腫、開發的複雜度也高,但是至少服務執行效率、團隊協作、開發效率方面能夠非常均衡得滿足公司們的需求,微軟體系又過於封閉,只想自己賺錢,它的整個後端體系也沒能及時轉變適應企業的實際需求,C++等語言的開發效率又實在太低,這導致 Java 基本成了大中型專案的唯一“明智選擇”。這個時候我們不得不感概一句:“同行的襯托和自己的努力真的太重要了,當機遇到了,你也到了一定程度的時候,趙匡胤式的黃袍加身似乎成了必然的結果”。

大公司代表著技術圈的風向標,這進一步鞏固了Java語言的江湖地位,後來SprinBoot體系的崛起更是讓後端的開發效率如火箭般竄升,Java 圈直接是爆了粗口:“Struct就是個垃圾”,當年花前月下的小甜甜不但沒能變成牛夫人,竟然直接被Java 圈掃地出門。江湖代有人才出,一代新人勝舊人,公司對待技術人員,又何嘗不是。

當然Java由於在C和C++之後推出,它的很多語言特性天生就適合企業團隊協作,它極為均衡,既滿足公司專案對於專案執行效率的需求,其開發效率也足夠,雖然它也有繁瑣的地方,但在團隊協作的企業專案中,它絕對是首選。而且 Java 工程師有明確的學習提升線路圖,不管是個人提升還是企業選人,都有比較清晰參考座標。Java開發者在這種情況下,不管在技術上還是技術發展規劃上,有明確的努力方向,從技術層面講能較好的衡量自己大致到了哪個階段,對自身以及所在公司都能做出良好的定位和評判,以決定自己的下一步如何去走。Java 雖然也有很多讓人詬病的地方,但是它的業內生態確實是無出其右,這個生態不光包含了開發資源的生態,同樣還包含了職場生態。

Java作為梗圈 “宇宙第一開發語言” 對於企業來說太好了,但是對於開發者來說存在一個很大的隱患,那就是可替代性太強了。原因就在於上述的種種優勢,開發者像是流水線上的一個個標準件一樣,而且你必須保持更高的水準才能在最卷的 Java 圈長期生存發展。同時由於人太多,而移動網際網路資本大潮已過,開發者的流向逐步會成為問題。Java也成了最卷的程式語言,對於新人入行提出了更高的要求,對於舊人則更甚。對於Java工程師來說,你的後程想走得好,要麼在這家公司迅速佔據核心位置,要麼早點爭取到大公司工作幾年增加自己的後程籌碼,不然後半程也會很尷尬,你很難抵擋住後來者的強烈衝擊。

技術發展的同時,使用者也變了,除了主流應用之外,使用者面對海量的應用早已沒了曾經的熱情,用來用去每個人基本就是那幾款應用。於是絕大部分專案的流量大幅度下降,後臺所需的併發也不需要那麼高了。

PHP 重新開始恢復元氣源於基於 Composer 體系的 Symfony,Laravel, ThinkPHP 等現代化專業高效開發框架的崛起,PHP 不但可以滿足中小企業的要求,自由職業者使用它們也可以以超高效率構建靈活而強大的專案。學習成本極低,只要你學過別的語言,PHP在語法層面基本不需要學習成本。開發所需的生態資源非常完善,開發效率相比以往更是得到極大提升,專案部署也非常簡單易操作,這些都是 PHP 能夠一直生存下來的核心競爭力。

只是在大中企業中,它的就業職場生態相對狹窄。它的執行效率完全能滿足中小專案的需求,這也是為什麼小公司、自由職業者喜歡用它為客戶做專案,它能最大限度保證交付的時間。PHP 確實不可能擁有往日在企業圈的輝煌,但是在自由職業的圈子裡依舊是犀利無比。對於開發者來說,入行門檻相對比較低,面試的時候沒那麼多變態問題,真的有不少人就是通過 PHP入 的技術行當,後來慢慢由於要在企業裡尋找工作和發展機會,轉而以其他程式語言為主。當我們在招聘網站搜尋 PHP 相關職位時,我們會發現,它的職位數量和待遇跟 Java 比是比不了的,企業的知名度也比不了,這太正常了,通過以上的分析我們們就可以得出這個結論。好處也有,PHP 不那麼卷,找工作,換工作反而容易。

但是還是上一篇部落格我說過的那些話:“PHPer 實在太懶了,不少人的技術水準又太爛,願意下功夫打磨的人不是很多,不管你為公司打工還是自己幹,技術水平都得過關過硬才行,養老型公司基本都是養死型公司”。不得不說的是 PHP 能恢復元氣,但絕不可能恢復往日的地位,這一點沒什麼懸念,尤其在國內。在國外很多國家,PHP 還是挺滋潤的,不同的人口基數決定了不同的發展道路。

PHPer 相比於Javer 大都沒有明確的努力方向,這是個挺致命的問題。你公司的技術老大可能沒有獲得下一份工作的機會了,可你還年輕,你未來職業生涯的變數還很大,即便不為現在,也必須為以後做籌劃。如果真的沒有明確的努力方向,就好好朝著自由職業的方向發展,讓自己的活性激發出來,不要像死魚一樣了。PHP 的學習和使用都超級高效節省時間,這些節省下來的時間你可以比別人更早的成為一名技術上的全棧和業務上的熟手。如果你後面這些工作都沒做,沒有去努力的話,那真的是辜負了這門語言的業務特性。對於 PHPer 來說,只要是正常的努力程度都不會被這個圈子淘汰。只可惜,後邊是耐人尋味的省略號……

“業務特性” 算是我發明的詞彙吧,這也是我想告訴 Coding10 使用者的一句忠告,開發者平時關注最多的是語言的 “技術特性” ,而 “業務特性” 對於開發者和企業的重要程度同等重要。C 和 C++ 語言為什麼選擇的人少?因為光是技術細節,哪怕是記憶體分配和釋放問題很新人兩三年都搞不定,根本就沒足夠的精力去接觸公司的業務問題。這類語言都是系統層級的語言,大部分開發者一段時間內基本都只在自己管轄的功能模組中工作,對於其他協作的模組基本不會深入研究。

應用層的程式語言,不管是前端還是後端,開發者可以在非常短的時間內把這個那個業務鏈條梳理清楚,甚至可以上手進行工作。使用這類語言,哪怕你技術水平不過關也是可以工作的,複製貼上就能幫你解決相當一部分問題,甚至說真正工作的是谷歌度娘背後的那些人,你的薪水更應感謝的是這些無名朋友們。

PHP 和 Java 我們表面上說的是語言,但其實我們在日常使用中,更多的是框架及其生態,SpringBoot 體系對於Java 來說是救世主,Laravel 對於 PHP 來說也是。這像極了相聲圈的情況,不是相聲火了,而是郭德綱火了。開發者更多的時間也是研究框架的用法和發展。可以說在開發語言的基礎之上又封裝一層。而它們自身又依賴特別多第三方的開發包,第三方開發包的質量以及是否能夠長期高質量的持久維護對於框架來說至關重要。一些核心開發者離開這個圈子之後,就會產生很大的影響和破壞。而這也將引出另外一個話題,就是 Go 語言。Go 語言自帶的支撐讓開發者即便不採取框架也能做很多事,這讓它的學習曲線相對簡單,學習的體驗也更好,由於是官方自帶的支援,所以相比於第三方,能得到更持久、更高質量的延續性,當不能滿足需求時,官方也就推出更好的替代方案。

Go 語言,被奉為未來10年最有前途的程式語言。它的團隊也希望它能重現昔日 C 語言的輝煌。這是一門基因裡都在飆車的高併發程式語言,執行效率超高,輕鬆擊敗其他主流後端程式語言。Go語言通常不是大家學習的第一門程式語言,它也並非想象中的簡單易學,而是跟 C,C++ 這些語言比,它更易學。目前不少公司會用Go 重構一部分業務,而非全部。公司用它處理高併發,可以向使用者提供更穩定可靠的連線和通訊服務,同時可以節約不少的伺服器成本,對於大公司來說,這非常有現實意義。Go 目前在大部分業務型公司中起到是輔助作用,距離主流後端業務程式語言還有很長的路要走。它追求簡單直接,但是不代表所有方面都簡單易用,開發者需要付出足夠的時間成本做好足夠的技術積累才能用好它。

不少 PHPer 或其他語言開發者都開始學習 Go,目前階段它的就業面沒有那麼寬廣,它通常會結合其他的後端體系以完成整體業務目標。Go 除了做 Web,更重要的應用就是“構建基礎設施層”,如果你有機會的話,好好關注一下這個方向。網際網路應用行業太動盪了,網際網路的新創公司連兩年的平均存活期都沒有,大部分人還是希望有個安穩些的環境。如果想在基礎設施層求生存的話,你必須付出更大的努力和汗水,一切都是用代價換來的。

至於 Go 團隊如何讓 Go 語言恢復往日 C 的江湖地位,目前我的視野和解決能力所限,沒有看到它的可行性路線。雲原生時代 Java 雖然有不少困難要克服,但我相信它絕不會坐以待斃,應該是能一步步搞定這些問題。Go 在基礎設施層的發力也算是為侵蝕 Web 領域做準備,如今 Go 也開始官方推薦 Gin 框架,這其實是個蠻值得玩味的事情,這代表 Go 開始向 Web 端傾斜和發力。

目前移動網際網路的癲狂期早已過去,正是行業的淘汰和清洗階段中後段。這個階段,技術能力出色,年富力強的開發者基本不會受影響。但是技術薄弱,沒有自己突出優勢的開發者會遇到嚴重的職場危機。

我們通過以上這些話,希望你我都能更慎重理性地思考自己未來的路和當下的每一步。我不會說去評判語言的優劣,每一門語言都養活了不小的群體,程式語言優劣的爭論你也要看清立足點,不同的立足點,不同的人結論是完全不同的,所以陷入到程式語言的爭論是沒有太大意義的。每一門語言都有其產生的特定背景,發展趨勢和衰落過程。我們不光要關心現在它能給企業帶來什麼價值,能夠給個人帶來什麼價值,同樣要關心它的未來價值。我們更沒有必要去探究語言的技術含量,而是探索和提升自己的技術含量。程式語言越靠近應用層,它的使用就越簡單,就越顯得沒有技術含量。

Java 最初也被各種鄙視,在 C 和 C++ 開發者眼中就是個玩具。對於絕大部分所謂技術人員來說,日常做的就是沒有什麼 “技術含量” 工作,目前所面對的問題基本都有成熟而廣被應用的解決方案。不管是程式碼層面還是架構層面,99% 的開發者們做的都是複製貼上或者模仿、改造的工作,所以為什麼各類機構培訓內容基本一致,解決方案也基本雷同的原因。CRUD不光存在於資料處理的邏輯層面,大部分公司的架構不也是 查、增、刪、改 做出來的嗎。
原文地址 mp.weixin.qq.com/s/uEbY01zF4tjf8OS...

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章