碼農自白:這樣成為谷歌工程師

sohu發表於2013-06-25

  谷歌多年盤踞“全球最佳僱主榜”前幾位並且曾經數次蟬聯榜首,而它選拔聘用人才的標準也是出了名的高,其中相當出名的一條是“名校情結”——無論在哪個國家,谷歌都異常青睞畢業於頂尖學府的精英,並且會參考他們大學階段的成績單。

  如果小編說,谷歌也曾經錄用過一位沒受過正規大學教育、連本科文憑都沒有、基本全靠自學成才的草根碼農,大家會不會覺得不可思議?但是,這事兒真的可以有——曾就職於谷歌、Square、DoubleHelix等公司的資深軟體工程師及創業者大衛•比託(DavidByttow)日前撰文介紹了他從一介草根到被谷歌錄用的經歷,故事絕對勵志!

  文章摘要:

  第一,鼓起勇氣挑戰很牛的事情,做著做著自己也就變牛了。

  第二,與業界“大拿”為友,能改變解決問題和看待世界的方式。

  第三,勤能補拙,在大量實踐中彌補基礎知識方面的差距。

  第四,抹去簡歷中的教育背景,意外得到面試機會;做足準備,谷歌面試也能變得樂趣十足。事實證明,谷歌對優秀的人才並不完全拘泥於學歷。

  以下為文章全文:

  發表《編碼不息——如何成為軟體工程師》(ABC:AlwaysBeCoding–HowtoLandanEngineeringJob)一文之後,很多人都來問我一個問題:我為何連大學學位都沒有也能被谷歌錄用為工程師?以下就是我的故事,不過大家的經歷也是因人而異的。

  其實,我當年非常非常想上大學。我選擇申請加州大學洛杉磯分校(UCLA),但是很不幸,我在高中的平均績點(GPA)只有可憐巴巴的2.45,所以我也就沒法被大學錄取了。然後,我在普渡大學蓋萊默校區(PurdueUniversityCalumet)進修計算機課程,同時盼望自己有朝一日能順利轉學或者另謀出路。過了將近兩個學期之後,出路來了——我得到了一個令人無法拒絕的錄用通知。

  第一步:假裝自己很牛,直到真的變牛

  上大學時,我曾經給印第安納州格里菲斯市的一家小公司打工,工作內容是幫助本地公司建網站,時薪12美元。這份工作與我所夢想的未來職業相去甚遠,但也不算太糟糕。

  我埋頭苦幹、不說大話,把好幾個專案做得超乎預期。這為我建立了很好的聲譽,也讓那家公司獲利頗豐。與此同時,我還在並不充裕的業餘時間裡嘗試遊戲開發。後來我孤注一擲,請求公司管理層給我三個月時間和一點點錢來開發一款能在網上銷售的遊戲。我做出了漂亮的電子表格和豐富多彩的圖表,向他們展示了共享軟體模式的原理和遊戲的光明“錢途”。當時我也不大清楚自己在做什麼,但他們還是買了我的賬,可能是因為我做的東西顏色很漂亮吧。

  開發了兩個多月之後,我在網上釋出了一段演示,引起了加州初創企業CodeFire的注意,因為他們做的也是一模一樣的太空射擊遊戲,類似於非3D的SubSpace。但引起關注未必就是好事——很不幸,他們向我發出了勒令停止通知函。於是我也只能回覆曰:“沒問題,我會到此為止——前提是你們得僱我開發你們的遊戲。”他們回以一份錄用通知,而我笑納了它。

  注意:這家公司持有這款遊戲的原始版權,而我在離職前也按照規定提前三週通知了老東家。

  第二步:與“大拿”交朋友

  這或許是你能做的最重要的事情之一——找到你們行業中的大拿,讓他們做你的導師,切記學無止境。在DoubleHelix工作時,我遇到的大拿是內森•亨特(NathanHunt),他是我見過的最聰明、最謙遜的牛人之一,而且他對我提出的所有問題都極具耐心,無論這些問題有多麼初級。我成百上千次走進他的辦公室,隨意提出諸如“我如何才能把一個旋轉矩陣順利插入另一個?”之類的問題。多年之後,他比我晚一個月加入了谷歌。

  我的每一位導師都在一定程度上改變了我解決問題或看待世界的方式,我在此就不一一贅述了。

  第三步:彌補差距

  我沒有正式的計算機學位,因此我明白自己缺乏很多基本知識,例如我曾經用物理引擎解決一個動態程式設計問題,結果總也不成功。為了彌補這些差距,我實踐過我所聽聞或讀到過的幾乎所有最常見的資料結構和演算法。你肯定能找到自己需要的資訊,但是通過觀察“知其然”與通過實踐“知其所以然”之間存在著巨大的差距。

  隨著時間的推移,你需要做到以下事情:

  1.精通C、C++、Objective-C、Java、PHP、Python或Ruby當中至少一門程式語言,熟練使用至少一種其他語言,並且熟悉Scala、Haskell或Lisp。

  2.學習資料結構,實踐大多數常用資料結構,瞭解它們的複雜性。

  3.解決程式設計問題,多看多練多思考。

  4.構建自己的已完成(未完成)專案作品集(例如程式設計框架、移動或Web應用、小遊戲,等等)

  第四步:找到自信

  離開印第安納六年後,我已經在多個平臺上推出了大約6款遊戲。我開始感到無聊,需要尋求新的挑戰。我申請了谷歌的職位,覺得被谷歌僱傭能讓我成為“真正的工程師”——對於我這個沒有一紙文憑的人來說,這就是我為之奮鬥已久的理想。但是,我一直沒有收到谷歌的迴音,而我對此並不感到驚訝。

  一年之後,我重新提交了自己的簡歷,但是這一次索性把“教育背景”一欄整個兒去掉了。令人哭笑不得的是,一名招聘人員居然打來了電話併為我安排了一次技術方面的電話面試。我問她能否把電話面試安排在兩週之後,她同意了。我需要那段時間——我分秒必爭地臨時抱佛腳,最大限度地向自己的腦袋裡填裝各種演算法和資料結構,每天程式設計12到14個小時,解了數百道程式設計題目。我如痴如醉地投入其中,直到我對谷歌面試的恐懼感變成了自信和興奮。

  我依然記得在谷歌面試過程中遇到的每一個人,與他們打交道實在是一種樂趣。面試官們說起話來風趣幽默,而我相信他們一定看到了我的興奮和對面試問題的期待。

  以下是我遇到的一些面試題目:

  1)給出一組二維點,計算出它們的skyline。此題很簡單,解法有好幾種,而我使用了一種叫做“最大堆”(maxheap)的常用資料結構。

  2)設計微軟的“畫圖”軟體。這是我目前為止遇到過的最好玩的問題,我先是畫出了介面和類圖(classdiagram),然後重點講了一個“顏料桶”功能。面試官當場讓我實現這一功能,所幸我閉上眼睛也知道該如何實現寬度優先的迭代遍歷——多謝TopCoder網站。

  3)講一講你最看重的軟體優點。這是一次“開放性”討論面試,我講到了各種測試以及它們發揮價值的時候(例如單元、整合、驗收),還講到了利於程式碼可維護性的一致風格,等等。這些內容能在《CodeComplete》和《EffectiveJava》等圖書中找到。

  我真的非常享受每一輪面試和解答各種題目的過程。如果我不是有備而來,情況肯定就會大不相同。面試之後,我自我感覺很好,但是我聽說即便招聘委員會最終決定發放錄用通知,也需要CEO拉里•佩奇親自簽字才有效。我很擔心他一看到我在教育背景方面的不足,我就立馬完蛋了。

  但是,這樣的悲劇終究沒有發生——一天中午,我在聖克拉拉市(SantaClara)吃壽司時接到了電話,然後欣喜若狂地接受了錄用通知。從那天起,我終於可以確信我再也不用回學校唸書了。

  正如孫子曰:“是故勝兵先勝而後求戰,敗兵先戰而後求勝。”

  注:我在谷歌度過了精彩非凡的五年,作為一名工程師不斷學習和成長,但是現在我已經不在谷歌工作了。

it.sohu.com true http://it.sohu.com/20130625/n379812542.shtml report 3790  編者按:谷歌多年盤踞“全球最佳僱主榜”前幾位並且曾經數次蟬聯榜首,而它選拔聘用人才的標準也是出了名的高,其中相當出名的一條是“名校情結”——無論在哪

相關文章