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