GitHub 上最勵志的自學教程:8 個月,從網頁前端到年收百萬Amazon軟體工程師

0
1679
John Washam GitHub

Google 工程師條件:名校出身、CS 專業背景、博士學位加持,技術過硬?John Washam 告訴你:不用,自學 8 個月也可以!

John Washam 立志要成為一名 Google 軟體工程師,但沒有 CS 專業背景的他,只能透過自己的努力來達成理想。

於是,8 個月的時間裡,他花了數千小時閱讀書籍、編寫代碼、觀看 CS 技術講座,一路披荊斬棘、打怪升級。最終,雖然沒有去 Google,但他人到中年,還順利成為了一名亞馬遜 AWS 的技術專家,年薪百萬。

更加難能可貴的是,John Washam 還將自學經驗編寫成了一份教程,在 GitHub 上線以來,已收獲近 10 萬星的好評。

圖片來源:John Washam GitHub

正如他所說:

即便沒有面上(?)夢寐以求的 Google ,但是教程,也可以用來好好充實一下自己。

PS:教程有中文版哦!

GitHub 超 10 萬星自學寶典

是什麽樣的編程教程,能如此火爆?

他最初的目的是「考上」Google,於是每天自學 8-12 個小時,堅持了 8 月有餘。邊學還順手整理出了這份自學項目專案。

不過在完成這項學習計畫後,他最終被亞馬遜錄取,成為一名軟體工程師。

Washam 表示:

無論你要面試哪家軟體公司,這裡的項目可以讓你做好充分的準備,包括像亞馬遜、Facebook、Google 和微軟這樣的科技巨頭。

接下來,我們就跟著 Washam 的腳步去了解一下這份面試寶典。

選擇語言、必備知識資源

首先要做的就是選擇一門語言,在 Google 一般是 C++、Java、Python,有時也會用到 JavaScript、Ruby。背後還有一些如 SQL、HTML 等技術沒有列出。

接著開始學習計算機硬體知識:

圖片來源:量子位

然後補充計算機專業的基礎數學知識,如算法複雜度 / Big-O / 漸進分析法、數據結構、樹、排序、圖論。

圖片來源:量子位

此外還有遞歸、動態規畫、組合與概率、NP&NP-完全和近似算法、緩存、線程與進程、系統設計、可伸縮性、數據處理。

看到這麽多知識點,你會不會覺得有點懵呢?Washam 告訴你一點小技巧。

因為你不可能一遍就記住所有知識點。所以需要把要回顧的知識點做成抽認卡 (flashcard):正常的及帶有代碼的,類似於背單詞。

圖片來源:量子位

每種卡都會有不同的格式設計。項目主頁中就有抽認卡的原始碼,可以根據自己的學習特點去製作。

Washam 還留有一組 ASCII 碼表、OSI 堆棧、Big-O 記號及更多的小抄紙,以便在空餘的時候可以學習。每編程半個小時就要休息一下,並去回顧你的抽認卡。

當然,論文的閱讀也是必不可少的,尤其是 Google 曾經發表的一些基礎技術論文。

圖片來源:量子位

書籍則推薦一些關於算法和 C++ 編程之類的。

圖片來源:量子位

Google 面試注意事項

面試的第一步當然是要有一份好的簡歷,這樣才能為你爭取到寶貴的面試機會。知名科技部落客 Steve Yagge 給出了 10 個提醒,幫你做出一份還不錯的簡歷。

John Washam

圖片來源:量子位

這位 Steve 曾經在亞馬遜、Google 都工作過,Washam 的這個專案就大量地引用了他的技術部落格內容。

在面試時,你可能會遇到這 20 個問題,每個問題準備 2-3 種回答。準備點故事,而不要只是擺一些你完成的事情的數據。

圖片來源:量子位

面試官在也會問你還有哪些問題,不要說自己沒有什麽問題要問,可以試試問一些此類問題:

圖片來源:量子位

當然,進入 Google 也不意味著結束,你還要新的學習過程。

Washam 還有一份附加內容,包括 Emacs 和 Vim、Unix 命令行工具、密碼學。這些內容雖然不會直接用到,但是會大大提高你的效率。

一個 Web 前端的新征程

其實嚴格來講,John 並不是一個編程小白。

從高中起,John 就開始學習編程,學的是 BASIC 語言,這還在是上世紀 90 年代。

大學畢業拿到經濟學學位後,他先是在軍隊服役兩年,駐紮韓國。

