尤其是近幾年非?;馃岬娜斯ぶ悄?,機(jī)器學(xué)習(xí)等等,還有推上風(fēng)口的 python。這多少會(huì)帶動(dòng)一些人盲目跟風(fēng)。其實(shí)開發(fā)工程師對(duì)自己知識(shí)體系的擴(kuò)充和轉(zhuǎn)型都需要有一個(gè)明確的目標(biāo)。跟風(fēng)是一件比較危險(xiǎn)的事情,轉(zhuǎn)型也不同于丟掉自己所有的東西。我想通過程序員的誕生和程序員的成長(zhǎng)來討論,究竟該如何選擇。
一般來說,如果你很難熬過開發(fā)生涯的入門期,可能說明你不適合這個(gè)行業(yè);如果你無法通過蛻變期,你可能就不會(huì)有太大的成就。 我之前用重慶互聯(lián)網(wǎng)學(xué)院中某家培訓(xùn)機(jī)構(gòu)(YMSD)的數(shù)據(jù)分析過,在這部分培訓(xùn)進(jìn)入行業(yè)的學(xué)生中 2 年后還在這個(gè)崗位繼續(xù)發(fā)展的學(xué)生僅僅占有 20%。也就是說 80% 的學(xué)生花錢花時(shí)間只是做了回陪跑員。這也從側(cè)面說明,如果我們進(jìn)入這個(gè)行業(yè),除了期望讓自己能夠掙到很多錢,也必須對(duì)以后的發(fā)展有個(gè)預(yù)期。 什么導(dǎo)致了程序員分層 導(dǎo)致這種分層的原因是什么? 其實(shí)工作年限也不是一個(gè)非常重要的因素,確實(shí)在之前的面試中,我們遇到過工作年限只有一年但是非常優(yōu)秀的開發(fā)者。但凡是使用求職軟件時(shí)就會(huì)發(fā)現(xiàn),幾乎所有的職位描述里都有一個(gè)指標(biāo)——工作經(jīng)驗(yàn)?zāi)晗蕖?/span>
在之前的小節(jié)我已經(jīng)說了程序員大概分為科班出身和半路出家的兩類,我并不是說科班出身的就一定會(huì)比半路出家的優(yōu)秀,這完全是兩回事。只是科班出身表示他的知識(shí)面更廣一些,所以其他人也應(yīng)該注重知識(shí)面和基礎(chǔ)功。 追語言的人 記得不要盲目追隨一門語言,因?yàn)槟阏莆杖魏我婚T高級(jí)語言后,對(duì)于語法的入門來說都是非??斓模椰F(xiàn)在的語言的語義化非常友好,我們學(xué)習(xí)及接觸都非常容易。其實(shí)我們最需要了解的是語言的特性。 這樣思考,當(dāng)公司遇到其他比當(dāng)前更為復(fù)雜的場(chǎng)景時(shí),你就能知道這種特點(diǎn)的場(chǎng)景應(yīng)該用什么樣的語言及技術(shù)棧來解決。你對(duì)開發(fā)的認(rèn)識(shí)就上升到了另一個(gè)層面。 有種人就是重復(fù)的做同樣的事情覺得很有成就感的,這樣雖然沒有大錯(cuò),但是會(huì)導(dǎo)致我們停滯不前。其實(shí)導(dǎo)致程序員分層的主要原因就是學(xué)習(xí)的習(xí)慣。為什么這樣說?因?yàn)閷?dǎo)致分層的最直接原因是知識(shí)面,而知識(shí)面的形成需要不斷學(xué)習(xí),學(xué)習(xí)的效率也很關(guān)鍵。之前我從很多人口中聽到他們抱怨技術(shù)主管的技術(shù)水平不如他們。這也是兩個(gè)層次程序員不同的表現(xiàn)吧,因?yàn)榭创龁栴}的角度不同,沒能將解決問題和提供方案兩者的關(guān)系搞清楚。 我們主要是探討,拋磚引玉。我之前帶過一個(gè)程序員,他也是做了一年的開發(fā)了。我讓他通過 UserAgent 來判斷用戶是不是在微信中訪問的,結(jié)果他問我什么是 UserAgent。大家別覺得可笑,其實(shí)不知道的人大有人在,為什么呢?因?yàn)樗麄冎蛔⒅赜谧约旱?CURD 能力了。我不是說 CURD 不好,只是因?yàn)?CURD 就像了解 UserAgent 一樣只是基礎(chǔ)。 之前我在培訓(xùn)機(jī)構(gòu)機(jī)械化時(shí),我讓學(xué)生背誦的面試題中還有 mysql 的 InnoDb 和 MyISAM 引擎的區(qū)別,每當(dāng)看到學(xué)生回答一個(gè)支持事務(wù)一個(gè)不支持事務(wù),然后看著領(lǐng)導(dǎo)高興到想笑的表情時(shí),我就想笑。 以上只是一個(gè)例子,只是說明學(xué)習(xí)也需要分場(chǎng)景。學(xué)習(xí)語言也是一樣的,我們要想想為什么不用當(dāng)前的語言而要再選擇一種新的語言。比如為什么不用 PHP 做機(jī)器學(xué)習(xí)?可能說到這個(gè)問題很多人就想笑,‘PHP 是世界上最好的語言’(因?yàn)橄矏鬯匀菸易院谝幌拢?/span> 引用別人經(jīng)常說的一句話 “幾年前一幫人叫苦連天的說 Java 要死了但是 Java 死了嗎?” 別再看著語言杞人憂天了,你更應(yīng)該學(xué)會(huì)的是選擇語言。 所以快速成長(zhǎng)需要我們自己有主見地分場(chǎng)景來仔細(xì)探究技術(shù)細(xì)節(jié),需要有極強(qiáng)的學(xué)習(xí)能力。 我同事的觀點(diǎn)是這樣的:PHP 程序員轉(zhuǎn)型發(fā)展有兩個(gè)方向,一個(gè)是更深層次的后端開發(fā),可以熟悉 Go 或者 Java 語言然后找家這些語言相關(guān)的公司。例如在做 PHP 開發(fā)時(shí)很少有人去了解異步,協(xié)程,多線程等問題。另一個(gè)是轉(zhuǎn)向前端,前端也是一個(gè)競(jìng)爭(zhēng)非常大的區(qū)域,而且前端需要學(xué)習(xí)的東西并不比后端少。當(dāng)然在這兒要給那些非常缺乏安全感的程序員說一聲。PHP 并不會(huì)死。 另外,可能每個(gè)程序員都想趕快投入到人工智能和機(jī)器學(xué)習(xí)中。如果你還是想當(dāng)這個(gè)領(lǐng)域的碼農(nóng),那你可以看網(wǎng)上的各種文檔教程來學(xué)習(xí),像 TensorFlow 這種向外提供的 api 也比較多。如果你想在這個(gè)領(lǐng)域發(fā)展,還是得首先把那些經(jīng)典算法搞清楚。 根據(jù)程序員開發(fā)工作所處的產(chǎn)品層面,程序員分為兩類,分別是前端工程師和后端工程師。現(xiàn)在對(duì)開發(fā)工程師的分類更繁多了。我就從前端和后端這兩類中給大家分享。在你考慮轉(zhuǎn)型之前,PHP 應(yīng)該已經(jīng)讓你具有這些知識(shí)。 還有一個(gè)需要掌握的知識(shí)就是 http 請(qǐng)求和響應(yīng),其實(shí)這個(gè)知識(shí)是我們一直在用的但是很多人都搞不明白,例如我們經(jīng)常用瀏覽器的開發(fā)者模式在 Network 中點(diǎn)擊某個(gè)請(qǐng)求就可以查看請(qǐng)求的 header。 PHP 中有四種標(biāo)量類型,分別為 boolean、integer、float、string;三種復(fù)合類型,分別為 array、object、callable; 兩種特殊類型,分別為:resource、NULL,當(dāng)然還提供了一些偽類型。 首先來說說向前端的轉(zhuǎn)型。 其實(shí)最主要的還是前端的思維。在掌握了 js 的一些基本類型操作,包括字符串、數(shù)組、對(duì)象、json 的處理后,就可以去看看 vue.js 或者 react 這樣的框架。推薦大家從 vuejs 開始,比較簡(jiǎn)單,容易入門。當(dāng)然 html 和 css 的基本用法還是需要了解的。在學(xué)習(xí)的過程中看別人的項(xiàng)目非常重要,可以去 github 搜索 vue.js 的一些項(xiàng)目,看看別人是怎么實(shí)現(xiàn)的。 你需要選定一種比較常用的服務(wù)端開發(fā)語言。java 也好,go 也好,其他選擇也非常多。從入門開始,如果有基礎(chǔ)的程序員一定不要從厚厚的語法基礎(chǔ)開始學(xué)習(xí),因?yàn)檫@個(gè)過程非常浪費(fèi)時(shí)間。在了解了最基本的語法后就可以開始選定一個(gè)框架來學(xué)習(xí),在學(xué)習(xí)中發(fā)現(xiàn)問題,再回過頭來學(xué)習(xí)語法。 很多程序員比較看好的是 go 語言,確實(shí) go 語言相對(duì)其他語言來說簡(jiǎn)單,工程化中可靠,而且有著天然的開發(fā)標(biāo)準(zhǔn),goroutine 給服務(wù)器開發(fā)帶來好處。在國(guó)內(nèi),七牛云很早就使用 go 語言了,現(xiàn)在很多大的公司也開始使用 go 語言解決部分問題。 在深入服務(wù)端開發(fā)的路上需要了解的知識(shí)非常非常多,比如性能優(yōu)化。很多人提到 redis 就是一句話,當(dāng)做緩存來使用。這就是我前面提到的業(yè)務(wù)場(chǎng)景的問題,說明你所理解的業(yè)務(wù)場(chǎng)景太單一了,導(dǎo)致對(duì)于知識(shí)的認(rèn)知不夠。 程序員最需要的,也是每個(gè)程序員最缺乏的,就是交流。大家需要和其他程序員多交流、多交換意見,這樣很有利于自己的成長(zhǎng)。 互聯(lián)網(wǎng)行業(yè)不是一個(gè)進(jìn)入就可以高枕無憂的行業(yè),你需要不斷地學(xué)習(xí),提升自己。PHP 程序員不需要有太大的語言本身的危機(jī)感。 快速成長(zhǎng)的關(guān)鍵是要對(duì)自己有一個(gè)正確的認(rèn)識(shí),不盲目跟風(fēng)。注意根據(jù)場(chǎng)景來學(xué)習(xí),能夠思考并解決場(chǎng)景中遇到的問題,解決或優(yōu)化瓶頸問題。這個(gè)過程中也是一個(gè)很好的學(xué)習(xí)過程。 |
|