PHP程式設計師危機

張博悅發表於2017-12-28

感謝有這樣的機會,能和大家一起來聊聊開發者的那些事兒。

其實程式設計師危機是一個真實存在的問題。也有人說是網際網路行業的下滑或者網際網路行業已過了風口等等。我在這兒主要談的是 PHP 程式設計師的危機,而這種危機多半來自於豐富的語言種類和公司對語言的選擇上。

尤其是近幾年非常火熱的人工智慧,機器學習等等,還有推上風口的 python。這多少會帶動一些人盲目跟風。其實開發工程師對自己知識體系的擴充和轉型都需要有一個明確的目標。跟風是一件比較危險的事情,轉型也不同於丟掉自己所有的東西。我想通過程式設計師的誕生和程式設計師的成長來討論,究竟該如何選擇。

我將從以下幾個方面來說明:

  • PHP 程式設計師的現狀;

  • 什麼導致了程式設計師的分層;

  • 高階工程師需要達到的要求;

  • 程式設計師如何快速成長;

  • PHP 程式設計師渴望的蛻變;

  • 乾貨,你需要的轉型路線;

  • 總結。

PHP 程式設計師的現狀

現階段大部分 PHP 程式設計師都比較迷茫,初級 PHPer 覺得這個行業難,中級 PHPer 大都想通過學習來提升自己,但往往會陷入今天追這個技術明天追那個技術的一種情況,高階 PHPer 大都有了自己的知識體系,部分在架構的位置。

程式設計師對自己的行業認識是非常重要的,也就是職業生涯規劃。這是一個比較難的問題,因為要對自己的職業有所規劃,首先要充分了解行業。這一點和當初為什麼選擇做程式設計師有很大的關係。

一般來說,如果你很難熬過開發生涯的入門期,可能說明你不適合這個行業;如果你無法通過蛻變期,你可能就不會有太大的成就。

每個人開發生涯的入門各有不同,一部分人是對於這個行業感興趣自己心中也有一個目標,雖然沒有清晰的職業規劃,但至少會有一個該領域的偶像。還有一部分人是經過三、四個月的培訓進入這個行業的。

我之前用重慶網際網路學院中某家培訓機構(YMSD)的資料分析過,在這部分培訓進入行業的學生中 2 年後還在這個崗位繼續發展的學生僅僅佔有 20%。也就是說 80% 的學生花錢花時間只是做了回陪跑員。這也從側面說明,如果我們進入這個行業,除了期望讓自己能夠掙到很多錢,也必須對以後的發展有個預期。

一般來說,通過培訓入行的開發人員在工作中會走得非常艱難,因為他們沒有技術路線的體系目標,而線上下培訓機構中接受的是一味地模仿,非常缺乏創新能力。而且據我所知,大部分線下培訓機構的課程體系至少和企業場景脫節 5 年。所以這部分程式設計師更應該努力改變自己的現狀,明確自己的處境。

什麼導致了程式設計師分層

程式設計師分層是一個非常明顯的問題,在公司裡直接的體現就是同一類程式設計師的職位差別非常大或者薪資待遇非常大。

導致這種分層的原因是什麼?

第一類原因就是程式開發者的工作年限。

其實工作年限也不是一個非常重要的因素,確實在之前的面試中,我們遇到過工作年限只有一年但是非常優秀的開發者。但凡是使用求職軟體時就會發現,幾乎所有的職位描述裡都有一個指標——工作經驗年限。

為什麼有這個東西呢?因為公司招聘人員與眾多求職者逐一溝通是非常耗時間、精力的,所以工作年限就是第一道門檻。

  • 一般 1-3 年工作經驗是一個層次,在北京一般薪資範圍是 10-20k 之間;

  • 3-5 年又是一個層次,在北京薪資範圍是 15-25k;

  • 5 年及以上又是多個層次。

當然,1-3 年的工作經驗也可能獲得 3-5 年工作經驗一樣的薪資待遇,這個主要看實力,我們的 Chat 也主要是討論這一部分的因素。

在之前的小節我已經說了程式設計師大概分為科班出身和半路出家的兩類,我並不是說科班出身的就一定會比半路出家的優秀,這完全是兩回事。只是科班出身表示他的知識面更廣一些,所以其他人也應該注重知識面和基礎功。

在這次 Chat 中我並沒有把問題指向到某一個語言,因為作為開發工程師太注重語言往往會成為自己的絆腳石。

追語言的人

經常遇見這樣的問題:和開發的朋友一起聊天,上回見面說在學習前端技術,一個月後見面又說在學習 python,說還是 python 好用。再過一個月見面又說在研究 go 語言,說 go 語言以後一定是潮流。這一類人我把他們稱之為 ‘追語言的人’。

