1.確定方向
1.1選擇比努力更重要
關于方向的選擇其實越早確定越好,生活中我們要面臨無數(shù)個選擇,前幾天看的一個黑客相關的美劇中有句臺詞說的不錯:
lifeisbinary,生活就是二進制,一個個0101組成的。每一次抉擇,選了就是1,不選就是0。另外也有一句話說:“人一生要面臨很多選擇,但是真正能決定你命運的只有幾個”。沒錯其實就是這樣。
如果你是計算機專業(yè)的學生,那么到底是考研還是就業(yè)就是首先要面臨的問題。本文是面向確定了畢業(yè)要工作的大學生的,所以關于這個抉擇,不再贅述。
就業(yè)的話,本文標題是碼農,實際是指所有計算機相關的技術工種。包括開發(fā)、測試、運維等。
很多選擇本身并沒有對錯或優(yōu)劣,只有適合不適合。
不要濫用勤能補拙,這個詞語一度被很多人奉為圭臬,但同時成了枷鎖。我相信這個詞,但是要考慮現(xiàn)狀,要考慮投資回報率。你在自己并不擅長或不感興趣的領域深耕了四年,最后不一定能獲得多少成績。當然如果你能在畢業(yè)后繼續(xù)深耕幾年或許是可以的,但是我希望每一位大學生在畢業(yè)的時候都能有一份好的工作,并且如果你并不喜歡某一領域的話,那么我相信你一定不會堅持下去。所以我們一定要找到適合自己的方向!
那么如何發(fā)現(xiàn)自己對什么感興趣呢?我也不知道很好的辦法,我只知道一個樸素的方法——嘗試。趁著年輕,就要多嘗試。千萬不要大三了都還不知道自己興趣在哪,想做什么,適合什么。所以大一大二努力去碰釘子吧。
1.2算法還是開發(fā)
數(shù)據(jù)結構和算法很重要,無論是面試還是工作,無論你從事哪方面的技術。不過算法雖然重要,但并不適合每個人都花費大學全部的精力去鉆研。
相信很多學校都有ACM競賽相關的社團或組織。很不幸,我們學校沒有,我大一的時候也花了很多精力刷題,但是硬件條件不太允許,氛圍太缺乏。如果你覺得自己能夠在ACM比賽中游刃有余,那么恭喜你,你可以一心一意搞算法。如果你覺得自己在這個過程中十分吃力,挫敗感頻生,那么也不要氣餒,或許有另一條路是屬于你的。選擇開發(fā),有算法功底深厚是很棒的事,但是僅僅只有算法同樣是不夠的,計算機海洋還有很多未知等著你探索。
算法崗包括數(shù)據(jù)挖掘、機器學習之類的(怎么樣,高大上吧,反正我不懂)。要說明的是想做算法的同學最好選擇讀研繼續(xù)深造,因為大企業(yè)在算法崗的招聘上對本科生是很不友好的。還是要申明一句,你做開發(fā)也不能忽視算法和數(shù)據(jù)結構,起碼面試還是經(jīng)??嫉?!記住一句:
算法功底好的人,運氣都不會差。
對于本科生而言做開發(fā)還是相對容易的一條道路,不過開發(fā)的技術路線也是不勝枚舉:前端、后臺(PHP后臺、Java后臺等等)、移動端(安卓和iOS)、游戲開發(fā)、數(shù)據(jù)庫(比如做DBA)……。這里我肯定不會去推薦你去學哪一種,我沒有能力也不適合。只有你自己才能發(fā)現(xiàn)自己的興趣以及好奇心之所在。
我能做的只是在浩如煙海的技術觀點中,幫一個個本科生排疑解惑。
1.3認識技術
關于技術,很多本科生都存在諸多誤區(qū)。初學者總喜歡追隨牛逼的技術,實在過于盲目,找準自己的定位最重要。
誤區(qū)1:圖形化的東西比非圖形化東西更牛逼
多見于初學者,尤其是計算機專業(yè)新生(我大一的時候就是)。當時學校教了點C語言,一直都是控制臺程序,面對黑窗口,我就各種百度看看怎么弄出圖形化的東西,那時候才知道GUI這個縮寫是啥意思(當初知道這個縮寫的全稱還小激動了一下下,果然我還是太年輕了),然后知道了WIN32、MFC這些名詞。。確實只能說是知道名詞。當時對著視頻教程做了計算器,就是用VC++拖拖控件,視頻里的人敲一句代碼,我就敲一句。后面雖然弄出來了,但是感覺自己什么都不懂,只是依樣畫葫蘆。這時我才意識到,還有很多基礎沒有打勞。
八卦一下,現(xiàn)在桌面客戶端的開發(fā)工作并不多,所以大家謹慎選擇這一技術方向。桌面端GUI技術一度火爆(MFC、Qt、WinForm、WPF、Swing……),但如今早已是互聯(lián)網(wǎng)及移動互聯(lián)網(wǎng)時代。所以大家真的要慎重選擇。不過還是可以學習一下的,至少能加深你對編程語言以及設計模式的理解。
誤區(qū)2:非圖形化的東西比圖形化的東西更牛逼
具體而言就比如說:后臺技術比前端技術、客戶端(Android、IOS)更牛逼。多見于有Linux背景的人(沒錯,說的就是我=_=|||)。
我也一度這樣認為,其實不然。這里和上一個誤區(qū)一起澄清一下:技術本身沒有高低優(yōu)劣之分,但程序員對其有好惡之別。
另外要說明一下,不能說前端就簡單,后臺就更難,同樣反過來說也不對。我只能說這完全是不同層面的東西,不能量化的去比較。前后端都自有其難點以及G點。你不能說你能處理后端復雜的并發(fā)、同步、高可用,那么你就能輕松地完成美觀的網(wǎng)頁及特效、處理麻煩的瀏覽器兼容、極盡所能地降低頁面的加載速度。就好比同樣是一雙按在鍵盤上的手,那么鋼琴家演奏優(yōu)美的樂曲和程序員開發(fā)高性能的軟件,哪個更困難?(比喻不一定貼切,但希望大家能明白這個意思)
誤區(qū)3:XXX是最美的語言/框架/平臺/……
多見于PHP程序員。哈哈,開個玩笑。這里不是在談論誰是最好的語言,而是告訴大學生朋友們不要迷信論斷。
我大一的時候去圖書館看書,看到有JavaWeb的書,前言寫的很清楚,痛陳了PHP和ASP.NET的缺點,闡述Java是多么優(yōu)秀,OK。你可能也和我一樣,在入門的時候經(jīng)歷過類似的事。我要告訴你的事,多翻幾本書,你會看到ASP.NET和PHP書籍的前言寫的同樣精彩,你絕不會在ASP.NET的書里看到夸耀Java的句子。不同的技術自有其優(yōu)劣,千萬不要成為前言驅動的學習者。。
繼續(xù)八卦一下,雖然說不通技術自有其優(yōu)劣,但是就目前國內形勢來看,學習Java絕對是不錯的投資,Java后臺幾乎占據(jù)了中國互聯(lián)網(wǎng)企業(yè)后臺的半壁江山。而.NET技術確實日薄西山。不過PHP現(xiàn)在依然有很頑強的生命力。
另外還有一些經(jīng)典論斷:
LAMP架構只適合中小企業(yè);
MySQL只能用于中小企業(yè),大企業(yè)都用Oracle。等等。
這些論斷從技術角度出發(fā),確實無可非議,但卻并不客觀。見過一些朋友,對MySQL充滿鄙夷,覺得MySQL很容易出現(xiàn)瓶頸之類的。其實我想說,阿里、騰訊都大量使用了MySQL。別問我為啥MySQL被這么大體量的公司采用(無外乎開源的好處和歷史原因啦),我覺得,只要技術夠屌,什么瓶頸都能克服。。

