在我給妳提供壹份課程清單之前,請先閱讀第壹點或第二點。
全職人員——根據妳的行業經驗和學術背景有選擇地看看這個答案。
準大學生——請跳到第七點。
標簽描述:
#可選
* *必須的。
# 1:讓我們回到問題本身,即如何準備成為壹名“優秀”的軟件工程師?
是啊!這個問題的其余部分是可選的。加入谷歌不是登月計劃。任何優秀的軟件工程師都有很好的機會成為谷歌工作文化的壹部分。問題是妳怎麽定義“優秀”。
* *要點二:調整心態。
在妳給谷歌招聘人員留下深刻印象之前,讓我們看看谷歌的軟件工程師這個角色是不是妳真正想要的。
軟件工程師並沒有壹般想法說的那麽有趣。除了用戶界面和用戶體驗的位置,壹般來說,無論妳用什麽文本編輯器——Eclipse、Vim還是Emacs——妳的屏幕都會黑屏、枯燥、無趣。全職軟件工程師不僅需要從事復雜算法的能力,還需要足夠的寬容和耐心,對大型程序的細節給予壹絲不茍的關註。
在谷歌,大多數軟件工程師的角色通常是處理數學問題。不管妳精通多少門語言,也不管妳的Java、C、C++玩得有多好。
重要的是這四個目標:
妳創造有效算法的能力
妳仔細閱讀別人的代碼,並從中發現任何問題。
您學習和了解新技術趨勢並適應需求的好奇心。
最後但同樣重要的是:妳創造了什麽,妳是如何創造的?
我必須指出,實現上述四個目標並不容易。我們大多數谷歌員工都很難實現這些目標,但我們已經努力了,所以妳也應該努力。
每個人的學習方法都不壹樣。對於我來說,我每天都會閱讀壹篇在Quora link上找到的研究論文(可能與計算機科學有關,也可能無關)和壹篇Google的研究文章(內部記錄)。
壹旦妳加入谷歌,妳將可以訪問所有的代碼庫、數據庫、論壇、研究論文和壹些對妳的研究有很大幫助但妳在維基百科上找不到的項目。但是當妳準備加入Google的時候,有幾件事是在學習的過程中常見的。在第五點中,妳會學到更多——如何實現這四個目標——但在此之前,還需要看到壹些前提。那麽,我們來看下壹點。那就是:
# 3: 2014技術開發指南-來自谷歌
作為壹名成功的軟件工程師,紮實的計算機基礎非常重要。對於大學生來說,通過按照自己的進度親自實踐和學習,這是壹條培養他們專業或非專業技能的建議途徑。
請自行權衡本指南的用途。
除了這個指南之外,妳可能還有其他想學或想做的事情——去做吧!
* *要點四:專業學習建議。
計算機科學導論課程
註意:計算機科學的入門課程可以提供壹些編程的指導。
在線資源:
uda city–CS課程簡介,
Coursera計算機科學101
*譯者註:這些在線資源大部分是英文授課,所以沒有課程名稱的翻譯(下同)。另外,作為程序員,壹定要學好英語。請參考伯樂在線寫的《老碼農教妳學英語》壹文。
至少用壹種面向對象的編程語言編寫代碼:C++、Java或Python。
面向初學者的在線資源:
coursera——學習編程:基礎知識,
麻省理工學院Java編程入門,
谷歌的Python類,
coursera——Python簡介,
Python開源電子書中介在線資源:
Udacity的電腦程序設計,
coursera——學習編程:編寫高質量的代碼,
coursera–編程語言,
布朗大學——編程語言介紹
學習其他編程語言
註意:您可以將這些語言添加到您的存儲庫中:Javascript、CSS、HTML、Ruby、PHP、C、Perl、shell.lisp、Scheme。
在線資源:w3school . com–HTML教程*,?學習編碼
測試您的代碼。
註意:學習如何跟蹤bug,創建測試,以及破壞妳的軟件。
在線資源:?軟件測試方法?uda city–軟件調試
培養邏輯思維,積累離散數學知識
在線資源:
麻省理工學院計算機科學數學,
coursera——邏輯入門,
coursera–線性和離散優化,
coursera–概率圖形模型,
Coursera博弈論。
譯者註:coursera課程大多有中文字幕,會降低學習語言的門檻,但還是建議學習原版課程。
培養對算法和數據結構的深刻理解。
註:了解壹些基本的數據類型(棧、隊列和包)、排序算法(快速排序、歸並排序和堆排序)和數據結構(二分搜索法、紅黑樹和哈希表)、大O表示等。
在線資源:
麻省理工學院算法導論,
coursera——算法入門?零件1?& amp?第二部分,
維基百科-?算法列表,
維基百科-?數據結構列表,
書:?算法設計手冊
培養對操作系統的深刻理解
在線資源:加州大學伯克利分校計算機科學162 *
*譯者註:這個鏈接在YouTube上,國內有很多電驢的資源,所以親測可用(如果沒有鏈接,譯者可以提供)。
學習人工智能的知識。
在線資源:斯坦福大學-機器人導論,?自然語言處理?機器學習*
*譯者註:斯坦福大學的吳恩達強烈推薦這門機器學習課程,譯者也有很多這門課程的資源。
學習如何構造編譯器。
在線資源:coursera–編譯器*
*譯者註:這門課也挺實用的,最好跟著可能手工完成課程的編譯器項目走。
學習密碼學
在線資源:coursera——密碼學。uda city–應用密碼學
學習並行編程
在線資源:coursera——異構並行編程
* *第五點:對非專業學習的建議
參與課外項目。
註:創建和維護壹個網站,建立自己的服務器,或者是壹個機器人。
在線資源:Apache項目列表,Google代碼之夏,Google開發者小組
參與大系統(代碼庫)中的小代碼片段,閱讀理解已有代碼,查看文檔,跟蹤調試。
註意:使用GitHub閱讀別人的代碼或者為壹個項目做貢獻是壹個很好的方法。
在線資源:Github,?爐
與其他程序員壹起參與項目。
註:這將有助於妳提高團隊工作能力,並使妳能夠向他人學習。
鍛煉妳的算法知識和編程能力。
註意:通過CodeJam或ACM ICPC這樣的編程競賽來鍛煉妳的算法知識。
在線資源:?CodeJam,?ICPC ACM *
*譯者註:中國有很多OJ也可以扮演這個角色,比如POJ、九都。
成為助教
註意:幫助教授其他學生將有助於增加妳在這方面的知識。
軟件工程實習經歷
註意:壹定要在實習招聘期到來之前申請實習。在印度和美國,實習期在暑假,從5月到9月,申請通道壹般提前幾個月開啟。
在線資源:google.com/jobs.
# 6:谷歌推薦/贊助的項目和團隊
在妳感興趣的領域,妳可以選擇訂閱的課程很少。這些課程和項目是非常好的學習場所,但不會增加或減少妳進入谷歌的機會——不等於實習。(更多信息來自?羅伯特·拉芙)
谷歌課程——理解數據
這是壹門自定進度的在線課程,面向任何想要學習更多關於數據的結構、可視化和操作的人。
2.?谷歌課程-大膽的發現
這個為期兩天的互動會議將為大壹和大二學生提供壹些關於谷歌文化和公司職業前景的信息。
3.?谷歌編程之夏
壹個全球性的在線項目,給讀完高中,18以上的學生提供開發者補貼,讓他們為各種開源軟件項目寫代碼。
4.?谷歌獎學金政策
這個項目為學生提供了在暑假期間為互聯網和公益組織提出的技術政策工作的機會。
5.?谷歌學生退伍軍人峰會
谷歌學生退伍軍人峰會包括退伍軍人適應工作環境的職業培訓課程。另見:Ellen Spertus?妳在線嗎?我如何有效地利用大學的最後兩年,為在Google/FB或壹家初創公司獲得壹份出色的軟件工程工作做準備?*
*譯者註:這是Ellen Spertus在Quora上對另壹個問題的回答(我是如何高效利用大學的最後兩年,為在谷歌/臉書或初創公司獲得壹個好的軟件工程師職位做準備的)。
* *第七點:關於數學課程的建議
(針對大學生)
個人觀點:任何試圖忽略這些科目的行為都會把妳歸入完全用錯誤方法學習的平庸程序員壹類。之前準備的越充分,寫代碼就越享受。以上是軟件工程的幾個前提,妳需要了解軟件工程的算法本質。如果軟件工程師能夠回憶起他們在學校學到的簡單知識,他們的大多數錯誤都是可以避免的。
在妳對數學或計算機科學的深入學習中,妳會意識到“妳本科學的數據結構”和“妳研究生學的機器學習”的重要性。所以,如果妳想設計復雜的算法,這裏列出了妳必須掌握的課程。對於大學研究生來說,如果妳忽略了這些科目,我強烈建議妳用最好的方式復習。
在妳學習了學校課本上的入門大綱之後,練習下面的課程來加深妳的理解。大部分大學生(甚至是員工)都低估了這些課程,然後成為另壹種平庸的程序員;
線性代數
1.?線性代數|數學| MIT開放式課件?(我推薦的)
2.?矩陣編碼:通過計算機科學應用的線性代數?(同事推薦)
學習這些有助於妳理解後續的回歸模型——機器學習的基本步驟。沒有學校、大學、研究實驗室或者機構會教妳這些線性代數課程。自己學。
結石
1.?微積分1?–俄亥俄州立大學
2.?微積分先修課程?–巴塞羅那自治大學
3.?初學者和藝術家的微積分?麻省理工學院
統計&;概率;可能性
註:等妳上了大學讀研,大綱就會變成機器學習的壹個算法。對於大多數大學生來說,在機器學習課程的前三個月,數學讓他們苦不堪言,當他們終於趕上進度時,大綱就推廣到機器學習更復雜的領域,如深度學習、神經網絡和神經網絡流處理。
#準大學生:谷歌推薦/贊助的項目
谷歌的編碼項目(GCI)
這個比賽介紹了各種貢獻,使開源軟件開發成為可能的準大學生從13到17。
增加獎金
Google RISE是對合作夥伴的獎勵,獎勵旨在促進和支持STEM*和計算機教育倡議的項目,面向全球的K12*中小學生。
*K12,從幼兒園到年級12。
*STEM,科學,技術,工程,數學,科學,技術,工程,數學。
前沿計算機科學研究所
該項目使來自不同社區的中學生能夠接觸STEM領域的大學和職業。
用代碼創建
編程是壹種新的能力——它承載著創造、創新和文明改造世界的潛力。這壹舉措旨在激勵數百萬女孩體驗代碼的魔力。
高中座談會
這個為期壹天的項目旨在為優秀的高中生在上大學之前提供寶貴的商業技能。
先驅
先鋒計劃是壹個全球性的網絡,領導者,倡導者和計算機教育大使聚集在壹起。大使負責通過計算機科學聯系和激勵世界各地的年輕人和教育工作者。
谷歌科技博覽會
谷歌科技博覽會是壹項面向13至18歲年輕人開放的全球競賽。學生在線提交項目,有機會獲得大獎。
計算機科學暑期學院(CSSI)
CSSI是壹個為期三周的暑期項目,面向即將進入大學並對學習計算機科學感興趣的新生。
Google+露營項目
30天的DIY和制作活動。創客營是Google+上面向所有人開放的免費虛擬夏令營活動。
互聯課堂
與Google+上的老師和教育機構合作,為K12學生提供體驗式學習機會。
參考:
/79736/