天天看點

寫給勵志成為程式員的大學生

先 簡單介紹一下我自己,我是一所普通大學的大學生,大學錄取時的專業是電子系的,大一的時候意識到自己喜歡敲代碼後,就送出了轉專業申請。大二起開始在計算 機系學習。大三時(2015年4月)拿到了騰訊暑期實習的offer,實習過程中獲得留用offer,大四沒跑秋招,幾乎就在學校浪蕩了一年。

我不是大牛,不是來傳播雞湯或成功學的,隻是最近有感于學弟學妹們在學習以及規劃方面嚴重不足,覺得這是一個共性問題,加上我好為人師的性格,遂捉起紙筆,寫點東西。

1. 确定方向

1.1 選擇比努力更重要

關于方向的選擇其實越早确定越好,生活中我們要面臨無數個選擇,前幾天看了一個美劇《Mr. Robot》,其中有句台詞說的不錯:

life is binary

生活就是二進制,一個個0101組成的。每一次抉擇,選了就是1,不選就是0。大家可能也聽過另外一句話:

“人一生要面臨很多選擇,但是真正能決定你命運的隻有幾個”。

沒錯其實就是這樣。如果你是計算機專業的學生,那麼到底是考研還是就業就是首先要面臨的選擇。本文是面向想就業的大學生的,是以關于這個抉擇,不再贅述。

就業的話,本文标題是碼農,實際是指所有計算機相關的技術工種。

很多選擇本身并沒有對錯或優劣,隻有适合不适合。

不要濫用勤能補拙,這個詞語一度被很多人奉為圭臯,但同時也成了枷鎖。我相信這個詞語,但是要考慮現狀,要考慮投資回報率。 你在自己并不擅長或不感興趣的領域深耕了四年,最後不一定能獲得多少成績。當然如果你能在畢業後繼續深耕幾年或許是可以的,但是我希望每一位大學生在畢業 的時候都能有一份好的工作,并且如果你并不喜歡某一領域的話,那麼我相信你也不會長久堅持下去。是以我們一定要找到适合自己的方向!

那麼如何發現自己對什麼感興趣呢?我也不知道很好的辦法,我隻知道一個樸素的方法——嘗試。趁着年輕,就要多嘗試。千萬不要大三了都還不知道自己興趣在哪,想做什麼,适合什麼。是以大一大二努力去碰釘子吧。

1.2 算法還是開發

資料結構和算法很重要,無論是面試還是工作,無論你從事哪方面的技術。不過算法雖然重要,但并不适合每個人都花費大學全部的精力去鑽研。

相 信很多學校都有ACM競賽相關的社團或組織。很不幸,我們學校沒有,我大一的時候也花了很多精力刷題,但是硬體條件不太允許,氛圍太缺乏,遂放棄。如果你 覺得自己能夠在ACM比賽中遊刃有餘,那麼恭喜你,你可以一心一意搞算法。如果你覺得自己在這個過程中十分吃力,挫敗感頻生,那麼也不要氣餒,或許有另一 條路是屬于你的。選擇開發,有深厚算法功底是很棒的事,但是僅僅隻有算法同樣是不夠的,計算機海洋還有很多未知等着你探索。

算法崗包括資料挖掘、機器學習之類的(怎麼樣,高大上吧,反正我不懂)。要說明的是想做算法的同學最好選擇讀研繼續深造,因為大企業在算法崗的招聘上對大學生是很不友好的。還是要聲明一句,你做開發也不能忽視算法和資料結構,起碼面試還是經常考的!記住一句:

算法功底好的人,運氣都不會差。

對 于大學生而言做開發還是相對容易的一條道路,不過開發的技術路線也是不勝枚舉:前端、背景(PHP背景、Java背景等等)、移動端(安卓和IOS)、遊 戲開發、資料庫(比如做DBA)……。這裡我肯定不會去推薦你去學哪一種,我沒有能力也不适合。隻有你自己才能發現自己的興趣以及好奇心之所在。

