成為谷歌程序員,你需要準備什麼?
作者:Gaurav Jha
譯者:伯樂在線 - 青勁草
鏈接:http://blog.jobbole.com/79736/
【伯樂在線導讀】:本文源自 Quora 同名問答貼。Google 程序員 Gaurav Jha 的回答獲得了 8000+ 頂。他從谷歌員工角度給出了 6 個重要的建議,並且推薦了很多學習資源。數學是成就卓越開發人員的必備技能,文章最後一部分是為準程序員推薦的數學課程。
谷歌員工眼中的 6 個關鍵點
在我向你提供課程列表前,先讀第一二點
全職工作人員——基於你的行業經驗和學術背景去選擇性的看待這個回答
准大學生——請直接跳到第七點
標記說明:
# 可選的
**必須的
#第一點:讓我們回到這個問題本身,也即是如何準備才能讓自己成為「優秀」的軟體工程師?
是的!這個問題的剩餘部分都是可選的。加入谷歌不是登月計劃。任何優秀的軟體工程師都有好機會成為谷歌工作文化的一部分。問題是你如何定義「優秀」。
**第二點:調整態度
在你給谷歌招聘人員留下深刻印象之前,讓我們來看看谷歌的軟體工程師這一角色是否是你真正想要的。
軟體工程師並不是像普遍觀念所說的那樣有趣。除了用戶界面和用戶體驗的職位,通常來說,不管你用什麼文字編輯器——Eclipse、Vim或者Emacs——你的屏幕將是黑的,無聊和枯燥的。全職的軟體工程師,不僅需要有從事複雜演算法的能力,還需要足夠的包容和耐心來一絲不苟地關注大型程序上的細節。
在谷歌,通常大多數軟體工程師的角色主要是處理數學問題。你掌握了多少種語言或者你把Java、C、C++等玩得多溜是無所謂的。
重要的是這個四個目標:
你創造有效演算法的能力
你閱讀別人寫的代碼以及發現其中存在任何問題的細心品質
你的學習和實現新技術趨勢並且適應需求的好奇心
最後也是最重要的:你創造了什麼,如何創造的?
我必須之處要實現以上四個目標並不容易。我們大多數谷歌員工都有一段苦逼時間來達到這些目標,但是我們嘗試過,所以你也應該去嘗試。
每個人都有不同的學習方法。於我,我每天讀一篇我在Quora鏈接上找到的研究論文(可能和也可能不和計算機科學有關),一篇谷歌的研究文章(內部記錄)。
一旦你加入谷歌,將可以訪問所有的代碼庫,資料庫,論壇,研究論文和一些能給你學習時提供巨大幫助而你卻無法在維基百科上找到的項目。但當你在為加入谷歌而準備路上時,有幾樣事情在學習的過程中很常見。在第五點中,你將會更多地了解到——怎樣來實現這四個目標——但在這之前有些前提還是需要看看的。所以,我們進入下一點吧。也即是:
#第三點: 2014年技術發展指南——來自谷歌
作為一個成功的軟體工程師,有著紮實的計算機基礎是很重要的。對於大學生,通過自我把握節奏地親身實踐學習,來專業性地或者非專業性地培養他們的技術能力,跟隨這份谷歌指南是一條建議路徑。
請自己權衡使用這份指南
這份指南之外可能也有你想學或者想做的其他東西——儘管去做吧!
**第四點:對專業性學習的建議
計算機科學入門課程
註:計算機科學的入門課能提供編程的一些指導。
在線資源:
Udacity – intro to CS course,
Coursera – Computer Science 101
*譯者註:這些在線資源大都是英文授課,因此沒有翻譯課程名(下同),另外作為程序員英語必須得好啊,可以參看伯樂在線老碼農寫的《老碼農教你學英語》一文。
至少用一種面向對象的編程語言寫代碼:C++,Java,或者Python
初學者在線資源:
Coursera – Learn to Program: The Fundamentals,
MIT Intro to Programming in Java,
Google』s Python Class,
Coursera – Introduction to Python,
Python Open Source E-BookIntermediate Online Resources:
Udacity』s Design of Computer Programs,
Coursera – Learn to Program: Crafting Quality Code,
Coursera – Programming Languages,
Brown University – Introduction to Programming Languages
學習其他編程語言
註:可以將這些語言加到你的倉庫里:Java Script, CSS, HTML, Ruby, PHP, C, Perl, Shell. Lisp, Scheme.
在線資源:w3school.com – HTML教程*, Learn to code
測試你的代碼
註:學會如何跟蹤bugs,創建測試,並且破壞你的軟體
在線資源: Udacity – Software Testing Methods, Udacity – Software Debugging
培養邏輯思維和積累離散數學知識
在線資源:
MIT Mathematics for Computer Science,
Coursera – Introduction to Logic,
Coursera – Linear and Discrete Optimization,
Coursera – Probabilistic Graphical Models,
Coursera – Game Theory.
譯者註:coursera課程大多都有中文字幕,對於學習語言門檻會降低,不過仍推薦學習原版課程。
培養演算法和數據結構的深刻理解能力
註:了解一些基本數據類型(棧、隊列和包),排序演算法(快排、合并排序、堆排序)和數據結構(二分查找、紅黑樹、哈希表),大O表示法等
在線資源:
MIT Introduction to Algorithms,
Coursera – Introduction to Algorithms Part 1 & Part 2,
Wikipedia - List of Algorithms,
Wikipedia - List of Data Structures,
Book: The Algorithm Design Manual
培養對操作系統的深刻理解能力
在線資源:UC Berkeley Computer Science 162*
*譯者註:這個鏈接是YouTube上的,國內有很多電驢的資源,親測可用(如果找不到可用鏈接,譯者可提供)
學習人工智慧的知識
在線資源:Stanford University - Introduction to Robotics, Natural Language Processing, Machine Learning*
*譯者註:斯坦福Andrew Ng的這門機器學習課程強烈推薦,譯者也有大量該課程資源。
學習如何構造編譯器
在線資源:Coursera – Compilers*
*譯者註:這門課程也是相當實用,最好跟著可能動手完成課程的編譯器項目。
學習密碼學
在線資源:Coursera – Cryptography, Udacity – Applied Cryptography
學習並行編程
在線資源:Coursera – Heterogeneous Parallel Programming
**第五點:對非專業性學習建議
參與課堂之外的項目
註:創建和維護一個網站,構建你自己的伺服器,或者做一個機器人。
在線資源:Apache List of Projects, Google Summer of Code,Google Developer Group
參與大系統(代碼庫)中的小代碼片段,閱讀和理解已有的代碼,查文檔並且跟蹤調試。
註:用GitHub來閱讀別人的代碼或者去貢獻一個項目是一種很好的方式。
在線資源:Github, Kiln
和其他程序員一起參與項目
註:這將會幫你提高在團隊工作的能力,也使你能夠向他人學習。
鍛煉你的演算法知識和編程能力
註:通過像CodeJam或者ACM ICPC這些編程競賽來鍛煉你的演算法知識
在線資源:CodeJam, ACM ICPC*
*譯者註:國內有很多OJ也可以起到這個作用,比如POJ、九度等
成為一個助教
註:幫助教其他學生將會有助於增加你在這個學科的知識
軟體工程方面的實習經歷
註:確保你在實習招聘期來臨前申請了實習工作。在印度和美國,實習期在暑假,5至9月份,而申請通道通常提前幾個月就打開了。
在線資源:google.com/jobs
#第六點:谷歌推薦/贊助的項目和團隊
在你興趣領域內,你可能選擇訂閱的課程很少。這些課程和項目是非常好的學習地方,但他們不會增加或減少你進谷歌的機會——他們不等於實習。(更多信息來自 Robert Love)
1.谷歌課程——Making Sense of Data
點擊展開全文
※應用Java最廣泛的十個領域,你知道幾個?
※程序員遇到Bug時的30個反應
※資深程序員是如何用五年時間攢夠100萬的
※請用一句話證明你不是假的程序員!
※當寫爛代碼的人離職之後…
TAG:程序員之家 |
※程序員為什麼需要框架?
※兩次轉行,我為什麼要做程序員?
※你需要程序員鼓勵師嗎?
※身為程序員,你接過最奇葩的需求是什麼?
※程序員,除了代碼你還需要懂得這些!
※代碼都智能自動生成了,還要程序員幹嘛?
※為什麼你的小程序不能賺錢?
※程序員為什麼更容易脫髮?
※打開宿舍門,就知道他們是什麼專業,那程序員是要表演脫髮?
※程序員這麼多,你還能找到工作嗎?
※為什麼要做小程序
※作為程序員,你正處於一個什麼水平?
※「一直不明白,程序員為什麼要加班。」
※小程序是什麼?
※小程序是什麼?
※這遊戲的策劃是要瘋了嗎?不但要玩死自己還把程序員逼成禿頂
※「無代碼」來了,還要程序員幹嘛?
※小程序是靠什麼煉成的?
※除了高薪,你還有什麼理由堅持做程序員?
※神回復:為什麼程序員怕改需求?