1. 程式人生 > >如何才能成為一名谷歌工程師

如何才能成為一名谷歌工程師




#第一點:讓我們回到這個問題本身,也即是如何準備才能讓自己成為“優秀”的軟體工程師?

是的!這個問題的剩餘部分都是可選的。加入谷歌不是登月計劃。任何優秀的軟體工程師都有好機會成為谷歌工作文化的一部分。問題是你如何定義“優秀”。

**第二點:調整態度

在你給谷歌招聘人員留下深刻印象之前,讓我們來看看谷歌的軟體工程師這一角色是否是你真正想要的。

軟體工程師並不是像普遍觀念所說的那樣有趣。除了使用者介面和使用者體驗的職位,通常來說,不管你用什麼文字編輯器——Eclipse、Vim或者Emacs——你的螢幕將是黑的,無聊和枯燥的。全職的軟體工程師,不僅需要有從事複雜演算法的能力,還需要足夠的包容和耐心來一絲不苟地關注大型程式上的細節。

在谷歌,通常大多數軟體工程師的角色主要是處理數學問題。你掌握了多少種語言或者你把Java、C、C++等玩得多溜是無所謂的。

重要的是這個四個目標:

  • 你創造有效演算法的能力
  • 你閱讀別人寫的程式碼以及發現其中存在任何問題的細心品質
  • 你的學習和實現新技術趨勢並且適應需求的好奇心
  • 最後也是最重要的:你創造了什麼,如何創造的?

我必須之處要實現以上四個目標並不容易。我們大多數谷歌員工都有一段苦逼時間來達到這些目標,但是我們嘗試過,所以你也應該去嘗試。

每個人都有不同的學習方法。於我,我每天讀一篇我在Quora連結上找到的研究論文(可能和也可能不和電腦科學有關),一篇谷歌的研究文章(內部記錄)。

一旦你加入谷歌,將可以訪問所有的程式碼庫,資料庫,論壇,研究論文和一些能給你學習時提供巨大幫助而你卻無法在維基百科上找到的專案。但當你在為加入谷歌而準備路上時,有幾樣事情在學習的過程中很常見。在第五點中,你將會更多地瞭解到——怎樣來實現這四個目標——但在這之前有些前提還是需要看看的。所以,我們進入下一點吧。也即是:

#第三點: 2014年技術發展指南——來自谷歌

作為一個成功的軟體工程師,有著紮實的計算機基礎是很重要的。對於大學生,通過自我把握節奏地親身實踐學習,來專業性地或者非專業性地培養他們的技術能力,跟隨這份谷歌指南是一條建議路徑。

  • 請自己權衡使用這份指南
  • 這份指南之外可能也有你想學或者想做的其他東西——儘管去做吧!

**第四點:對專業性學習的建議

  • 電腦科學入門課程

注:電腦科學的入門課能提供程式設計的一些指導。

線上資源:

*譯者注:這些線上資源大都是英文授課,因此沒有翻譯課程名(下同),另外作為程式設計師英語必須得好啊,可以參看伯樂線上老碼農寫的《一文。

  • 至少用一種面向物件的程式語言寫程式碼:C++,Java,或者Python

初學者線上資源:

  • 學習其他程式語言

注:可以將這些語言加到你的倉庫裡:Java Script, CSS, HTML, Ruby, PHP, C, Perl, Shell. Lisp, Scheme.

  • 測試你的程式碼

注:學會如何跟蹤bugs,建立測試,並且破壞你的軟體

  • 培養邏輯思維和積累離散數學知識

線上資源:

譯者注:coursera課程大多都有中文字幕,對於學習語言門檻會降低,不過仍推薦學習原版課程。

  • 培養演算法和資料結構的深刻理解能力

注:瞭解一些基本資料型別(棧、佇列和包),排序演算法(快排、合併排序、堆排序)和資料結構(二分查詢、紅黑樹、雜湊表),大O表示法等

線上資源:

  • 培養對作業系統的深刻理解能力

*譯者注:這個連結是YouTube上的,國內有很多電驢的資源,親測可用(如果找不到可用連結,譯者可提供)

  • 學習人工智慧的知識

*譯者注:斯坦福Andrew Ng的這門機器學習課程強烈推薦,譯者也有大量該課程資源。

  • 學習如何構造編譯器

