Google工程師對學生朋友的一點建議
自去年春天加入谷歌,我曾多次隨公司校園招聘團隊一起走訪各地院校,幫助公司發掘人才。利用這樣的出差機會到處走走看看,飽覽祖國大好河山,是我一點小小的私心。但更具挑戰性、更激動人心的,還是和我未來的同事們過招,不打不相識嘛。一想到馬上就要和這樣優秀的人才一起工作,我就興奮不已,真恨不得現在就買一張單程機票把他/她拽回北京。
然而,在面試過程中,我也相當惋惜地看到,由于種種主客觀原因的限制,很多青春韶華的學子未能充分發揮出他們應有的潛力。這里我不講成績,只把我遇到過的一些普遍的問題歸納一下,希望對即將踏入社會的學生朋友們能有些許幫助。
實戰!實戰!
紙上得來終覺淺,絕知此事要躬行。對于一個未來的軟件工程師來說,實際編程經驗是相當重要的。我們會要求應聘者在緊湊的時間內編寫大量的代碼,從中考察應聘者的分析能力,編碼速度,代碼可讀性,對所用編程語言的掌握程度,對邊界條件與異常狀況的處理,數據結構與函數接口的定義,程序運行的效率和應聘者查錯糾錯的能力等等。一口氣列出這么多要求,聽上去似乎過于苛刻,其實只要積累了足夠的實戰經驗,每一個應聘者都完全可以滿足這些最低限度的要求。
我記得開復對于青年學子們有一個建議,大學四年,至少要編寫 10 萬行代碼。不是每一個人都期望進入谷歌這樣的頂級技術公司,但即使對開復的建議打個三折,也還有 3 萬行呢,不努力,能行嘛。前來應聘的學生們在編寫代碼時暴露出這樣那樣的問題,大都可以歸結到同一個原因:鍛煉太少。比如"for (int i = 0; i < strlen(s); ++i)",沒有實戰經驗的人,怎么可能意識到暗藏其間的效率陷阱。再比如內存泄漏,就和初戀一樣,沒有親身經歷過的人,不會有刻骨銘心的感受,而一旦經歷,終身難忘,根本用不著你有多聰明。遺憾的是,我看到許多相當聰穎的學生寫出來的代碼只能用慘不忍睹來形容,真讓我懷疑這是不是就是他們的第一次。大家不要怪谷歌要求高,恕我直言,
如果不能持之以恒,下點兒苦功夫,不光谷歌一家,其它公司恐怕也是進不去的。
北京、上海等地的學生,往往有更多實習、兼職機會,接受鍛煉之余,還能攢下一筆小錢作零用之資。其它一些地區的學生也許就沒有這么幸運,這就尤其需要積極主動,尋找機會,創造機會,把握機會。世界正在變平,互聯網的發展改變著地球的面貌,讓不發達地區的學生也能相對容易地接觸到發達地區的資源。前不久我在西安遇到一個學生,他半年來一直堅持在北京大學的 ACM 網站上參賽、做題,我看他寫出來的程序就確實比他大多數同學都要好一些。我相信,只要他能夠持之以恒,還會取得更大的進步。我聽說浙江大學的 ACM 網站、TopCoder 網站也都是不錯的教育資源,感興趣的同學不妨一看;雖說做競賽題距離真正的軟件開發還有著顯著差別,但也不失為一個不錯的出發點。
在積累一定編碼量的基礎上,我建議大家總結經驗教訓,不斷提高自我。如果幾萬行代碼寫下來,學 C++ 的不知道 const 怎么用,學 python 的沒聽說過 GIL,我看也沒什么意思。到了這個階段,我推薦大家讀一些經典的進階書籍,例如《Effective C++》、《Effective Java》等,即使地處偏遠地區,也可通過網上書店買到。(我建議編碼量太少的同學就先不要讀了,會走火入魔的。我見過有學生連引用和指針都沒搞清楚,就在那里重載操作符的。)交流也很重要,如果能夠與網上網下志同道合的朋友互相幫助,共同進步,當收事半功倍之效。在這一方面,各校的 Google Camp 也許能夠起到一定作用。
"我會寫代碼呀,為什么谷歌不要我?"
在谷歌,研究與開發融為一體,軟件工程師與計算機科學家當然也合二為一。計算機這幾年算是比較熱的,能夠得償所愿擠進計算機科學相關專業的學生都是全中國頂尖的人才,如果大學四年荒蕪學業,未能取到真經,浪費了這一來之不易的學習機會,是不是太可惜了呢。
遍歷一個數組或鏈表的時間復雜度是多少?對于這樣一個不是問題的問題,竟然各地都有相當數量的學生回答說是 O(logN)!有一次我實在忍不住了,提示應聘的學生說:"你是如何理解'遍歷'一詞的涵義呢?"他立刻做恍然大悟狀,回答說:"哦,對,應該是 O(NlogN)"。我當時失望得一句話都說不出來。類似的例子還有很多。坊間一直傳說谷歌的面試題有多難,其實大多數學生都卡在最基礎的問題上。少數人費盡氣力要收集谷歌曾經用過的面試題,其實我們大多數題目都來自或改編自經典計算機科學教材的習題。
順便提一句,上面提到的那個答錯的學生乃是一流大學中成績名列前茅的優秀生,門門功課(包括所有計算機專業課)均在 90 分以上。反差何其大也!
誠信為本
我曾服務于多家公司,注意到不同的公司之間,乃至同一公司內不同的面試官之間,對應聘者的要求都會有所差別,或看重潛質,或偏好經驗,或強調態度。但有一點大家是共同的:如果應聘者在誠信上有疑問,誰也不敢要。
總體而言,現在的學生其誠信還是相當不錯的,大大超出了我們的期望。然而,不和諧音也還是有的。我們曾在某著名高校進行筆試,就發現有學生嚴重作弊,他們毀掉自己的機會不說,整個學校的名聲也受到拖累。面試中偶爾也能遇到誠信堪憂的學生。有一次我出了一道題,前來應聘的學生明明以前見過這道題,卻告訴我說沒見過,自以為得計,可他那一縱即逝的狡黠一笑哪里逃得過我的眼睛。兩點之間直線最短,說真話最簡單。
做最好的自己
不是每一個人都會加入某一家具體的公司,但每一個人都可以成功,成為最好的自己。我這里所談,既不系統亦欠簡練,但確實是我在幾次校園招聘之旅中發現的一些具有共性的問題,故不避好為人師之譏,羅列于此。我當然知道,本文的首要目標讀者——大一新生是不聽勸的,他們更愿意把所有的錯誤親自重犯一遍。話雖如此,只要能夠對一個學生有所啟迪,我的時間就不算白費。
【編輯推薦】