程序員讀研如何提高技術之我見

jopen 9年前發布 | 21K 次閱讀 程序員

文/Yebangyu

你想進什么公司,和你讀什么計算機方向,關系不是很大。只要是理工科的學生,面對技術崗位,其實機會是差不多的。

至于你想什么職位,那顯然和你的專業/方向關系較大,比如說很多大數據職位,就明確表示要求你 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 系數等等上。
  • </ul>

    除了看書,還有就是很重要的:刷題啦。主要有 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,你會用哪個工具?(熟悉一種工具)
    • 你有自己下載一些數據集跑跑實驗嗎?你有參加一些大數據相關的競賽嗎?(動手實驗/參加比賽)
    • </ul>

      專業層面,能做的,要做的,還有很多。

      哦,最好熟悉下 linux 的基本使用。

      最后的話

      如果能在讀研期間做到這里的一點或者幾點,到時候甚至不需要翻《編程之美》或者leetcode就毫無壓力啦。 最后說幾點個人感受。

      算法牛,項目牛,長得又帥,又精通很多語言,這種人,是不多見的。也就是說,你想拿一個好 offer,一般只要有一兩點突出,就可以了。

      互聯網面試,除了個別公司個別面試官,一般都是要考查(考查?考察?這兩個詞有什么區別?考察是調研、研究、分析的意思)算法的。你研一的時候準備,看書做題,總比研三的時候抱佛腳來的好吧?況且,算法的學習,也不僅僅是為了面試吧?可能是受益終身的。或者,吹牛皮裝逼作為談資,也是可以的。

      別輕易說我就要去某某公司。到時候,你會發現,選擇比你想象的多。也有可能比你想象的還少,為什么?

      就看你有沒有做到我上面說的這些了。

       本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
       轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
       本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!