我能做的隻是在浩如煙海的技術觀點中,幫一個個大學生排疑解惑。

1.3 認識技術

關于技術,很多大學生都存在諸多誤區。初學者總喜歡追随牛逼的技術,實在過于盲目,找準自己的定位最重要。

誤區1: 圖形化的東西比非圖形化東西更牛逼

多 見于初學者,尤其是計算機專業新生(我大一的時候就是)。當時學校教了點C語言,一直都是控制台程式,面對黑視窗,我就各種百度看看怎麼弄出圖形化的東 西,那時候才知道GUI這個縮寫是啥意思(當初知道這個縮寫的全稱還小激動了一下下,果然我還是太年輕了),然後知道了WIN32、MFC這些名詞。确實 隻能說是知道名詞。當時對着視訊教程做了電腦,就是用VC++拖拖控件,視訊裡的人敲一句代碼,我就敲一句。後面雖然弄出來了,但是感覺自己什麼都不 懂,隻是依樣畫葫蘆。這時我才意識到,還有很多基礎沒有打勞。

八 卦一下,現在桌面用戶端的開發工作并不多,是以大家謹慎選擇這一技術方向。桌面端GUI技術一度火爆(MFC、Qt、WinForm、WPF、 Swing……),但如今早已是網際網路及移動網際網路時代。是以大家真的要慎重選擇。不過還是可以學習一下的,至少能加深你對程式設計語言以及設計模式的了解。

誤區2:非圖形化的東西比圖形化的東西更牛逼

具體而言就比如說:背景技術比前端技術、用戶端(Android、IOS)更牛逼。多見于有Linux背景的人(沒錯,說的就是我=_=|||)。

我也一度這樣認為,其實不然。這裡和上一個誤區一起澄清一下:技術本身沒有高低優劣之分,隻是程式員對其有好惡之别。

另外要說明一下,不能說前端就簡單,背景就更難,同樣反過來說也不對。我隻能說這完全是不同層面的東西,不能量化的去比較。

前後端都自有其痛點、難點以及G點。

不能說你能處理後端複雜的并發、同步、高可用,那麼你就能輕松地完成美觀的網頁及特效、處理麻煩的浏覽器相容、極盡所能地降低頁面的加載速度。舉個不恰當的比喻:同樣是一雙按在鍵盤上的手,那麼鋼琴家演奏優美的樂曲和程式員開發高性能的軟體,哪個更困難?

誤區3:XXX是最美的語言/架構/平台/……

多見于PHP程式員。哈哈,開個玩笑。這裡不是在談論誰是最好的語言,而是告訴大學生朋友們不要迷信論斷。不要盲目跟風,追新,找到适合自己的最重要。

我 大一的時候去圖書館看書,看到有Java Web的書,前言寫的很清楚,痛陳了PHP和ASP.NET的缺點,闡述Java是多麼優秀,OK。你可能也和我一樣,在入門的時候經曆過類似的事。我要 告訴你的是,多翻幾本書,你會看到ASP.NET和PHP書籍的前言寫的同樣精彩,你絕不會在ASP.NET的書裡看到誇耀Java的句子。不同的技術自 有其優劣,千萬不要成為前言驅動的學習者。

繼續八卦一下,雖然說不同技術自有其優劣,但是就目前國内形勢來看,學習Java絕對是不錯的投資,Java背景幾乎占據了中國網際網路企業背景的半壁江山。而.NET技術确實日薄西山。不過PHP現在依然有很頑強的生命力。(其實我是C++狗)

另外還有一些經典論斷:

LAMP架構隻适合中小企業;

MySQL隻能用于中小企業,大企業都用Oracle。等等。

