職業(yè)是一個(gè)非常特殊的東西,它有兩點(diǎn)很特別,一個(gè)是「不可重來」,另一個(gè)是「驗(yàn)證耗時(shí)」。之前和一個(gè)老友聊天,他感嘆說,回過頭看看,自己的整個(gè)職業(yè)過得亂七八糟。等到現(xiàn)在明白這點(diǎn)的時(shí)候,已經(jīng)來不及了。因?yàn)橐话阋欢温殬I(yè)經(jīng)歷短則一到兩年,長則三到五年。換兩家公司,十年一晃就過去了。如果你在這十年中沒有很好的成長,又不幸身在某些公司,那三十多歲可能就面臨被清退的處境了。
我一般不屑于去和別人分享什么人生經(jīng)驗(yàn),畢竟有些坑不自己跳下去是不會(huì)牢記在心的。但職業(yè)的坑不一樣,等你發(fā)現(xiàn)在坑里時(shí),可能已經(jīng)晚了。所以我花了蠻多時(shí)間來研究這個(gè)。有興趣的同學(xué)可以去讀讀我的《程序員跳槽全攻略》,專門講職業(yè)規(guī)劃的。(
我大學(xué)的語文老師曾告誡我們說,人生就像四季一樣,春天該播種,你去播種,秋天該收獲,你去收獲,這樣是最省力的。你非要倒過來呢,也不是不行,但就是會(huì)很累,會(huì)付出更多的精力和代價(jià)。
校招也類似,它是社會(huì)和企業(yè)為從未步入職場的同學(xué)特意準(zhǔn)備的一個(gè)綠色通道。在這個(gè)通道里,我們將候選人當(dāng)做一張白紙,可以沒有經(jīng)驗(yàn)、沒有行業(yè)常識(shí),只要對(duì)工作充滿熱情、有還算聰明的頭腦,基本都算是合格的。企業(yè)會(huì)為這些同學(xué)準(zhǔn)備培訓(xùn),并留足適應(yīng)期,有的甚至還會(huì)安排一對(duì)一的老員工來帶。
但是,一旦你錯(cuò)過了它,那一切都不一樣了,因?yàn)槟氵M(jìn)入了名為「社招」的紅海。在這里,所有已經(jīng)畢業(yè)的人變成了你的競爭對(duì)手,不但要面對(duì)和你一樣工作年限的人競爭,還要面對(duì)其他工作時(shí)間更長、經(jīng)驗(yàn)更豐富的同行跳槽帶來的競爭。甚至經(jīng)常發(fā)生因?yàn)檎械搅艘粋€(gè)中級(jí)崗位的候選人,取消掉兩個(gè)初級(jí)崗位的情況。
所以校招非常重要,一定不要錯(cuò)過。
既然校招這么重要,那么我們?cè)趺床拍茉谄渲姓紦?jù)優(yōu)勢(shì)呢?記住兩個(gè)詞「擇優(yōu)錄取」和「跑贏同學(xué)」。
在微博上經(jīng)??梢钥吹竭@樣的問題:「我這個(gè)也會(huì)、那個(gè)也合格,憑什么他們就不招我呢?」這是典型的沒有明白招聘本質(zhì)的表現(xiàn)。要明白,求職不是「會(huì)考」而是「高考」,不是什么產(chǎn)品的出廠合格校驗(yàn),而是一場中國這個(gè)資源緊缺型國家里的又一場優(yōu)質(zhì)資源爭奪戰(zhàn)。
那些薪水高、發(fā)展空間好的知名企業(yè)(后文簡稱大廠),每年招聘的人數(shù)是一定的。極端點(diǎn)說,如果現(xiàn)在所有候選人的水平都下調(diào)20%,他們依然要招人的,不然沒法發(fā)展(嚴(yán)格講會(huì)有一些調(diào)整空間,但也扛不了多久)。
所以,尤其是在校招里邊,「絕對(duì)能力」并不重要,「相對(duì)能力」才是最重要的。
我來講一個(gè)很老的童話,聽過的同學(xué)請(qǐng)裝作沒聽過。兩個(gè)人在森林里邊遇到了熊??,kuma 看見他們就嗷嗷的追了過來。一個(gè)同學(xué)轉(zhuǎn)身就跑,另一個(gè)問他說,我們?cè)趺磁芤才懿贿^熊的,那跑有什么用呢?這個(gè)同學(xué)回答說,我只要跑贏你就好了呀。
那其實(shí)校招也是一樣的。它不是說你的能力要有多少,其實(shí)再牛的應(yīng)屆生的水平放到行業(yè)里邊,都是不入流的,因?yàn)楹芏嗨绞强亢A康挠脩魤撼鰜淼?,你沒有遇到過這些場景,怎么可能知道怎么去應(yīng)對(duì)。
所以應(yīng)屆生和那些社招的候選人比,通常都是沒啥勝算的,但幸運(yùn)的是,我們和他們是不同的賽道。要跑贏一個(gè)在大廠核心崗位工作了一兩年的人不容易,但要跑贏那些和你一樣在大學(xué)只學(xué)了一堆理論基礎(chǔ),甚至理論課都沒好好學(xué)天天在寢室吃雞的同學(xué),就容易很多了。
要承認(rèn),即使這樣,要跑贏某些天資聰穎、能力拔群的學(xué)霸還是有難度的。但這場比賽是不公平的,因?yàn)樗鼪]規(guī)定每個(gè)人必須同時(shí)開始跑。魯迅說得好,笨鳥先飛。(魯迅:我沒有說過)如果我們能更早的認(rèn)識(shí)到這點(diǎn),花更多時(shí)間去準(zhǔn)備,那么贏的概率就會(huì)成倍提升。
我本身就是一個(gè)非常好的例子。嚴(yán)格的講,我的能力算是平庸偏上一點(diǎn)點(diǎn)的,雖然在當(dāng)時(shí)無論如何我都不會(huì)承認(rèn)。當(dāng)我在大一下半期認(rèn)識(shí)到這一點(diǎn)時(shí),就開始自學(xué) PHP,大二的時(shí)候?qū)懥艘欢褯]人用的開源項(xiàng)目,大三上半期找了家公司做兼職,已經(jīng)能把學(xué)費(fèi)掙回來了。當(dāng)大三下半期開始找實(shí)習(xí)時(shí),我的簡歷已經(jīng)可以秒殺同校同學(xué),小小PK 一流高校的同學(xué)了。
所以你以為校招比的是能力,其實(shí)對(duì)于執(zhí)行力中等的同學(xué)來講,校招比的其實(shí)是認(rèn)知。越早認(rèn)識(shí)到本質(zhì)的人,就越容易在這場游戲里邊勝出。從這個(gè)角度講,堅(jiān)持讀到這里的你,甚至可能已經(jīng)贏了一半了。所以記得要把這篇文章分享給你的好朋友,然后千萬別讓你不喜歡的同學(xué)知道。
技術(shù)崗位的大體分布如圖:
現(xiàn)在幾乎所有的軟件都已經(jīng)互聯(lián)網(wǎng)化了,就算沒有互聯(lián)網(wǎng)化的,它以后也會(huì)互聯(lián)網(wǎng)化,所以我們就不單純地去說軟件開發(fā)這個(gè)行業(yè)了。
首先就是開發(fā)崗,這個(gè)就包括了前端開發(fā)、后端開發(fā)和移動(dòng)開發(fā)。
前端開發(fā)和后端開發(fā),主要是 B/S 結(jié)構(gòu)里的。B/S 結(jié)構(gòu)就是 Browser-Server 結(jié)構(gòu)。而前端指的就是瀏覽器這個(gè)端;后端指的就是服務(wù)器這個(gè)端。
前端主要做的事情,就是把從服務(wù)器端讀取到的數(shù)據(jù)展現(xiàn)給用戶,然后通過各種 UI 控件和用戶互動(dòng),再將新的數(shù)據(jù)送回服務(wù)器端。具體的技術(shù)包括 HTML、CSS、JavaScript,還可能有一些嵌入瀏覽器運(yùn)行的組件,比如 Flash 、 WebGL 。
后端則主要送數(shù)據(jù)給前端,一般有兩種方式,以前用的比較多的是,將數(shù)據(jù)在服務(wù)器端先渲染完,然后將輸出的結(jié)果發(fā)送給前端;現(xiàn)在用的比較多的方式是將純數(shù)據(jù)通過 Json 或者 xml 等格式發(fā)送給前端,在瀏覽器中通過 JS 來進(jìn)行渲染。
所以以前很多后端的工程師往往也懂一些前端的知識(shí),比如我認(rèn)識(shí)的很多 PHP 程序員,他們不但懂 MySQL 和 Apache,還懂 HTML 、 CSS 、 JS 和 PS。這種前后端都懂的工程師,也叫全棧工程師。
后端可以用各種語言開發(fā),國內(nèi)用的比較多的包括 Java、PHP ,還有相對(duì)小眾一些的 Python 、 Ruby 、 Go。其實(shí) C 也是可以寫后端的,不過現(xiàn)在已經(jīng)很少有公司直接用它寫了。
后來有了 NodeJS ,JavaScript 也能跑到后端了,所以很多前端工程師也有了后端開發(fā)的能力,他們也占了全棧工程師的很大一部分。
相對(duì)于 B/S 結(jié)構(gòu),還有 C/S 結(jié)構(gòu),就是 Client-Server 。C/S 結(jié)構(gòu)下不用瀏覽器來展現(xiàn)數(shù)據(jù)和交互,而是用客戶端,一般是 Mac/Win/Linux 三大平臺(tái)。
手機(jī)大潮起來以后,不管是 B/S 結(jié)構(gòu)還是 C/S 結(jié)構(gòu),全部移動(dòng)化了。B/S 結(jié)構(gòu)對(duì)應(yīng)的就是適配手機(jī)瀏覽器的移動(dòng)網(wǎng)頁、以及嵌入在微信、微博里邊的 H5 頁面; C/S 結(jié)構(gòu)就是 APP ,一般覆蓋 iOS 和 Android 兩個(gè)主流平臺(tái)。
除了這些標(biāo)準(zhǔn)開發(fā)崗,而還有一些新興或者相對(duì)小眾的開發(fā)方向,比如人工智能/算法工程師、做智能硬件的硬件開發(fā)工程師、給企業(yè)做解決方案的企業(yè)軟件工程師。
軟件并不是開發(fā)出來就完了的,在上線或者發(fā)布之前,我們還需要「測(cè)試工程師」來進(jìn)行測(cè)試;而上線以后,還需要「運(yùn)維工程師」來管理和優(yōu)化服務(wù)器集群。現(xiàn)在服務(wù)器都虛擬化和容器化了,運(yùn)維工程師中也出現(xiàn)了懂開發(fā)的分支,叫做 DevOps。
不管是開發(fā)崗還是測(cè)試、運(yùn)維崗,都有其對(duì)應(yīng)的中高級(jí)崗位。開發(fā)一般是技術(shù)經(jīng)理;運(yùn)維一般是架構(gòu)師;測(cè)試一般是測(cè)試總監(jiān)。技術(shù)總監(jiān)、CTO 就是更高一級(jí)的職位了。
以上的職位分類我們參考了招聘網(wǎng)站的分類,不一定準(zhǔn)確,可能會(huì)有很多崗位沒覆蓋到,不少公司也會(huì)有自己獨(dú)特的崗位設(shè)置。
如果能選擇的話,不建議一開始就選運(yùn)維或者測(cè)試。原因有兩個(gè):第一,因?yàn)樗鼈冸m然很重要,但不是軟件開發(fā)的核心崗位。第二,從開發(fā)崗?fù)@兩個(gè)職位轉(zhuǎn)非常容易,反之卻非常難。
之前在給掘金寫《程序員職業(yè)小白書》的時(shí)候,我做過一個(gè)郵件訪談,以問題的形式采訪了多位在不同階段、不同崗位、不同城市的程序員的日常。大家可以讀一讀,了解下。程序員們的日常是怎樣的 (雖然這個(gè)小冊(cè)是收費(fèi)的,但訪談這一章卻是可以免費(fèi)讀的,不需要購買哈)
雖然出于某種政治正確,我們一般都會(huì)說,語言不重要。但語言真的不重要么?并不是這樣的,每種語言都有自己的優(yōu)缺點(diǎn)和適用范圍。
像日語和英語一樣,一個(gè)是看動(dòng)畫玩游戲用的,一個(gè)是看資料寫代碼用的。(誤)下邊簡單介紹下我眼中的各個(gè)語言。
系統(tǒng)語言,用來寫底層操作系統(tǒng)、高性能中間件和嵌入式開發(fā)。
舉例來說,如果你想做人工智能方向的話,Python語言就是非常不錯(cuò)的選擇。因?yàn)樗诟鱾€(gè)大學(xué)和研究機(jī)構(gòu)用的非常多,有成熟好用的數(shù)學(xué)庫,適合于科學(xué)計(jì)算。在深度學(xué)習(xí)等熱門方向上,有大量用 Python 開發(fā)的框架,新出的 Paper 也能很快在 GitHub 上找到 Python 的代碼實(shí)現(xiàn),可以說是不二選擇了。
如果你想做前端,那么目前來看,除了 JavaScript 還真沒有別的選擇,因?yàn)楝F(xiàn)在能在瀏覽器里邊跑起來,也就是它了。過兩年等 wasm 成熟可能會(huì)有其他選擇,但現(xiàn)在,是真沒有。
而相應(yīng)的,如果你學(xué)會(huì)了 JavaScript ,想在這個(gè)基礎(chǔ)上再把后端給做了,那么 Node.JS 就是非常好的選擇。因?yàn)樗褂玫木褪?JavaScript 的解釋器,按 JavaScript 寫就好了。從學(xué)習(xí)成本上來講,它是非常低的,可以通過很低的投入,就進(jìn)入了服務(wù)器端的領(lǐng)域。
如果你要做網(wǎng)站,那么 PHP 就是首選了。一方面是有大量的可用代碼,世界上超過80%的網(wǎng)站都用的 PHP,基本上你能想到的網(wǎng)站功能,都有能找到的實(shí)現(xiàn),懸念只是有沒有免費(fèi)的;另一方面,PHP7 的性能提升了很多,用來寫 API 也非常好。
另外一點(diǎn),就是目前使用 PHP 的團(tuán)隊(duì)非常多,即使在二三線城市也比較容易找到工作,當(dāng)然,組建團(tuán)隊(duì)也同樣相對(duì)容易。
如果你要做大數(shù)據(jù)分析,那么可能就離不開 Java 了。從 Hadoop 開始一系列的 Google Big Table 的開源實(shí)現(xiàn)都是 Java 的,用于海量數(shù)據(jù)搜索的 Elastic Stack 也是 Java 的。
如果你現(xiàn)在要想去做云計(jì)算,那 Go 就是一個(gè)非常好的選擇。
因?yàn)樗褪菫榱舜笠?guī)模計(jì)算設(shè)計(jì)的,并發(fā)管理和性能都非常不錯(cuò)。而且有很多云計(jì)算的軟件,它就是 Go 寫的,如果你要去修改它,調(diào)整里邊的實(shí)現(xiàn)邏輯的話,不會(huì) Go 可能很麻煩。當(dāng)然,理論上講,你也可以通過容器和微服務(wù)的方式來搞定,但肯定比直接改代碼麻煩。
另外區(qū)塊鏈的大熱平臺(tái)以太坊的官方(最具潛力)實(shí)現(xiàn),也是Go做的。錢途大大的。
在語言的選擇上,尤其是第一門語言的選擇上,我一直推薦興趣優(yōu)先的原則。因?yàn)閷?duì)初學(xué)者而言,當(dāng)你遇到困難堅(jiān)持不下去時(shí),興趣會(huì)幫你一把。中學(xué)時(shí)為了改仙劍,我連匯編都試著學(xué)了個(gè)入門 ??
但其實(shí)對(duì)絕大部分應(yīng)屆生而言,對(duì)各種語言并沒有特別的偏好。而且「找到工作」這件事是非常重要的。所以與其盲目的選擇語言學(xué)習(xí)不如來看看各個(gè)語言在招聘市場的表現(xiàn)。
我之前寫過一個(gè)腳本,可以抓取幾個(gè)互聯(lián)網(wǎng)招聘大站的招聘啟事,并按職位對(duì)薪資進(jìn)行統(tǒng)計(jì)。下邊是最近一周的統(tǒng)計(jì)結(jié)果。
先來說說這些數(shù)據(jù)怎么看。
職位熱度類似于招聘職位數(shù),和其他語言對(duì)比就能看出差距。平均薪資之所有有兩個(gè)值,是因?yàn)槲覀円话阏衅笗r(shí)會(huì)給出薪資的上限和下限。嚴(yán)格的講,這并不是當(dāng)前某個(gè)語言的程序員們的薪資,而是他們下一次跳槽時(shí)的可能薪資。另外,部分企業(yè)喜歡在上限值上邊虛高,所以把上限乘80%可能更合理。而下限一般比較真實(shí),更具備對(duì)比價(jià)值。
然后我們來看看能發(fā)現(xiàn)什么。
首先我們會(huì)發(fā)現(xiàn),Java 的職位熱度非常高,幾乎在所有城市里邊都是排名第一的。這里有一個(gè)特殊原因,就是 Android 職位基本也是使用 Java 語言進(jìn)行開發(fā)的,所以這兩個(gè)職位有一些重疊。也就是說,學(xué)好 Java 其實(shí)可以同時(shí)應(yīng)聘 Java工程師 和 Android 工程師(可能需要額外在學(xué)一點(diǎn)點(diǎn)應(yīng)用開發(fā)的知識(shí)),這非常劃算。而從薪資方面看,Java 也是數(shù)一數(shù)二的。
緊隨其后的是前端職位。前端是個(gè)非常有意思的特點(diǎn),那就是——幾乎所有的公司都會(huì)招前端。對(duì)比 Java 而言,可能有很多大廠的后端用的不是 Java ,那他們就不需要招聘 Java 工程師。如果你非常想去這家公司,但你會(huì)的語言是 Java ,那么就可能和機(jī)會(huì)擦肩而過。而前端崗位的話,機(jī)會(huì)就可能大得多。這有點(diǎn)像血型里邊的O型血,怎么地方都能用。就算是自以為站在食物鏈頂端鄙視「古典互聯(lián)網(wǎng)」的區(qū)塊鏈公司也不得不招前端呢,也是一個(gè)非常好的選擇。
除了看熱度,我們也要考慮到競爭,比如 Java 是一個(gè)「傳統(tǒng)」崗,很多軟件行業(yè)的工程師也是會(huì) Java 的。而「前端」是一個(gè)新興的互聯(lián)網(wǎng)崗,專業(yè)前端還不算太多(和 Java 比啦),所以入職難度說不定反而低一些。
其他語言在各個(gè)城市的數(shù)據(jù)各不相同,大家可以挑自己感興趣的看。比如 Go 語言在北京比其他城市熱幾倍;區(qū)塊鏈雖然看起來很火,但其實(shí)職位數(shù)也就比 PHP 的一半多點(diǎn);Ruby 雖然薪資不錯(cuò),但崗位非常少…
總之語言的選擇因人而異因時(shí)而異,請(qǐng)綜合各種視角去選擇一個(gè)適合自己的。
在選擇好職位和語言后,就要尋找對(duì)應(yīng)的學(xué)習(xí)路線圖進(jìn)行學(xué)習(xí)了。這里推薦這個(gè) Star 數(shù)量超過4萬的路線圖(的中文版):GitHub - goodjack/developer-roadmap-chinese: 2018 年成為 Web 開發(fā)人員的路線圖
雖然不是很全,但細(xì)節(jié)不錯(cuò)。
之前我們?cè)诜治?Java 數(shù)據(jù)的時(shí)候,發(fā)現(xiàn)一個(gè)有意思的問題,那就是 Java 的技術(shù)??梢酝瑫r(shí)覆蓋兩個(gè)熱門職位 —— Java 和 Android,這讓我們的求職競爭力一下翻了一倍。那么在其他的語言和崗位上還存不存在類似的情況呢?
其實(shí)是有的,比如前端崗位就是一個(gè)非常有潛力的例子,它的后端解決方案 NodeJS 正在日益流行 。在我寫這篇文章的時(shí)候,互聯(lián)網(wǎng)招聘大站 拉勾網(wǎng) 上北京的 NodeJS 職位數(shù)是 181,上海是 114,深圳是 65 。所以學(xué)完前端知識(shí)再補(bǔ)一下 NodeJS 的收益是不錯(cuò)的。
但這個(gè)技術(shù)棧其實(shí)還可以進(jìn)一步優(yōu)化,因?yàn)橐粋€(gè)偶然的原因,我統(tǒng)計(jì)了一下 PHP 崗位和前端崗位招聘啟事里邊出現(xiàn)的技術(shù)關(guān)鍵詞,發(fā)現(xiàn)其重合度竟然高于60%。具體的技術(shù)關(guān)鍵詞和熱度見這里 《PHP&前端崗(1~3年)核心技術(shù)點(diǎn)分析報(bào)告》
回頭一想其實(shí)也很好理解,畢竟招 PHP 是來做網(wǎng)站的,HTML CSS JS 總得會(huì)一些才行。這意味著PHP的同學(xué)只需要補(bǔ)上部分前端知識(shí),比如主流框架 React / Vue / Angular 和 SPA 開發(fā)就可以同時(shí)應(yīng)聘 PHP 和 前端 職位。
這會(huì)有多大的競爭力呢?前端招聘啟事里邊,有超過十分之一的企業(yè)提及了PHP。這還沒完,React 有一個(gè)混合應(yīng)用解決方案,叫做 React Native,可以直接用 React 棧來開發(fā)手機(jī)APP。這個(gè)技術(shù)的需求如何呢?現(xiàn)在拉勾網(wǎng)上北京的 React Native 相關(guān)職位數(shù)有 84 。
于是呢,我們可以選擇 PHP + React + React Native 的技術(shù)棧,僅僅多學(xué)習(xí)一點(diǎn)知識(shí),可以投遞的崗位就從原來的 364 變成了 364 + 373 + 84 。
這就是技術(shù)棧優(yōu)化的策略。關(guān)于這個(gè)技術(shù)棧的優(yōu)化結(jié)構(gòu),可以看這里 《方糖全棧學(xué)習(xí)路線圖》,這個(gè)棧還順便把區(qū)塊鏈應(yīng)用開發(fā)也覆蓋了。大家可以舉一反三,去優(yōu)化自己選中的技術(shù)棧。
不要最后找工作的時(shí)候再來寫簡歷?,F(xiàn)在就開始寫,即使你什么都不會(huì)。這樣你才會(huì)真切的感受到,自己的缺點(diǎn)和劣勢(shì)。然后通過不斷的學(xué)習(xí),往簡歷上追加新的內(nèi)容,直到你自己看起來覺得有競爭力了,簡歷才算階段性完成了。
關(guān)于簡歷的寫作技巧和工具,我之前寫過一篇文章詳細(xì)說明,可以點(diǎn)這里閱讀 《如何寫出一份專業(yè)的技術(shù)簡歷》 (這篇文章本身依然是免費(fèi)的,不用購買小冊(cè)就能讀)
不知不覺已經(jīng)寫了這么多了,其實(shí)還有一些內(nèi)容想說,但暫時(shí)就不寫到這里了。等以后有空我再整理一個(gè)小冊(cè)子吧。我把文章也同時(shí)發(fā)布到了 GitHub,以后的更新會(huì)通過 GitHub 進(jìn)行,歡迎 watch 和 star 。https://github.com/easychen/career-guide-for-cs-graduate
PS:如果你還不知道怎么用 GitHub,那么趕緊學(xué)學(xué)吧,這可是程序員的必備(交友)工具哦。
聯(lián)系客服