記得不要盲目追隨一門語言,因為你掌握任何一門高階語言後,對於語法的入門來說都是非常快的,而且現在的語言的語義化非常友好,我們學習及接觸都非常容易。其實我們最需要了解的是語言的特性。

比如說很多人想學習機器學習都去學習 python 等,那我們需要思考的是為什麼會選擇 python 語言,還有 R 語言、java、javascript、c、c++、scala 等。它有什麼優勢?

這樣思考,當公司遇到其他比當前更為複雜的場景時,你就能知道這種特點的場景應該用什麼樣的語言及技術棧來解決。你對開發的認識就上升到了另一個層面。

自娛自樂的人

有種人就是重複的做同樣的事情覺得很有成就感的,這樣雖然沒有大錯,但是會導致我們停滯不前。

經常能聽見有人這麼說:我們公司事情少,做完就沒事幹了,很無聊。其實這就說明他放棄了自己成為更優秀的程式設計師的機會,學習是進步的階梯。就算當前你們公司沒有用這個技術,你也應該利用空閒時間去學習。

其實導致程式設計師分層的主要原因就是學習的習慣。為什麼這樣說?因為導致分層的最直接原因是知識面,而知識面的形成需要不斷學習,學習的效率也很關鍵。之前我從很多人口中聽到他們抱怨技術主管的技術水平不如他們。這也是兩個層次程式設計師不同的表現吧,因為看待問題的角度不同,沒能將解決問題和提供方案兩者的關係搞清楚。

程式設計師如何快速成長

我們主要是探討,拋磚引玉。

首先我們要看到的字眼是成長

我之前帶過一個程式設計師,他也是做了一年的開發了。我讓他通過 User-Agent 來判斷使用者是不是在微信中訪問的,結果他問我什麼是 User-Agent。大家別覺得可笑,其實不知道的人大有人在,為什麼呢?因為他們只注重於自己的 CURD 能力了。我不是說 CURD 不好,只是因為 CURD 就像瞭解 User-Agent 一樣只是基礎。

對於開發人員來說了解計算機網路方面的知識非常重要,計算機相關專業畢業的都學習過計算機網路這門課程。非計算機專業也沒有關係,最基本的 http 請求報文和相應報文的結構都應該瞭解一些,這些都是基礎。

之前我在培訓機構機械化時,我讓學生背誦的面試題中還有 mysql 的 InnoDb 和 MyISAM 引擎的區別,每當看到學生回答一個支援事務一個不支援事務,然後看著領導高興到想笑的表情時,我就想笑。

支援事務是一個區別,那我不需要支援事務,我使用 InnoDb 的引擎又有什麼問題呢?所以我覺得脫離場景談知識點往往是程式設計師被歸為底端序列的最直接原因。

以上只是一個例子,只是說明學習也需要分場景。學習語言也是一樣的,我們要想想為什麼不用當前的語言而要再選擇一種新的語言。比如為什麼不用 PHP 做機器學習?可能說到這個問題很多人就想笑,‘PHP 是世界上最好的語言’(因為喜愛所以容我自黑一下)。

但是我們再來嚴肅的思考這個問題,請你思考一下。很多學習機器學習的人也是被潮流推著走,別人都學習 python 來做及其學習那我也要學習 python。當然人生苦短,你學習 python 的選擇是沒有錯的。在追著 python 跑中不乏有一些 c、c++、java 程式設計師。

引用別人經常說的一句話 “幾年前一幫人叫苦連天的說 java 要死了但是 java 死了嗎?” 別再看著語言杞人憂天了,你更應該學會的是選擇語言。

當然招聘網站上,企業所需的程式設計師需掌握的語言種類,也是一部分程式設計師學習的方向。企業在選擇一個語言的時候考慮的因素非常多,包括了之前專案所使用的語言情況、遷移的成本、人員培訓成本、語言所耗費的硬體成本、人員溝通成本,最主要的是能否解決當前遇到問題的,以及解決問題需要耗費的時間。

所以快速成長需要我們自己有主見地分場景來仔細探究技術細節,需要有極強的學習能力。

PHP 程式設計師渴望的蛻變

我同事的觀點是這樣的:PHP 程式設計師轉型發展有兩個方向,一個是更深層次的後端開發,可以熟悉 go 或者 java 語言然後找家這些語言相關的公司。例如在做 PHP 開發時很少有人去了解非同步,協程,多執行緒等問題。另一個是轉向前端,前端也是一個競爭非常大的區域,而且前端需要學習的東西並不比後端少。

可能有些人說我要做全棧工程師,我和同事一致的觀點是,別做一個樣樣都會,但樣樣都理解不深刻的全棧工程師。

當然在這兒要給那些非常缺乏安全感的程式設計師說一聲。PHP 並不會死。