這 些論斷從技術角度出發,确實無可非議,但卻并不客觀。見過一些朋友,隻看的上Oracle,對MySQL充滿鄙夷,覺得MySQL很容易出現瓶頸之類的。 其實我想說,阿裡、騰訊都大量使用了MySQL。别問我為啥MySQL被這麼大體量的公司采用(無外乎開源的好處和曆史原因啦),我覺得,隻要技術夠屌, 什麼瓶頸都能克服。。

  1. 學習那點事

    2.1 關于逃課

    相信每一個大學生都逃過課,我也不例外,而且很多。我在談逃課,其實也是從某個側面來談自學。 之前有個網友和我咨詢如何面試,如何準備之類的,他已經大三了。學校的課程完成的不錯。但我感覺他還欠缺很多。要想找到好工作隻靠老師教你那些東西是不夠 的,跟着學校的進度走,其實隻會讓你落後。我并非一味的鼓勵大學生逃課,我的觀點是要選擇性的逃課(如果是好課那麼即使不開課也要去蹭課的)。哪些課要逃 呢?

    1.無聊的課程。比如思修、毛概、馬原統統要逃。别急着反駁我,就是逃課而已,不要形而上。我不是黨員,也沒有申請過。數學相關的課程,我隻想說量力而行,數學确實對于程式員來說還算重要,但是不同崗位對數學的要求又不盡相同,你能應付就好好聽,不能應付就。。

    2.與你的技術方向無關。 這個就要看你是不是計算機專業了,如果你是其他專業學生,但是對計算機感興趣,相信很多課都是可以逃的了。或者比如你的技術棧是建立在Linux基礎上 的,但是學校有一門MFC程式設計的課,你有興趣又有時間可以聽聽,沒時間就逃,OK的。這個也是有個前提的,就是你能清楚的明白哪些課程是對你有幫助的。你 說:“我學C++的,我把資料庫的課逃了”。=_=||别說你讀了我的文字。。

    3.你已經掌握了的。相 信會自學的孩子,都有這種情況:在學校開課前,你就自學過了某門課程。那麼等到開課以後你就可以逃了,我就是這樣逃了Linux程式設計的課。當然你要清楚的 了解自己到底掌握了多少,不要一知半解,還自以為懂了,就不聽課了。其實要逃這種課,你也不需要懂得太多,你隻需要保證你比老師講課的水準高就行了。我們 有的老師,水準真心爛,不逃課對不起他。

    但是很多學生總是走極端,說到自學就一點課都不上了,看不起學校的課程安排。自己在寝室學個把月就能輕輕松松地做出網站或者APP。但是我想告訴你,你能做到的,别人同樣能做到。有一句話說的很好:

    你的工資不是和你的工作時間成正比,而是和你的不可替代性成正比。

    你和教育訓練機構幾個月量産出來的程式員差别在哪?僅僅是你沒有給教育訓練機構交學費嗎?但你的技能和他們是差不多的啊。是以說學校教的基礎課是很重要的,最直接的好處就是筆試,筆試考的就是基礎。然後這對你長期的職業發展也是很有幫助的。你工作幾年之後(可能就是一兩年),發展肯定會遇到瓶頸。

    2.2 關于讀書

    多讀書,讀好書

    這 是一句老掉牙的話了,但是事實就是如此,閱讀經典書籍,你的投資回報率其實遠高于閱讀低品質的書籍。那麼什麼是低品質的書籍呢?比如《21天精通XXX》 之類的。但是不管讀什麼書,都不能盲目跟風、囫囵吞棗。在網上,生活中經常看到各種索要書單的網友,借鑒别人的書單是可以得,但是直接照搬照抄則是不明智 的。因為每個人已有的知識儲備是不一樣的,别人閱讀的書籍不一定适合你。是以閱讀合适的書籍也是一種重要的命題。

    閱讀合适的書籍

    那什麼是不合适的書籍呢?我認為有如下幾類:

    1.與自己的技術棧毫不相幹的。 這相關與否是建立在你已經做了清晰的職業規劃的基礎上,并且通過搜集資訊能夠自己辨識哪些是和自己的技術棧相關的,哪些是不相關的。當然,我并不是鼓吹大 家技能點越單一越好,技術人員當然需要不停擴充知識面,但是對于大學生而言,這要建立在你在主要的技術棧上的積累已經足夠多的時候(足以應付面試),不然 東一榔頭,西一棒槌,最後隻能樣樣稀松。

    2.超出自己能力範圍的。雖然我前面說要讀好書,要讀經典書籍,但是一定要量力而行。很多經典書籍的閱讀需要一定的基礎,如果你隻看到了别人對這本書推崇備至就開始強行閱讀,最後通常也不多是走馬觀花,像讀小說一樣讀完了而已,最後什麼都沒學到,還浪費了時間。老子說“企者不立,跨者不行”,其實不隻是讀書,學習技術本身也同樣如此。

    3.知識點與自身已具備知識過度重合的。面對一本經典書籍,可能你已經具備了那本書中所闡述的絕大部分知識,那麼還有沒有必要讀呢?我的建議是:可以查漏補缺,但不要通讀。 很多經典書籍,單拿出一本來說都是值得閱讀的,但是放到一起就不一定了。因為兩本書籍可能70%甚至80%的内容類似,這時你讀完一本,再通讀另一本就沒 有必要了,比如我讀了《C++ Primer》就沒再去讀《C++ Primer Plus》了。當然你可以閱讀不重合的部分,這需要你有較強的辨識能力。

    《C++ Primer Plus》雖然從名字上看起來像是《C++ Primer》的加強版,但其實并不是。它們是不同的作者,并且從風評來看《C++ Primer Plus》貌似比《C++ Primer》還要基礎一些。。

    4.

    善待圖書館

    請 大家一定一定要善待圖書館。講真大學幾年我對我們學校并無過多好感,但是唯一讓我不舍的就是圖書館。相比電子書,我更喜歡那種手指翻閱紙張時那種真實的觸 感。大學臨近尾聲,這幾個月瘋狂的去圖書館借書讀書。上個月竟然發現圖書館新購入了好幾本好書,可惜的是我實在是沒時間讀了。

    書非借不能讀

    很樸素的一個真理,借的書因為有時間限制,是以會逼迫你閱讀。而如果是自己買的書,你潛意識就會覺得“啥時候讀都一樣”。當然這是對自制力不強的同學們說的。

    2.3 打造自己的技術棧

    技 術棧,或者叫技術體系、知識體系,起于程式設計語言而又不止于程式設計語言。你可以多嘗試,然後找到自己喜愛的技術方向開發深挖、發散。然而很多學生通常會在起步 的時候就陷入迷茫。在網上看到過一個人,想學web開發,各種調研,然後向别人征求意見該學哪門語言比較好,哪個架構更有優勢。後面大概過了半年,他還在 糾結該選哪一個。

    我 隻想說:先跑起來。語言很重要但并沒有那麼重要。無論語言還是架構本質上都是工具,在這些工具的使用過程中提煉出的思想、方法、認知才是你要追求的能力。 有了能力,即使你換了語言,換了架構照樣能快速上手。我覺得大公司一般不會計較你對某一架構的API熟悉不熟悉,他更看重的是你對架構背後的設計哲學和原 理是否了解。

    技術棧就像一棵大樹,樹根可能是作業系統、網絡、算法、資料庫。再靠上一點是程式設計語言。接着樹幹就是你的職業方向,可以是安卓、IOS、前端、背景等等。别忘了還有樹枝和樹葉。技術沒有孤島。把自己封閉在閉塞的圈子内十分危險。你應該是具備了深度的同時再擁有廣度,請注意擁有深度是前提。

    沒有什麼東西絕對該學或者絕對不該學的,切忌盲從,照搬照抄别人的學習經曆,強迫自己跟着别人的步子走。誰說你是背景的就不能看前端的東西?在你背景技術成熟之後是可以的,這樣也能加深你對整體架構的了解。

    另外這些樹枝和樹葉上懸挂着的也可能NoSQL、Git或者Docker等,你不需要在每個方面都是專家,但你應該對新技術抱有好奇心。

    參次多态才是幸福的本源

    2.4 深度思考和提煉

    不 管是前端還是背景,架構都是層出不窮的。每個都學,誰都會疲于學習。但實際上你并沒有必要這麼做,對于一個架構,記憶它的API永遠是最低的技能,你要從 中提煉出一些共性的知識點。比如背景架構,你學了之後你要記住的應該是URL路由、模闆、權限控制、MVC的設計等等。那麼你換一個架構,即使有不同,你 也能快速上手,思維上隻是換一套API,接着補一下個别差異,新特征而以。

    對 于程式設計語言的學習也是如此。C++的STL裡面有各種算法,很多時候參數的參數都包含一個函數對象(實際為重載運算符()),這就是函數式程式設計啊。學了 javascript,你會感覺到很多時候其實也都是在進行函數式程式設計,并且比C++更甚,尤其是jQuery這個庫的用法。提煉出不同語言之中的相似處 及不同點,不僅能幫助你學習新語言,并且能幫助你鞏固舊語言,加深你對舊語言的了解。

    另 外呢,計算機專業的很多課程其實也不是完全孤立的(雖然看起來可能如此)。比如說作業系統這門課:講連結和裝載,這肯定和C語言編譯的可執行檔案有莫大關 聯啦。講記憶體管理,分段是啥?你不知道C語言裡面資料段、代碼段、XX段嗎?記憶體的配置設定政策和配置設定算法,其實C語言裡面malloc就在使用這些政策啊。 大家一定要學會在不同課程之間建立聯系,這是一件很有趣的事。

    2.5 解決問題的能力

    看似簡單的能力,實際上很多學生都缺乏。解決問題的能力包羅萬象。從初學者角度來說,你學習C語言程式設計,那麼你一定要盡快學會調試的技巧,比如加斷點,追蹤棧資訊之類的,其實并不難。但是不知道為什麼很多人不會調試,我之前就給幾個學妹調試過程式,煩死。。

    自己調試解決不了的問題,或者讀書過程中産生的疑惑,其實絕大部分都是可以通過搜尋引擎或者閱讀更多的書籍來解決的。同樣有很多人,一有一問題就問别人,我也遇到過,很多時候我也沒能力直接回答他的,我需要去搜尋,找到答案,再告訴他。我就想說你不會用搜尋引擎的嗎?最後浪費的是兩個人的時間。

    你想問别人的問題基本上網上都有人提問過了,你要做的就是耐心檢索。其實使用搜尋引擎也是有技巧的。比如:

    搜尋的内容盡量精煉。不要既啰嗦又沒有重點

    不停的修正你的問題。一次搜尋結果通常不會解決問題,你需要的就是利用每一次搜尋結果提供的資訊來不停的修正你的問題,使之逐漸精确到問題的核心

    某度解決不了的,用谷歌

    别做伸手黨,很多問題都是可以自己解決的,解決的方式有很多,不一一列舉了。接着如果仍然不能解決問題,這時你就可以去各大問答類網站提問了。請注意,過于基礎的問題,是沒人願意理你的。是以請確定你在提問之前已經做足了前面的工作。

  2. 求職準備

    3.1 早做規劃

    關于求職,一定要早做規劃,最起碼在大三開始就應該定下求職的規劃。舉個例子:

    我意識到自己直接參加大四的秋招可能有很多不足,但是如果我找一個大三的暑期實習相比秋招應該要來的容易,并且實習留用的機率也比直接秋招通過的機率高。退一步講,即便我實習不能留用,但我已經有了實習經曆,那麼我再去參加其他公司的秋招勝算也會大很多。

    自己的短闆一定要早點發現,然後及時找到彌補方案。比如你項目經驗匮乏,那麼你就應該在其他地方找到填補,例如:把基礎打牢(從上層應用到底層原理),深入了解資料結構和算法,閱讀開源項目源碼等等。

    俗話說“知己知彼,百戰不殆”,你應該找個時間(不需要太早)去看一看你所關注的公司往年的筆試題以及面試題。網上有很多筆經面經可供參考。

    其他的規劃還有很多,比如你大概什麼時候開始就應該頻繁關注各大公司的招聘資訊,什麼時候開始海投。如果你準備去外地面試,那麼提前給自己準備好足夠的錢,不僅是車票,面試過程可能會持續幾天,需要住宿之類的。

    3.2 關于刷題

    這是個見仁見智的問題,如果你基礎足夠好,那麼大可以不要花太多時間在刷題上,但是我也建議你讀一讀《程式設計之美》、《劍指Offer》、《程式員面試寶典》、《程式員面試金典》之類的書來熟悉一下題型。

    吐槽一下,我當時看的《程式員面試寶典》是第4版,不知道為啥出到第4版了,錯誤還很多。前半部分還好,值得一讀,後面就不敢恭維了。大家讀書一定要警惕。

    如果你基礎不太好,那麼刷題就尤為重要了,雖然有點取巧,但也不失為一個辦法。

    這裡提一下C++,即使你投的崗位不是C++(是Java或其他),那麼筆試的時候遇到C++的機率也是很高的。這是因為考察C++更有區分度,更加便于篩選,是以希望大家盡量突擊一下C++。當然,不同公司的選拔風格不一樣,大家還是多參考一下他們往年的筆試題吧。(前端的話應該考不到C++,這點我不了解)

    3.3 鼓起勇氣

    之 前我們學校大學生進BAT的很少,可能要隔一年才有一個。但是其實并不是我們學校學生真的這麼差,雖然我們學校教育不怎麼樣,但不代表我們學生的素質就是 如此。原因很簡單就是缺乏勇氣。我曾和一些學長學姐共事過一段時間,他們對于BAT以及其他的網際網路大廠,都是想都不敢想。我也曾經羞于說出自己的夢想 “進入BAT”。

    所 有網際網路大廠都是不會來我們學校所在城市(南昌)招聘的,我們要想面試這些企業都要去省外城市(比如武漢)。異地面試也是給很多人心中造成了無形的壓力, 覺得跑這麼遠,要是面試失敗咋辦,覺得不僅丢了錢還會丢面子。其實很幼稚,每個人都應該盡自己所能找到最好的工作,沒必要想這麼多,你丢掉的錢,遲早會得 到更豐厚的回報。你丢掉的面子,遲早也會獲得欣羨的目光,最差的情況你也能告訴自己“努力過了,争取過了,失敗了也不後悔”。

    想我當初可是在武漢面試蘑菇街一面就挂掉了,然後三天之後又收到了騰訊武漢面試的短信。你說我去不去?

    “蘑菇街你都挂了,你還要面騰訊?”

    我去,我一定要去。

    還 有一點就是不要害怕自己學校差(普通一本甚至二本),不要嫌棄自己學曆低(大學)。首先研究所學生們在算法崗方面确實你大學生有優勢,但是在開發崗上并沒什麼 差别。然後大公司招聘雖然喜歡招聘名校的畢業生,但這僅僅是因為通過半個小時到一個小時的面試,面試官真的很難了解到你的全貌。而如果你是名校的學生,那 麼無形之中就在證明自己的能力,首先你能考上這個學校就說明了你的學習能力,然後這個學校師資力量,辦學條件十分優厚,确實能助力學生的成長。如果你學校 一般,那麼面試官可能覺得你學習能力有欠缺,或者覺得這樣一個學校并沒有好的條件去培養你。

    但是這絕對不是全部。你是普通學校的學生,并不代表你沒有足夠的學習能力,沒有掌握足夠的職業技能。你需要做的僅僅是努力向面試官展示出你的學習能力,你所掌握的技能就好了。

    我有一個老鄉,二本學校,但是去年收割了BAT的offer,其中霸面百度拿了special offer。他大學期間就做了很多事,做了很多項目,還開辦工作室等等。這些大學經曆以及項目經驗寫到履歷上,和面試官一聊,那麼面試官真的不會在乎你是什麼學校什麼學曆的(網易除外)。

    同學們,鼓起勇氣,幹巴爹。

生活在别處

工作很重要,學習很重要。但生活不止于此,不要忽視家人,不要忽視最後的大學時光,如果可以,早點找個妹子吧。

繼續閱讀