程式設計師讀研如何提高技術之我見
你想進什麼公司,和你讀什麼計算機方向,關係不是很大。只要是理工科的學生,面對技術崗位,其實機會是差不多的。
至於你想什麼職位,那顯然和你的專業/方向關係較大,比如說很多大資料職位,就明確表示要求你DM/ML/NLP/IR背景,但是這也只是說這些學生可能更有優勢些,事實上,數學和統計學出身的,很多搞這個非常牛逼的。
所以,不要問選什麼導師,選什麼方向;也不要問我的實驗室很水老闆很菜我還能找到好工作嗎?你要問的是:我想畢業去互聯
網公司,我讀研的這幾年是應該打醬油呢,還是打地溝油?
想找一個好的網際網路技術類、研發類工作,無非就是以下4點,你任選一點,做好了,都是有利的,哪4點?
- 語言層面
- 演算法層面
- 專案層面
- 專業層面
具體分析如下:
語言層面
你是想搞C++還是Java?選定一門語言後,多看一些這方面的書。
C++,不用說了,《Effective C++》,《More Effective C++》,《Inside The C++ Object Model》等等。
Java,最好能看點虛擬機器相關的。尤其是Java虛擬機器的記憶體管理。以及多執行緒、執行緒池、設計模式等。
問題來了:學C++好還是學Java好呢?語言爭論每天都在發生,真的好無聊。建議按照方向和興趣來選擇,不靠譜的說:
如果是想做大型遊戲開發、底層研發、系統研發、驅動研發等等,就選用C/C++。
如果是想做網站開發、網路研發、上層開發、Android開發等等,就選用Java。
順便說一下,有空可以學學Python。
演算法層面
學好演算法。這個有兩條路,最好是並行,那就是看書和做題。
看書的話,主要有《演算法導論》、《演算法》(Robert Sedgewick著)、《演算法競賽入門經典》、《挑戰程式設計競賽》
找一本認真看,認真思考。證明過程可以不看,但是演算法思想最好能懂,以及實現,最好能在紙張上寫出來。複雜度總要知道吧?
研一的時候,我就把演算法導論上的很多演算法,都自己親自coding了下。
特別複雜的資料結構,比如紅黑樹、B樹,沒空就別搞了。網際網路面試一般都不要求的。
主要是排序、查詢、簡單DP、貪心、圖演算法和搜尋。 根據身邊同學的面試經驗,二分搜尋和快速排序,是面試常備了。看書的時候,如果有時間,可以思考幾個問題:
- 這個演算法的時間空間複雜度,各是多少?如何分析?
- 工程實現裡,都有哪些trick?如何加速?
- 這個演算法可能用在哪些方面?有哪些應用?你比如說吧,求交集的演算法,就廣泛用在倒排索引、新浪微博共同關注、計算Jaccard係數等等上。
除了看書,還有就是很重要的:刷題啦。主要有poj,zoj等。找一個網站,認真刷一些題目,踏踏實實的,別浮躁。
專案層面
如果實驗室比較牛,基本上忙專案就足夠累死累活了;不過做了相對給力的專案,對於找工作,還是有很大幫助的。基本上不用怎麼愁了。
如果老闆這兒沒專案呢?
如果實驗室比較水,那就儘量去實習。大公司的實習經驗很能給簡歷加分。如果老闆不讓你出去實習。ok,既然實驗室很水,說明自由時間比較多,那還是可以幹很多事。比如說,github上就有很多開源專案,你可以選擇一兩個著名的,閱讀原始碼,然後嘗試自己也參與進去。
說幾個我比較感興趣的開源專案吧:redis,spark。
專業層面
你對資料探勘很精通,你對推薦系統很熟悉。你在NIPS,SIGIR上發表論文無數;你是百度推薦大賽,阿里巴巴大資料比賽冠軍常客。
也就是說,除了嘗試發頂會論文,還可以參加各種比賽。本專業本領域裡都有什麼比賽可以參加呢?搜一下微博或者知乎,或者問下師兄師姐,不就知道了?
專業層面,可以做的東西非常多。比如,你對資料探勘很感興趣,那麼資料探勘中的常見模型,我們瞭解多少?機器學習,我們掌握到什麼程度了?舉個例子:
- SVM和logistic regression這兩種model,有什麼特點?各自的適用場合?
- feature selection的常用方法有哪些?為什麼lasso可以作為feature selection?
- Adaboosting為什麼不容易over-fitting?你能不能從statistical view來解釋解釋?
- 哦,你和我說,你不是搞學術研究,你反感Learning Theory,你說你是一個工程師,那你寫了多少程式碼?
scikit-learn,weka,以及spark,你會用哪個工具?(熟悉一種工具)
你有自己下載一些資料集跑跑實驗嗎?你有參加一些大資料相關的競賽嗎?(動手實驗/參加比賽)
專業層面,能做的,要做的,還有很多。
哦,最好熟悉下linux的基本使用。
最後的話
如果能在讀研期間做到這裡的一點或者幾點,到時候甚至不需要翻《程式設計之美》或者leetcode就毫無壓力啦。 最後說幾點個人感受。
- 演算法牛,專案牛,長得又帥,又精通很多語言,這種人,是不多見的。
也就是說,你想拿一個好offer,一般只要有一兩點突出,就可以了。
- 網際網路面試,除了個別公司個別面試官,一般都是要考查(考查?考察?這兩個詞有什麼區別?考察是調研、研究、分析的意思)演算法的。你研一的時候準備,看書做題,總比研三的時候抱佛腳來的好吧?
況且,演算法的學習,也不僅僅是為了面試吧?可能是受益終身的。或者,吹牛皮裝逼作為談資,也是可以的。
- 別輕易說我就要去某某公司。到時候,你會發現,選擇比你想象的多。
也有可能比你想象的還少,為什麼?
就看你有沒有做到我上面說的這些了。
相關文章
- 讀研如何提高技術之我見
- 程式設計師”青春飯”問題之我見程式設計師
- 程式設計師"青春飯"問題之我見程式設計師
- 程式設計師如何提一個好問題程式設計師
- 如何提高技術水平
- 程式設計師如何提升技術?程式設計師
- 浪潮之巔,程式設計師如何擁抱新技術?程式設計師
- 我見過最浪漫的程式設計師求婚方式程式設計師
- 程式設計師如何選擇程式設計技術書?程式設計師
- 我是如何閱讀程式設計書的程式設計
- 秒殺系統架構如何設計之我見架構
- 每個程式設計師都應該讀《Unix程式設計藝術》程式設計師
- 程式設計師最常見的技術性誤區程式設計師
- Delphi 中物件導向程式設計之我見 (轉)物件程式設計
- 《程式設計師程式設計藝術》程式設計師
- 我是程式設計師,我自豪程式設計師
- 遇見程式設計師男友程式設計師
- 我是印度程式設計師,我要為印度程式設計師辯護程式設計師
- 程式設計師如何利用技術管理技巧程式設計師
- 程式設計師如何選擇技術方向程式設計師
- 我見過的最牛叉ReactJS程式設計師 - FaisalReactJS程式設計師AI
- Java程式設計師必讀:最新流行的Java開發程式設計技術Java程式設計師
- 趣文:自從我做了程式設計師之後程式設計師
- 我的程式設計師之路程式設計師
- 你好,我是程式設計師程式設計師
- 我看程式設計師 (轉)程式設計師
- 程式設計師職業素養之讀後感程式設計師
- 程式設計師妻子自述:那些程式設計師教給我的程式設計師
- 程式設計師妻子自述: 那些程式設計師教給我的程式設計師
- 程式設計師該不該主動提加薪?程式設計師
- 提問的智慧 程式設計師成長之路程式設計師
- 程式設計師如何做好技術規劃?程式設計師
- 程式設計師職場之路,如何提升技術能力?程式設計師
- 如何提升程式設計師的非技術才能程式設計師
- 設計師必讀!如何從甲方抽象的概念裡提煉LOGO創意抽象Go
- 程式設計師必看的書之Java程式設計師程式設計師Java
- 我如何轉行為程式設計師:心態支撐著我程式設計師
- XML 程式設計思想: 研讀XML Hacks(轉)XML程式設計