如果沒有文憑,碼農用什麼方法找到好工作?

假設這個碼農具備比較良好的能力體系


沒有學歷,四步加入谷歌
自從發表了堅持編程( ABC: Always Be Coding - How to Land an Engineering Job)這篇文章,很多人問我在沒有學歷的情況下怎麼獲得在谷歌工作的機會的。你通向成功之路或許會和我的不一樣,下面是我的故事。
我非常希望能上大學。我的理想大學是UCLA。很不幸,我高中的GPA低的令人尷尬,只有2.45。所以實際上,我並沒有隨便選擇一家大學。我在普渡大學蓋萊默分校上的計算機科學課程,希望可以當交換生或者找到別的出路。差不多兩個學期以後,後者發生了。我收到了一個不可拒絕的offer。

第一步:在你能做之前先裝裝樣子。大學的時候,我在一家專門為本地企業建設網站小公司工作,時薪是12美金。在我的職業規劃里,我從未想過做這樣一份工作,但當時來看還不錯。
我同時參與多個項目,身負重任,我選擇埋頭苦幹,全力以赴。從這個過程中我獲得了很多信任。同時,我嘗試利用我不多的業餘時間開發遊戲。我去到一個天主教會,向那裡的管理人員請求提供我少量的錢和三個月時間來開發這個遊戲,然後在網上銷售。我繪製了漂亮的報表和顏色豐富的圖片,向他們展示共享軟體模型( shareware model)是怎麼工作以及如何確切知道這會帶來回報。實際上,我對於我將要做的東西還不是非常清楚,但是他們買了,也許是由於那些漂亮的顏色。
經過兩個月的開發,我將Demo發布到網上。一個在加州剛剛起步的創業公司CodeFire發現我的Demo和他們的遊戲如此相似,都是一個從上往下看的太空射擊遊戲,都和SubSpace非常相似,除了3D部分。不幸的是,他們通過勒令停止通知函與我交涉。我只能給他們一個回復「當然可以,只要你們聘請我工作,我就馬上停止」。他們馬上給我發了offer。然後我就收拾行裝去了加州。

第二步:和大師交朋友。這可能是最重要的事情。在你的領域裡找到一位大師,讓他們成為你的導師,不停的向他們學習。當我在Double Helix工作時,有一位大師叫 Nathan Hunt,他是我遇過最聰明的卻又最謙卑的人。不管我問的問題如何的基礎,他都極度耐心的一一解答。我至少上千次的走進他辦公室,問一些諸如「我怎樣才能平滑的將一個旋轉矩陣插值到另外一個裡面」,「我應該如何實現移動柱體的碰撞檢測」的問題。幾年以後,他晚我一個月加入了谷歌。
每一個導師都改變了我解決問題或者看待世界的方法,而這隻有其中的一小部分。

第三步:填補不足。因為我沒有一個正式的計算機學位,我清楚自己缺乏很多基礎的理論知識。比如,我實現了一個物理引擎,但從未解決過動態規劃的問題。為了填補這些空缺,我幾乎實現了所有我見過或讀過的數據結構與演算法。這些雖然都已經有了,但是通過觀察而知道其如何工作,與通過實現而知道其為什麼可行有著巨大差別。
完成以下幾點:

  1. 至少掌握其中一門語言: C, C++, Objective-C, Java, PHP, Python 或 Ruby。了解至少一門其他語言,熟悉Scala,Haskell或者Lisp。
  2. 學習數據結構( data structures)。嘗試實現其中的大部分。理解他們的時間複雜度( time complexities)。
  3. 解決編程問題。閱讀下面的文章( Read this)和解決這裡的大多數問題( solve many of these)。
  4. 為你的項目建立主頁。(比如,編程框架,移動應用,網頁應用,小遊戲等)

第四步:找到自信。在離開印第安納州6年以後,我已經通過多個平台發布了超過6個遊戲。我漸漸覺得無聊,需要新的挑戰。我申請了谷歌的職位,由於我沒有學歷,我想著如果我被聘請了,我就能成為夢寐已久的一名真正的工程師了。但是,我從未收到回信,對於這一點我感到一點都不意外。
一年以後,我再次提交了我的簡歷。而這一次,我把「教育」這一部分刪除了。諷刺的是,這次一位招聘官給我打電話和我預約了一個電話技術面試。我諮詢是否可以預約在兩個星期以後,他同意了。我需要這一部分時間。我利用這段時間,盡最大努力將儘可能多的演算法和數據結構塞到我的腦子裡。我每天編碼12-14個小時,解決了幾百道編程題。我慢慢沉迷進去了,直到我對谷歌面試的害怕變成了自信和興奮。
我記得住在谷歌的每一次面試,每一次與他們的交鋒。面試官都很健談,我相信他們都看得出來我非常興奮的迎接他們的問題。
我遇到的一些面試題如下:

  1. 給定一組2維點,計算出他們的輪廓線。這非常簡單,我採用了非常一種通用的數據結構叫做最大堆。這道題有很多解決方法,這裡有一個非常好的。( good one)
  2. 設計微軟的畫筆。這是目前為止最有趣的問題。我從畫介面和類圖開始,我提到了畫筆桶(Paint Bucket),面試官讓我實現它。幸運的是,多虧TopCoder,我閉著眼睛都知道如何實現一個迭代的,廣度優先遍歷的桶。
  3. 描述你的軟體的長處。這是一道開放的討論面試題。我說到了測試的類型和他們的重要性(單元測試,集成測試,驗收測試)。我又說到了代碼風格的一致性和可維護性等等。這些東西你可以在 Code Complete和 Effective Java找到。

我真正的享受每一輪面試和每一個扔給我的問題。如果我沒有那樣認真的準備,我現在肯定不是這個樣子。面試完了以後,我感覺非常好。但是,我聽說即使招聘委員組同意了給offer,拉里本人仍有權利否決。我擔心一旦他看到我沒有學歷以後,我就完蛋了。

不過,這並沒有發生,有一天我在Santa Clara吃著壽司午餐,我接到了電話,我非常熱情的接受了Offer。那一天,我清楚的知道我不用再回到學校里去了。

勝利的戰士先勝了再去戰場,而失敗的戰士先上戰場再去求勝。

經過5年學習和成長,我現在已經不再為谷歌幹活了。

英文原文[Four Steps to Google, Without a Degree]


如果你需要一塊敲門磚的話,也許你可以考慮程序員(軟體工程師)水平等級考試

但這也僅僅只是敲門磚而已,最關鍵最核心的還是提高自己的能力

最後一點,或者說最重要的一點,不要把自己定位在「碼農」


獨立的作品(比如自己的網站、app、小軟體) 或者項目經驗!

事實上,碼農找工作,根本不需要文憑。

不過,大多數有能力自己搞獨立作品的工程師,在這個時代都創業了,賺得比找工作多。


勇敢的融入進IT社區中去,你會發現很多機會的。

你的博客,知乎都可能是比學歷還要重要的東西,從現在搞定它們~


看到過一個招聘:我們不收簡歷,你的github賬號就是你的簡歷。


牛x的作品。或者是實用的作品。或者做一些有用的教程。
樓主注沒注意到有些流傳很廣的東西保留著作者的聯繫方式?


參加高考


推薦閱讀:

IT 行業的工資是否虛高?
怎麼擁有幸福?
為什麼人不能像「畫圖」一樣創造音頻文件?

TAG:編程 | 信息技術IT | 工作 | 文憑 |