*譯者注:這門課程也是相當實用,最好跟著可能動手完成課程的編譯器專案。

  • 學習密碼學
  • 學習並行程式設計

**第五點:對非專業性學習建議

  • 參與課堂之外的專案

注:建立和維護一個網站,構建你自己的伺服器,或者做一個機器人。

  • 參與大系統(程式碼庫)中的小程式碼片段,閱讀和理解已有的程式碼,查文件並且跟蹤除錯。

注:用GitHub來閱讀別人的程式碼或者去貢獻一個專案是一種很好的方式。

線上資源:GithubKiln

  • 和其他程式設計師一起參與專案

注:這將會幫你提高在團隊工作的能力,也使你能夠向他人學習。

  • 鍛鍊你的演算法知識和程式設計能力

注:通過像CodeJam或者ACM ICPC這些程式設計競賽來鍛鍊你的演算法知識

*譯者注:國內有很多OJ也可以起到這個作用,比如POJ、九度等

  • 成為一個助教

注:幫助教其他學生將會有助於增加你在這個學科的知識

  • 軟體工程方面的實習經歷

注:確保你在實習招聘期來臨前申請了實習工作。在印度和美國,實習期在暑假,5至9月份,而申請通道通常提前幾個月就打開了。

#第六點:谷歌推薦/贊助的專案和團隊