當前新浪、神馬搜尋、百度等公司都有使用 PHP 的場景而且設定了 PHP 的職位時,小公司就更不必說了。在中小型、短平快的業務中,PHP 依舊是首選。因為 PHP 剛開始的特性就是快速的開發網路應用。你要追逐其他的語言也不是不可,但是基礎一定要別忘了慢慢打牢靠。別讓自己的知識體系成為一個虛胖的胖子。

另外,可能每個程式設計師都想趕快投入到人工智慧和機器學習中。如果你還是想當這個領域的碼農,那你可以看網上的各種文件教程來學習,像 TensorFlow 這種向外提供的 api 也比較多。如果你想在這個領域發展,還是得首先把那些經典演算法搞清楚。

乾貨,你需要的轉型路線

根據程式設計師開發工作所處的產品層面,程式設計師分為兩類,分別是前端工程師和後端工程師。現在對開發工程師的分類更繁多了。我就從前端和後端這兩類中給大家分享。

其實 PHP 處於一個奇特的位置也是一件好事。有人說 PHP 是前端語言,有人說 PHP 是後端語言。這個界限也不是那麼明顯,解決表現層工作的語言我們一般說是前端語言,主要看用 PHP 來處理什麼層面的問題。

在你考慮轉型之前,PHP 應該已經讓你具有這些知識。

首先是 MVC 模式的理解,這個不難,但是要懂得從這一出發點去擴充套件。例如 MVVM、MVP 模式等等,要能夠明白它們之間的區別,但是理論往往是比較單一的東西,記得要結合專案區理解。

還有一個需要掌握的知識就是 http 請求和響應,其實這個知識是我們一直在用的但是很多人都搞不明白,例如我們經常用瀏覽器的開發者模式在 Network 中點選某個請求就可以檢視請求的 header。

如下圖:

?wx_fmt=png

然後就是物件導向的思想,對物件導向,大家褒貶不一,尤其是越來越多的人對於函數語言程式設計的推崇。其實兩者各有優點,我們需要的是真正的理解物件導向所帶來的優勢和不足。希望 PHP 能讓你理解各種型別的變數以及使用方法。

PHP 中有四種標量型別,分別為 boolean、integer、float、string;三種複合型別,分別為 array、object、callable; 兩種特殊型別,分別為:resource、NULL,當然還提供了一些偽型別。

如果你掌握了以上的內容,那你在轉型的道路上可能更為輕鬆一些。

首先來說說向前端的轉型。

如果要向前端轉型,js 是必須要學習的。但是學習到什麼程度呢?js 要學到什麼程度也是大家最迷茫的一個問題。很多人可能會不斷地啃 js 的語法。但是對於 js 這種知識點非常繁雜的東西,如果一直陷在語法中就得不償失了。

其實最主要的還是前端的思維。在掌握了 js 的一些基本型別操作,包括字串、陣列、物件、json 的處理後,就可以去看看 vue.js 或者 react 這樣的框架。推薦大家從 vuejs 開始,比較簡單,容易入門。當然 html 和 css 的基本用法還是需要了解的。在學習的過程中看別人的專案非常重要,可以去 github 搜尋 vue.js 的一些專案,看看別人是怎麼實現的。

另一種轉型方向是轉向服務端開發。

你需要選定一種比較常用的服務端開發語言。java 也好,go 也好,其他選擇也非常多。從入門開始,如果有基礎的程式設計師一定不要從厚厚的語法基礎開始學習,因為這個過程非常浪費時間。在瞭解了最基本的語法後就可以開始選定一個框架來學習,在學習中發現問題,再回過頭來學習語法。

在這兒選擇非常多,我不具體說明了,只給大家一個建議。

很多程式設計師比較看好的是 go 語言,確實 go 語言相對其他語言來說簡單,工程化中可靠,而且有著天然的開發標準,goroutine 給伺服器開發帶來好處。在國內,七牛雲很早就使用 go 語言了,現在很多大的公司也開始使用 go 語言解決部分問題。

由於人工智慧和 python 的優勢,很多人是走 python 路線的,但是如果走 python 路線,就請做好向資料探勘、處理和計算的方向走。語言的選擇見仁見智,最簡單的依據就是看公司的需求程度。

在深入服務端開發的路上需要了解的知識非常非常多,比如效能優化。很多人提到 redis 就是一句話,當做快取來使用。這就是我前面提到的業務場景的問題,說明你所理解的業務場景太單一了,導致對於知識的認知不夠。

當然還有通訊機制的問題,相信很多人都非常陌生這些技術 MQ、Cron、RMI、RPC。我列舉這些不是讓大家馬上買幾本書去學習。記住,在你想要去學習某個技術之前,一定要先創造一個場景。

程式設計師最需要的,也是每個程式設計師最缺乏的,就是交流。大家需要和其他程式設計師多交流、多交換意見,這樣很有利於自己的成長。

原文文章由博悅平臺釋出 www.hongshulin001.com 原創釋出轉載請註明出處


相關文章