GitHub上最勵志的計算機自學教程:8個月,從中年Web前端到亞馬遜百萬年薪軟件工程師

谷歌工程師條件:名校出身、CS專業背景、博士學位加持,技術過硬?

國外一個叫John Washam的小哥告訴你:不用,自學8個月也可以!

John Washam勵志要成爲一名谷歌軟件工程師,但沒有CS專業背景的他,只能通過自己的努力來達成理想。

於是,8個月的時間裏,小哥花了數千小時閱讀書籍、編寫代碼、觀看CS技術講座,一路披荊斬棘、打怪升級。

最終,雖然沒有去谷歌,但他人到中年,還順利成爲了一名亞馬遜AWS的技術專家,年薪百萬。

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

正如他所說:

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

PS:教程有中文版哦~~

GitHub超10萬星自學寶典

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

小哥最初的目的是“考上”谷歌,於是每天自學8-12個小時,堅持了8月有餘。邊學還順手整理出了這份自學項目。

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

Washam表示:

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

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

選擇語言、必備知識資源

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

接着開始學習計算機硬件知識:

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

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

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

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

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

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

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

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

Google面試注意事項

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

這位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、一個市場銷售。

但是他的目標不止於此。他的夢想是在谷歌任職軟件工程師,在充滿智慧和創造力的團隊裏提高自己。

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

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

於是他以這份谷歌試題爲指導,開始了編程自學。

並且在github上建立了「9894項目」,因爲谷歌建立與1998年9月4日。

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

CS自學三點注意事項

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

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

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

這是John的算法學習資料,最後證明走了冤枉路

原因是他擔心面試時可能會被問到。

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

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

二、視頻比看書效率更高

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

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

三、反覆溫習十分重要

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

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

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

最終這位小哥沒有去谷歌,而是接到了亞馬遜的offer,現在他在亞馬遜做軟件工程師。

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

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

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

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

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

外媒調查亞馬遜軟件工程師平均年薪超過百萬人民幣

這是我們在GitHub看到最勵志的故事,也是我們希望讓更多人看到的原因,並且由衷希望更多人因爲這樣的經歷和分享,創造屬於自己的故事。

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

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

學習是一個艱苦的過程,當然如果能把技術學成,最後也一定可以獲得高薪工作。掌握一個好的學習方法,跟對一個學習的人非常重要。今後要是大家有啥問題,可以隨時來問我,能幫助別人學習解決問題,對於自己也是一個提升的過程。自己整理了一份2019最全面前端學習資料,從最基礎的HTML+CSS+JS到HTML5的項目實戰的學習資料都有整理這是我的前端技術交流羣518672693有問題隨時在裏面問我,能給大家提出很多寶貴建議。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章