在你興趣領域內,你可能選擇訂閱的課程很少。這些課程和專案是非常好的學習地方,但他們不會增加或減少你進谷歌的機會——他們不等於實習。(更多資訊來自Robert Love

這門自我把握節奏的線上課程是為任何想學習更多關於結構、視覺化、操作資料的人準備的。

這個為期兩天的互動會議將給一二年級的大學生提供一些關於谷歌文化和這家公司職業前景的介紹。

一個全球線上專案,提供給上完中學且年齡在18以上學生開發者津貼,讓他們為各種各樣的開源軟體專案寫程式碼。

這個專案提供學生在暑假期間為網際網路工作的機會和在公共利益組織上提出的技術政策。

*譯者注:這是Quora上Ellen Spertus對另一個問題(我是怎樣高效地利用大學最後兩年來為谷歌/Facebook或者初創企業的一個很好的軟體工程師職位做準備的)的回答。

**第七點:對數學課程的建議

(對準大學生而言)

個人觀點:任何忽視這些學科企圖將使你進入完全以錯誤方式學習的平庸程式設計師的範疇。之前準備的越充分就越使得寫程式碼越享受。這些是軟體工程的幾個前提,對軟體工程你需要去理解演算法的精髓。如果軟體工程師能夠回憶起學校裡學的簡單知識,大多數他們犯的錯誤本可以避免的。

在你深入學習數學或者電腦科學中,你將意識到你“大學本科時學過的資料結構”和“研究生時學過的機器學習”的重要性。因此,要想設計複雜的演算法,一下是你必須精通的課程清單。對於大學研究生,如果你忽視了這些學科,我強烈建議你應該你能做到的最好的方式去複習它們。

在你學習完學校課本上的介紹性大綱之後,練習下面的課程來加深理解吧。大多數大學生(甚至在職員工)低估了這些課程然後成為了另一類平庸的程式設計師;

  • 線性代數

學習這些會幫你理解後續的迴歸模型——機器學習基本的一步。任何學校、大學、研究室或者機構都不會教你這些線性代數課程。自己去學吧。

  • 微積分
  • 統計&概率

注:當你上大學和讀研究生時,大綱就會變成機器學習的演算法了。對於大多數大學生,機器學習課程的頭三個月裡數學使他們苦不堪言,而當他們好不容易趕上進度了,大綱又推進到更加機器學習複雜的領域,比如深度學習,神經網路和神經網路流處理。

#準大學生:谷歌推薦/贊助的專案

這個比賽為年齡在13至17歲的準大學生介紹了各種各樣使得開源軟體開發成為可能的貢獻。

谷歌RISE是一種對合夥人的獎勵,它獎勵旨在促進和支援為全世界的K12*小學生和中學生的STEM*以及計算機教育舉措的專案。

*K12,從幼兒園到12年級

*STEM,Science,Technology,Engineering,Math,科學、技術、工程、數學

這個專案使得來自不同社群的中學生可以接觸到STEM領域的大學和職業。

程式設計是種新能力-它承載著創造、創新和文明改造世界的潛能。這個舉措旨在激勵數以百萬計的女孩體驗程式碼的魔力。

這個為期一天的專案旨在為優秀的高年級中學生在上大學前提供有價值的商業技巧。

先驅者專案是一個全球性的網路,這裡聚集著領導者、倡導者和計算機教育大使,大使們負責讓全球的青年和教育工作者通過電腦科學被聯絡和激勵。

谷歌科技博覽會是對13到18歲青少年開放的全球性競賽。學生線上提交專案並得到贏得大獎的機會。

CSSI是一個為期三週的暑期專案,針對即將進入大學且對學習電腦科學感興趣的新生而設。

30天的DIY和製作活動。Maker Camp是一個在Google+上對所有人開放的免費虛擬暑期露營活動

在Google+ 上和老師、教育組織協作來為K12學生提供經驗性的學習機會。

相關推薦

如何才能成為工程師

#第一點:讓我們回到這個問題本身,也即是如何準備才能讓自己成為“優秀”的軟體工程師? 是的!這個問題的剩餘部分都是可選的。加入谷歌不是登月計劃。任何優秀的軟體工程師都有好機會成為谷歌工作文化的一部分。問題是你如何定義“優秀”。 **第二點:調整態度 在你給谷歌招聘人員留

如何才能成為大資料工程師

大資料是眼下非常時髦的技術名詞,與此同時自然也催生出了一些與大資料處理相關的職業,通過對資料的挖掘分析來影響企業的商業決策。 這群人在國外被叫做資料科學家(Data Scientist),這個頭銜最早由D.J.Pati和Jeff Hammerbacher於2008年提出,他們後來分別成為

如何才能成為Python web全棧工程師

在人工智慧大行其道的時代,許多開發者對Python這門程式語言都比較熟悉。但是如何用它實現一個企業級別的專案,可能許多同學還存在一些困難。本職業規劃路線是專門針對想要從事Python web開發的同學而準備的,並且是嚴格按照企業需求的標準定製的學習路線。路線中包含Python

成為大資料工程師,需要具備什麼技能?

經常看到近幾萬的朋友都在疑惑,學習Java應該選擇什麼發展方向,這個咱們在之前的文章中有提到過,Java發展在領域上有三個選擇方向: JavaEE,主要應用於企業級應用開發;安卓開發方向;嵌入式應用開發方向。在此建議大家選擇JavaEE方向,因為應用非常廣泛,崗位設定也比較多。 但我們從來沒

怎樣才能成為合格的資料分析師?

首先我們需要明白為什麼要做資料分析師: 在通訊、網際網路、金融等這些行業每天產生巨大的資料量(長期更是積累了大量豐富的資料,比如客戶交易資料等等),據說到2020年,全球每年產生的資料量達到3500萬億GB;海量的歷史資料是否有價值,是否可以利用為領導決策提供參考依據?隨著

阿里P7工程師封遲到的年終總結:告訴你如何成為優秀軟體工程師

文 / 阿里P7資深工程師   嚴明明在收到嚴明明這封總結信的時候,此時已是櫻花飄盡的四月天。這封總結信的標題是:二零一七年,我的失敗與偉大當我認真讀完這篇來自阿里P7資深工程師的2017年度總結後,我

如何才能成為優秀的架構師

對於工作多年的程式設計師而言,日後的職業發展無非是繼續專精技術、轉型管理和晉升架構師三種選擇。那麼程式設計師如何才能晉升為優秀的高薪架構師? 優秀架構師需要具備怎樣的素質 擔任全棧技術架構師三年的劉先生表示:「架構師雖然經常需要做一些分工的工作,涉及到一些管理層面

成為軟體測試工程師必備的技能,除了技術還需天賦。。。

通用技能上: 1.基本計算機知識(作業系統,資料庫,通訊協議原理,熟悉至少一門程式語言) 2.基本軟體測試知識(各種測試理論,測試方法論,測試用例編寫,缺陷界定標準,軟體質量評估) 3.簡單專案管理知識 產品、系統認知: 1.熟悉所測產品功能,能夠將產品文件內描述的UC轉化成TC,這個最最基本 2.熟悉所測產

如何成為無人駕駛工程師

作者 | 劉少山 無人駕駛作為一項新興技術,落地為產品需要大量演算法、工程、產品貫通的AI全棧人才。筆者在最近一年招聘中發現,許多技術方向的同學對人工智慧既愛又畏懼,一方面覺得這是未來,另一方面又覺得很難而不敢觸碰。懂工程的同學做演算法時有很大的畏懼感,而專注演算法的同學又常常容易陷入某個演算法而缺

如何成為區塊鏈工程師

轉自:http://blog.csdn.net/blockchain_lemon/article/details/79447639春節前後,區塊鏈再次刷爆我們的朋友圈,關注區塊鏈的人正在以幾何數集上升。大潮來臨,一切都不同了,身懷絕技的程式設計師有了大展巨集圖的歷史性機會,程

如何安排自己大學階段的學習才能成為優秀的 Quant?

首先需要了解一下量化交易需要什麼知識儲備?主要是三類知識:數學,金融,計算機。其中,金融知識需要寬客瞭解各種金融資產的性質和交易規則,數學模型負責在這樣給定的規則系統下探尋獲取超額收益的機會,而計算機程式設計能力使得這樣的投資模型得以自動化實現。計算機知識國內研究的主流語言是

成為合格軟體工程師的7點建議

在過去5年多的時間裡,我在科技初創公司中任職過不同崗位,也在學術界短暫工作過。在這些不同角色中我學到了一個觀點。我慢慢意識到一些原以為無關緊要的事情的重要性。這篇文章是根據我的個人經驗,針對剛入行的年輕工程師的一些建議。 第一印象很重要 一份新工作要有一

如何成為區塊鏈工程師?附學習資源

春節前後,區塊鏈再次刷爆我們的朋友圈,關注區塊鏈的人正在以幾何數集上升。大潮來臨,一切都不同了,身懷絕技的程式設計師有了大展巨集圖的歷史性機會,程式設計師們,是時候,毅然決然,懂點區塊鏈技術了。 本文列舉了關於區塊鏈和數字加密技術的文章和資源,分為以下幾個部分

成為高階java工程師需要讀那些書

“學習的最好途徑就是看書“,這是我自己學習並且小有了一定的積累之後的第一體會。個人認為看書有兩點好處: 1.能出版出來的書一定是經過反覆的思考、雕琢和稽核的,因此從專業性的角度來說,一本好書的價值遠超其他資料 2.對著書上的程式碼自己敲的時候方便 “看完書之後再次

乾貨 | 成為推薦系統工程師永遠都不晚

作者 | 陳開江 責編 | 何永燦 推薦系統工程師技能樹 掌握核心原理的技能 數學:微積分,統計學,線性代數  周邊學科:資訊理論基礎  推薦演算法:CF,LR,SVM,FM,FTRL,GBDT,RF,SVD,RBM,RNN,LSTM,RL  資料探勘:分類,聚類,迴歸,降維

怎樣才能成為插畫師?成為插畫師我們該怎麼做?

  怎樣成為一名插畫師?怎樣才能成為一名插畫師?成為一名插畫師有哪些技巧?插畫師是一個吸金又吸睛的職業,插畫師的工作面

如何成為全棧工程師

我是學計算機專業的, 在剛大學的時候,還不知道什麼是全棧,反正什麼都學。我大學關於程式設計學的課 程有c、彙編、linux、JavaSE、嵌入式等; 我一直對c++很憧憬,覺得學c++都大神,在大三的時候,要三選一:c++ 、c#,、Java。不過我報課的時 候網速不行,沒報上c++,報上了java。那時候

如何快速成為Linux運維工程師

linux 安全 如今的互聯網,絕大多數的網站、服務、遊戲均是跑在Linux上面的,雖說Linux發行版眾多,只要玩熟了一種發行版,了解了Linux精髓、基本架構、設計原理,其他都是觸類旁通的,千萬不要在選擇哪一發行版而浪費很多時間,不值當的,這就如同我是上清華好,還是上北大好呢?統稱為[清北謎題]了

如何成為優秀的Web前端工程師?

功能 des 更新 高性能 yahoo 建議 策劃 兼容 推薦 何為:前端工程師? 前端工程師,也叫Web前端開發工程師。他是隨著web發展,細分出來的行業。Web前端開發技術主要包括三個要素:HTML、CSS和JavaScript!它要求前端開發工程師不僅要掌握基本的We