2.學習那點事
2.1關于逃課
相信每一個大學生都逃過課,我也不例外,而且很多。我在談逃課,其實也是從某個側面來談自學。之前有個網(wǎng)友和我咨詢如何面試,如何準備之類的,他已經(jīng)大三了。學校的課程完成的不錯。但我感覺他還欠缺很多。要想找到好工作只靠老師教你那些東西是不夠的,跟著學校的進度走,其實只會讓你落后。我并非一味的鼓勵大學生逃課,我的觀點是要選擇性的逃課(如果是好課那么即使不開課也要去蹭課的)。哪些課要逃呢?
無聊的課程。比如思修、毛概、馬原統(tǒng)統(tǒng)要逃。別急著反駁我,就是逃課而已,不要形而上。我不是黨員,也沒有申請過。數(shù)學相關的課程,我只想說量力而行,數(shù)學確實對于程序員來說還算重要,但是不同崗位對數(shù)學的要求又不盡相同,你能應付就好好聽,不能應付就。。
與你的技術方向無關。這個就要看你是不是計算機專業(yè)了,如果你是其他專業(yè)學生,但是對計算機感興趣,相信很多課都是可以逃的了?;蛘弑热缒愕募夹g棧是建立在Linux基礎上的,但是學校有一門MFC編程的課,你有興趣又有時間可以聽聽,沒時間就逃,OK的。這個也是有個前提的,就是你能清楚的明白哪些課程是對你有幫助的。你說:“我學C++的,我把數(shù)據(jù)庫的課逃了”。=_=||別說你讀了我的文字。。
你已經(jīng)掌握了的。相信會自學的孩子,都有這種情況,那就是在學校開課前,你就自學過了某門課程。那么等到開課以后你就可以逃了,我就是這樣逃了Linux編程的課。當然你要清楚的了解自己到底掌握了多少,不要自己是一知半解,還自以為懂了,就不聽課了。其實要逃這種課,你也不需要懂得太多,你只需要保證你比老師講課的水平高就行了。我們有的老師,水平真心爛,不逃課對不起他。
但是很多學生總是走極端,說到自學就一點課都不上了,看不起學校的課程安排。自己在寢室學個把月就能輕輕松松地做出網(wǎng)站或者APP。但是我想告訴你,你能做到的,別人同樣能做到。有一句話說的很好:
你的工資不是和你的工作時間成正比,而是和你的不可替代性成正比。
你和培訓機構幾個月量產(chǎn)出來的程序員差別在哪?僅僅是你沒有給培訓機構交學費嗎?但你的技能和他們是差不多的啊。所以說學校教的基礎課是很重要的,最直接的好處就是筆試,筆試考的就是基礎。然后這對你長期的職業(yè)發(fā)展也是很有幫助的。你工作幾年之后(可能就是一兩年),發(fā)展肯定會遇到瓶頸。
2.2關于讀書
多讀書,讀好書
這是一句老掉牙的話了,但是事實就是如此,閱讀經(jīng)典書籍,你的投資回報率其實遠高于閱讀低質量的書籍。那么什么是低質量的書籍呢?比如《21天精通XXX》之類的。但是不管讀什么書,都不能盲目跟風、囫圇吞棗。在網(wǎng)上,生活中經(jīng)??吹礁鞣N索要書單的網(wǎng)友,借鑒別人的書單是可以得,但是直接照搬照抄則是不明智的。因為每個人已有的知識儲備是不一樣的,別人閱讀的書籍不一定適合你。所以閱讀合適的書籍也是一種重要的命題。
閱讀合適的書籍
那什么是不合適的書籍呢?我認為有如下幾類:
與自己的技術棧毫不相干的。這相關與否是建立在你已經(jīng)做了清晰的職業(yè)規(guī)劃的基礎上,并且通過搜集信息能夠自己辨識哪些是和自己的技術棧相關的,哪些是不相關的。當然,我并不是鼓吹大家技能點越單一越好,技術人員當然需要不停擴充知識面,但是對于大學生而言,這要建立在你在主要的技術棧上的積累已經(jīng)足夠多的時候(足以應付面試),不然東一榔頭,西一棒槌,最后只能樣樣稀松。
超出自己能力范圍的。雖然我前面說要讀好書,要讀經(jīng)典書籍,但是一定要量力而行。很多經(jīng)典書籍的閱讀需要一定的基礎,如果你只看到了別人對這本書推崇備至就開始強行閱讀,最后通常也不多是走馬觀花,像讀小說一樣讀完了而已,最后什么都沒學到,還浪費了時間。老子說“企者不立,跨者不行”就是這么個道理。
知識點與自身已具備知識過度重合的。面對一本經(jīng)典書籍,可能你已經(jīng)具備了那本書中所闡述的絕大部分知識,那么還有沒有必要讀呢?我的建議是:可以查漏補缺,但不要通讀。很多經(jīng)典書籍,單拿出一本來說都是值得閱讀的,但是放到一起就不一定了。因為兩本書籍可能70%甚至80%的內容類似,這時你讀完一本,再通讀另一本就沒有必要了,比如我讀了《C++Primer》就沒再去讀《C++PrimerPlus》了。當然你可以閱讀不重合的部分,這需要你有較強的辨識能力。
《C++PrimerPlus》雖然從名字上看起來像是《C++Primer》的加強版,但其實并不是。它們是不同的作者,并且從風評來看《C++PrimerPlus》貌似比《C++Primer》還要基礎一些。。
善待圖書館
請大家一定一定要善待圖書館。說實話我大學幾年對我們學校并沒過多好感,但是唯一讓我不舍的就是圖書館。相比電子書,我更喜歡那種手指翻閱紙張時那種真實的觸感。大學臨近尾聲,這幾個月瘋狂的去圖書館借書讀書。上個月竟然發(fā)現(xiàn)圖書館新購入了好幾本好書,可惜的是我實在是沒時間讀了。哎,突然發(fā)現(xiàn)自己一直以來都是不太會讀書的人,從大一到大四都借過不少書,但真正能讀完的并沒有幾本。當然了,前面我也提到了,有些書是不適合通讀的。但仍舊有很多需要通讀的書籍被我丟棄,直到最近幾個月才認認真真地讀了基本完整的。
“書非借不能讀”
很樸素的一個真理,借的書因為是時間限制,所以會逼迫你閱讀。而如果是你自己買的書,你潛意識就會覺得“啥時候讀都一樣”。當然這是對自制力不強的同學們說的。
2.3打造自己的技術棧
技術棧,或者叫技術體系、知識體系。首技術棧起于編程語言卻又不止于編程語言。你可以多嘗試,然后找到自己喜愛的技術方向開發(fā)深挖。然而很多學生通常會在起步的時候就陷入迷茫。在網(wǎng)上看到過一個人,想學web開發(fā),各種調研,然后向別人征求意見該學哪門語言比較好,哪個框架更有優(yōu)勢。后面大概過了半年,他還在糾結該選哪一個。。
我只想說:先跑起來。語言很重要但并沒有那么重要。無論語言還是框架這些都是工具,在這些工具的使用過程中提煉出的思想、方法、認知才是你的能力。有了能力,即使你換了語言,換了框架照樣能快速上手。我覺得大公司一般不會計較你對某一框架的API熟悉不熟悉,他更看重的是你對框架背后的設計哲學和原理是否了解。
技術棧就像一棵大樹,樹根可能是操作系統(tǒng)、網(wǎng)絡、算法、數(shù)據(jù)庫。再靠上一點是編程語言。接著樹干就是你的職業(yè)方向,可以是安卓、IOS、前端、后臺等等。別忘了還有樹枝和樹葉。技術沒有孤島。把自己封閉在閉塞的圈子內十分危險。你應該是具備了深度的同時再擁有廣度,請注意擁有深度是前提。
沒有什么東西絕對該學或者絕對不該學的,切忌盲從,照搬照抄別人的學習經(jīng)歷,強迫自己看別人的書單。誰說你是后臺的就不能看前端的東西?在你后臺技術成熟之后是可以的,這樣也能加深你對整體架構的理解。
另外這些樹枝和樹葉上懸掛著的也可能NoSQL、Git或者Docker等,你不需要在每個方面都是專家,但你應該對新技術抱有好奇心。
2.4深度思考和提煉
不管是前端還是后臺,框架都是層出不窮的。每個都學,誰都會疲于學習。但實際上你并沒有必要這么做,對于一個框架,記憶它的API永遠是最低的技能,你要從中提煉出一些共性的知識點。比如后臺框架,你學了之后你要記住的應該是URL路由、模板、權限控制、MVC的設計等等。那么你換一個框架,即使有不同,你也能快速上手,思維上只是換一套API,接著補一下個別差異,新特征而以。對于編程語言的學習也是如此。
C++的STL里面有各種算法,很多時候參數(shù)的參數(shù)都包含一個函數(shù)對象(實際為重載運算符()),這就是函數(shù)式編程啊。學了JavaScript,你會感覺到很多時候其實也都是在進行函數(shù)式編程,并且比C++更甚,尤其是jQuery這個庫的用法。提煉出不同語言之中的相似處及不同點,不僅能幫助你學習新語言,并且能幫助你鞏固舊語言,加深你對舊語言的理解。
另外呢。計算機學科的很多課程其實并不是完全孤立的(雖然可能看起來如此)。你比如說操作系統(tǒng)課,講鏈接和裝載,這肯定和C語言編譯的可執(zhí)行文件有莫大關聯(lián)啦。講內存管理,分段是啥?你不知道C語言里面數(shù)據(jù)段、代碼段、等等嗎?內存的分配策略和分配算法,其實C語言里面malloc就在使用這些策略啊。大家一定要學會在不同課程之間建立聯(lián)系,這是一件很有趣事。
3.求職準備
3.1早做規(guī)劃
關于求職,一定要早做規(guī)劃,最起碼在大三開始就應該定下求職的規(guī)劃。舉個例子:
我意識到自己直接參加大四的秋招可能有很多不足,但是如果我找一個大三的暑期實習應該相對秋招要來的容易,并且實習留用的概率也比直接秋招通過的概率高。退一步講,即便我實習不能留用,我已經(jīng)有了實習經(jīng)歷,勇氣真的很重要,那么我再去參加其他公司的秋招勝算也會大很多。
自己的短板一定要早點發(fā)現(xiàn),然后及時找到彌補方案。比如你項目經(jīng)驗匱乏,那么你就應該在其他地方找到填補,例如:把基礎打牢(從上層應用到底層原理),深入了解數(shù)據(jù)結構和算法,閱讀開源項目源碼等等。
俗話說“知己知彼,百戰(zhàn)不殆”,你應該找個時間(不需要太早)去看一看你所關注的公司往年的筆試題以及面試題。網(wǎng)上有很多筆經(jīng)面經(jīng)可供參考。
其他的規(guī)劃還有很多,比如你大概什么時候開始就應該頻繁關注各大公司的招聘信息,什么時候開始海投。如果你準備去外地面試,那么提前給自己準備好足夠的錢,不僅是車票,面試過程可能會持續(xù)幾天,需要住宿之類的。
3.2關于刷題
這是個見仁見智的問題,如果你基礎足夠好,那么大可以不要花太多時間在刷題上,但是我也建議你讀一讀《編程之美》、《劍指Offer》、《程序員面試寶典》、《程序員面試金典》之類的書來熟悉一下題型。
吐槽一下,我當時看的《程序員面試寶典》是第4版,不知道為啥出到第4版了,錯誤還很多。前半部分還好,值得一讀,后面就不敢恭維了。大家讀書一定要警惕。
如果你基礎不太好,那么刷題就尤為重要了,雖然有點取巧,但也不失為一個辦法。
這里提一下C++,即使你投的崗位不是C++(是Java或其他),那么筆試的時候遇到C++的概率也是很高的。這是因為考察C++更有區(qū)分度,更加便于篩選,所以希望大家盡量突擊一下C++。當然,不同公司的選拔風格不一樣,所以還是多參考一下他們往年的筆試題吧。(前端的話應該考不到C++,這點我不了解)
3.3鼓起勇氣
之前我們學校本科生進BAT的很少,可能要隔一年才有一個。但是其實并不是我們學校學生真的這么差,雖然我們學校不怎么樣,但不代表我們學生的素質就是如此。原因很簡單就是缺乏勇氣。我曾和一些學長學姐共事過一段時間,他們對于BAT以及其他的互聯(lián)網(wǎng)大廠,都是想都不敢想。我也曾經(jīng)羞于說出自己的夢想“進入BAT”。
所有互聯(lián)網(wǎng)大廠都是不會來我們學校所在城市(南昌)招聘的,我們要想面試這些企業(yè)都要去省外城市(比如武漢)。異地面試也是給很多人心中造成了無形的壓力,覺得跑這么遠,要是面試失敗咋辦,覺得不僅丟了錢還會丟面子。其實很幼稚,每個人都應該盡自己所能找到最好的工作,沒必要想這么多,你丟掉的錢,遲早會得到更豐厚的回報。你丟掉的面子,遲早也會獲得欣羨的目光,最差的情況你也能告訴自己“努力過了,爭取過了,失敗了也不后悔”。
想我當初可是在武漢面試蘑菇街一面就掛掉了,然后三天之后又收到了騰訊武漢面試的短信。你說我去不去?
“蘑菇街你都掛了,你還要面騰訊?”
我去,我一定要去。
還有一點就是不要害怕自己學校差(普通一本甚至二本),不要嫌棄自己學歷低(本科)。首先研究生們在算法崗方面確實你本科生有優(yōu)勢,但是在開發(fā)崗上并沒什么差別。然后大公司招聘雖然喜歡招聘名校的畢業(yè)生,這只是因為僅僅通過半個小時或一個小時的面試,面試官真的很難了解到你的全貌。而如果你是名校的學生,那么無形之中就在證明自己的能力,首先你能考上這個學校就說明了你的學習能力,然后這個學校師資力量,辦學條件十分優(yōu)厚,確實能助力學生的成長。如果你學校一般,那么面試官可能覺得你學習能力有欠缺,或者覺得這樣一個學校并沒有好的條件去培養(yǎng)你。
但是這絕對不是全部。你是普通學校的學生,并不代表你沒有足夠的學習能力,沒有掌握足夠的職業(yè)技能。你需要做的僅僅是努力向面試官展示出你的學習能力,你所掌握的技能就好了。我有一個老鄉(xiāng),二本學校,但是去年收割了BAT的offer,其中霸面百度拿了specialoffer。他大學期間就做了很多事,做了很多項目,還開辦工作室等等。這些大學經(jīng)歷以及項目經(jīng)驗寫到簡歷上,和面試官一聊,那么面試官真的不會在乎你是什么學校什么學歷的(網(wǎng)易除外)。
同學們,鼓起勇氣,干巴爹。