尤其是近幾年非?;馃岬娜斯ぶ悄?,機器學習等等,還有推上風口的 python。這多少會帶動一些人盲目跟風。其實開發工程師對自己知識體系的擴充和轉型都需要有一個明確的目標。跟風是一件比較危險的事情,轉型也不同于丟掉自己所有的東西。我想通過程序員的誕生和程序員的成長來討論,究竟該如何選擇。
PHP 程序員的現狀;
什么導致了程序員的分層;
高級工程師需要達到的要求;
程序員如何快速成長;
PHP 程序員渴望的蛻變;
干貨,你需要的轉型路線;
總結。
一般來說,如果你很難熬過開發生涯的入門期,可能說明你不適合這個行業;如果你無法通過蛻變期,你可能就不會有太大的成就。
我之前用重慶互聯網學院中某家培訓機構(YMSD)的數據分析過,在這部分培訓進入行業的學生中 2 年后還在這個崗位繼續發展的學生僅僅占有 20%。也就是說 80% 的學生花錢花時間只是做了回陪跑員。這也從側面說明,如果我們進入這個行業,除了期望讓自己能夠掙到很多錢,也必須對以后的發展有個預期。
什么導致了程序員分層
導致這種分層的原因是什么?
其實工作年限也不是一個非常重要的因素,確實在之前的面試中,我們遇到過工作年限只有一年但是非常優秀的開發者。但凡是使用求職軟件時就會發現,幾乎所有的職位描述里都有一個指標——工作經驗年限。
一般 13 年工作經驗是一個層次,在北京一般薪資范圍是 1020k 之間;
35 年又是一個層次,在北京薪資范圍是 1525k;
5 年及以上又是多個層次。
在之前的小節我已經說了程序員大概分為科班出身和半路出家的兩類,我并不是說科班出身的就一定會比半路出家的優秀,這完全是兩回事。只是科班出身表示他的知識面更廣一些,所以其他人也應該注重知識面和基礎功。
追語言的人
記得不要盲目追隨一門語言,因為你掌握任何一門高級語言后,對于語法的入門來說都是非??斓?,而且現在的語言的語義化非常友好,我們學習及接觸都非常容易。其實我們最需要了解的是語言的特性。
這樣思考,當公司遇到其他比當前更為復雜的場景時,你就能知道這種特點的場景應該用什么樣的語言及技術棧來解決。你對開發的認識就上升到了另一個層面。
其實導致程序員分層的主要原因就是學習的習慣。為什么這樣說?因為導致分層的最直接原因是知識面,而知識面的形成需要不斷學習,學習的效率也很關鍵。之前我從很多人口中聽到他們抱怨技術主管的技術水平不如他們。這也是兩個層次程序員不同的表現吧,因為看待問題的角度不同,沒能將解決問題和提供方案兩者的關系搞清楚。
我之前帶過一個程序員,他也是做了一年的開發了。我讓他通過 UserAgent 來判斷用戶是不是在微信中訪問的,結果他問我什么是 UserAgent。大家別覺得可笑,其實不知道的人大有人在,為什么呢?因為他們只注重于自己的 CURD 能力了。我不是說 CURD 不好,只是因為 CURD 就像了解 UserAgent 一樣只是基礎。
之前我在培訓機構機械化時,我讓學生背誦的面試題中還有 mysql 的 InnoDb 和 MyISAM 引擎的區別,每當看到學生回答一個支持事務一個不支持事務,然后看著領導高興到想笑的表情時,我就想笑。
以上只是一個例子,只是說明學習也需要分場景。學習語言也是一樣的,我們要想想為什么不用當前的語言而要再選擇一種新的語言。比如為什么不用 PHP 做機器學習?可能說到這個問題很多人就想笑,‘PHP 是世界上最好的語言’(因為喜愛所以容我自黑一下)。
引用別人經常說的一句話 “幾年前一幫人叫苦連天的說 Java 要死了但是 Java 死了嗎?” 別再看著語言杞人憂天了,你更應該學會的是選擇語言。
所以快速成長需要我們自己有主見地分場景來仔細探究技術細節,需要有極強的學習能力。
當然在這兒要給那些非常缺乏安全感的程序員說一聲。PHP 并不會死。
另外,可能每個程序員都想趕快投入到人工智能和機器學習中。如果你還是想當這個領域的碼農,那你可以看網上的各種文檔教程來學習,像 TensorFlow 這種向外提供的 api 也比較多。如果你想在這個領域發展,還是得首先把那些經典算法搞清楚。
在你考慮轉型之前,PHP 應該已經讓你具有這些知識。
還有一個需要掌握的知識就是 http 請求和響應,其實這個知識是我們一直在用的但是很多人都搞不明白,例如我們經常用瀏覽器的開發者模式在 Network 中點擊某個請求就可以查看請求的 header。
PHP 中有四種標量類型,分別為 boolean、integer、float、string;三種復合類型,分別為 array、object、callable; 兩種特殊類型,分別為:resource、NULL,當然還提供了一些偽類型。
首先來說說向前端的轉型。
其實最主要的還是前端的思維。在掌握了 js 的一些基本類型操作,包括字符串、數組、對象、json 的處理后,就可以去看看 vue.js 或者 react 這樣的框架。推薦大家從 vuejs 開始,比較簡單,容易入門。當然 html 和 css 的基本用法還是需要了解的。在學習的過程中看別人的項目非常重要,可以去 github 搜索 vue.js 的一些項目,看看別人是怎么實現的。
你需要選定一種比較常用的服務端開發語言。java 也好,go 也好,其他選擇也非常多。從入門開始,如果有基礎的程序員一定不要從厚厚的語法基礎開始學習,因為這個過程非常浪費時間。在了解了最基本的語法后就可以開始選定一個框架來學習,在學習中發現問題,再回過頭來學習語法。
很多程序員比較看好的是 go 語言,確實 go 語言相對其他語言來說簡單,工程化中可靠,而且有著天然的開發標準,goroutine 給服務器開發帶來好處。在國內,七牛云很早就使用 go 語言了,現在很多大的公司也開始使用 go 語言解決部分問題。
在深入服務端開發的路上需要了解的知識非常非常多,比如性能優化。很多人提到 redis 就是一句話,當做緩存來使用。這就是我前面提到的業務場景的問題,說明你所理解的業務場景太單一了,導致對于知識的認知不夠。
程序員最需要的,也是每個程序員最缺乏的,就是交流。大家需要和其他程序員多交流、多交換意見,這樣很有利于自己的成長。
PHP 程序員不需要有太大的語言本身的危機感。
快速成長的關鍵是要對自己有一個正確的認識,不盲目跟風。注意根據場景來學習,能夠思考并解決場景中遇到的問題,解決或優化瓶頸問題。這個過程中也是一個很好的學習過程。