退役後他留在韓國教英語,突然發現自己離開 CS 領域的這幾年間,太多的新技術新工具出現,自己的知識結構出現了斷層,無法支撐起一個工程師的職業生涯了。

於是他利用一切業餘時間,艱苦地學習 Perl、HTML、CSS(當時這還是新東西)、JavaScript 和 SQL。

圖片來源:量子位

終於在 2001 年,John 正式成為了一個網頁開發程序員,開始了 19 年的碼農生涯。

截止 2017 年,John 的職業生涯可謂十分成功:在大小公司都有過任職、組建管理過項目團隊、經營壯大過新創公司,自己還親自創辦了 3 家軟體公司,其中 2 家至今還在健康營運。

按照 John 自己的話說,這十幾年的工作經歷,將他鍛鍊成了一個合格的程序員、一個優秀的產品經理、一個 CEO、一個市場銷售。

但是他的目標不止於此。他的夢想是在 Google 任職軟體工程師,在充滿智慧和創造力的團隊裡提高自己。(我花了兩年,從不懂 Python 變成了 AI 工程師

圖片來源:量子位

最初他認為憑自己的工作經驗可以輕鬆獲得職位,但拿到了 Google 面試題他才發現自己欠缺太多。

一個優秀的軟體工程師應該精通數據結構和算法、匯編語言、內存設計等,還要綜合考慮代碼和程序結構對機器在應用場景下的影響。

於是他以這份 Google 試題為指導,開始了編程自學。

並且在 GitHub 上建立了「9894 項目」,因為 Google 建立與 1998 年 9 月 4 日。

後來這個項目改名為現在的「coding interview university」。

CS 自學三點注意事項

John 結合自己的學習經歷,給出了 3 點自學編程的建議。

一、早問早計畫,不要想當然

John 最大的教訓是自己花了太多時間學習根本用不上的東西,比如他曾經用了 3 周時間閱讀了 1000 多頁 C++ 的資料,但是最後面試和工作中用的卻是 Python。

這是 John 的算法學習資料,最後證明走了冤枉路,原因是他擔心面試時可能會被問到。
圖片來源:量子位

這個例子不是說 C++ 沒必要學。

而是強調你要提前收集信息做出計畫,在不同的專案上分配合理的學習時間,提高效率。切忌「我覺得……」

二、影片比看書效率更高

觀看影片的學習效率自然要比自己啃書快。

找到好的教學影片,意味著你有更多的時間實際演練編程題目。

圖片來源:量子位

三、反覆溫習十分重要

不斷反覆是形成記憶的關鍵,正如我們在上文提到的,John 推薦使用記憶卡。

他自己製作了 1792 個電子記憶卡。一有空閒時間就掏出來溫習,比如超市排隊時、公交車上等等。

對於一個卡片的的問題,回答正確還不夠,John 會在一段時間內多次回答正確才會標記為「已掌握」。

最終他沒有去 Google,而是接到了亞馬遜的 offer,現在他在亞馬遜做軟體工程師。

但是他自己說之前的學習經歷並不是無用功,現在他已經全面掌握了軟體工程的基本技能,無懼工作中的任何挑戰,並且實現自我飛躍的那一天越來越近。

而且 John 的經歷,也不侷限於程序員本身,對於更多人而言,也有值得參考之處。

他認定了一個目標,然後制定計畫、勤奮付出,最後天道酬勤獲得回報。

John 可能也是一個「一萬小時定律」的擁躉,但就算按照他每天 12 小時、堅持 8 個月(每月 31 天),他從一個網站前端到 AWS 技術專家,歷時也不過 2976 小時——遠未到 1 萬小時。

但就是這樣目標堅定的 8 個月,John 從入門到獲得大廠認可,百萬年薪加持。

外媒調查亞馬遜軟體工程師平均年薪超過百萬人民幣。
圖片來源:量子位

這是我們在 GitHub 看到最勵志的故事,也是我們希望讓更多人看到的原因,並且由衷希望更多人因為這樣的經歷和分享,創造屬於自己的故事。(矽谷科技巨頭 CEO 一年賺多少?這 10 位高薪代表了解一下

坊間笑談太多的「從入門到放棄」,但也有人「從入門到百萬年薪」。

生命不息,奮鬥不止,Keep walking!

GitHub 專案地址:https://github.com/jwasham/coding-interview-university
電子記憶卡專案地址:https://github.com/jwasham/computer-science-flash-cards

參考資料:freeCodeCamp

文:十三