堅持程式設計
伯樂線上注:這篇譯文來自譯者 Wilson Wen 的郵件投稿(英文原文,譯文原文)。如果其他朋友也有不錯的原創或譯文,可以嘗試推薦給我們。以下是譯文。
—————————–
說實話,你是一位優秀的工程師候選人嗎?你怎麼評價自己?你面試過多少家公司?你拿到offer的比率是多少?試一下用以下的公式來計算。
1
2
3
4
|
x
= number of companies interviewed with onsite y
= number of offers received value
= 100 * log (x)
* y / x |
如果你的計算結果小於90,請仔細閱讀這篇文章;如果大於120,那你並不需要這篇文章。
我是誰?
我沒有高中學歷。我19歲從芝加哥前往南加州開始程式設計。我把所有東西裝進了我的轎車裡,身上只有400美金和一個offer,4萬美金年薪的初級程式設計師。那是在12年前,當然又是另外一個故事了。
從那以後,我曾在 Double Helix、 Namco Bandai、 Google、Obvious 和 Square等公司工作過。也收到過來自Naughty Dog、 Activision、 Riot Games、 Blizzard、 Pinterest、 Goldman Sachs 等公司的offer。正由於此,用前面提到的公司算出我的得分是132。
我至少面試過500位工程師求職者,他們之中大概10%會收到offer,3%我認為是”搖滾明星(rockstar)”型別的求職者,他們留給我的印象尤為深刻。
我想告訴你,絕對沒有萬無一失的方法保證你被錄用。因為這裡面存在太多的不確定因素,特別是像Google這樣的公司,你將會面對5-7個隨機挑選 出來的工程師,他們會選擇一套他們認為合適的問題來進行面試,通常會包括“白板編碼”。但是有一些工程師是很差勁的面試官,他們會問一些不公平的問題並作 出武斷的判斷。但是沒關係,這對我們來說正好,因為求職者通常會允許搞砸多輪面試中的其中一輪。
我可以做的就是告訴你怎樣做好充分的準備,下面是我提供的一些建議:
技術建議:
1. 堅持程式設計:
很簡單,程式寫得越多,你的收穫越多。通過程式設計,你不斷的練習。不過,最好的練習是有目標的練習。在腦海裡有一個目標,開拓新的領域,和挑戰自我。經過一段時間後,你需要給你完成的和未完成的專案建立一個主頁。Github是一個非常好的用來建立專案主頁的地方。
2. 掌握至少一門程式語言
掌握一門程式語言會讓你擁有敏銳的洞察力。為此,你必須編寫大量的程式碼,閱讀大量的程式碼,同時要學習程式碼裡的最佳實踐。理論上,一門語言會有一個很活躍的社群,和大量的產品程式碼提供學習。可選的程式語言包括C#、C++、java、PHP、Python和Ruby。
在C++面試裡,有一個經常被問到的問題:“你給自己的C++知識打多少分,從1分到10分?”。我非常厭惡這樣的問題。願上帝幫助那些給自己打了 9-10分的人,因為他們很快會露出馬腳。Bjourne Stroustrap給自己打了8分或者更少。這門語言真的太複雜,太豐富,而且隨著時間的過去,演進了太多次。離題了:)。
3. 理解複雜度
閱讀這篇文章( Read this cheat sheet)。 明確自己清楚複雜度的含義。然後實現一些常用的演算法,比如Dijkstra’s, Floyd-Warshall, Traveling Salesman, A*, bloom filter, breadth-first iterative search, binary search, k-way merge, bubble/selection/insertion sort, in-place quick sort, bucket/radix sort, closest pair 等。再次重複,堅持程式設計!
4. 重複發明輪子
你應該使用你常用的語言來實現一些常用的資料結構。不要依賴於庫。實現以下的資料結構併為其編寫測試用例:vector (dynamic array), linked list, stack, queue, circular queue, hash map, set, priority queue, binary search tree 等。你應該能夠很快的編寫完成。
5. 解決問題
不要在google上這樣搜尋 like this。這都是一些基礎的程式設計概念。你要做的是,至少花費40小時編寫解決各種問題的程式碼。其中最好的資源是TopCoder(Read this),然後嘗試去解決更多的問題。挑一些問題來測試你實現recursive, pattern-matching, greedy, dynamic programming, and graph problems的能力。瀏覽一下這些歸檔的問題(archived problems)。
這或許是我被Google聘請的首要原因,我有2個星期的時間沉迷在Topcode裡。在那以後,我可以在閉上眼睛綁起一條手臂的情況下,編好 Dijkstra演算法。我可以解決幾乎所有的和圖相關的問題。這都是在重複解答問題的步驟而已。Eric Schmidt說過“重複並不會使得祈禱沒有意義”。
6. 使程式設計簡單
至少,使其看起來更加簡單。隨著時間的過去,我瞭解到,程式設計是工程師工作中最直接和最簡單的部分。我常常用一個片語“a simple matter of programming”,因為我相信更復雜的部分是在程式設計之前和之後。例如,設計好你所要編寫的程式碼和確保你編寫的程式碼能夠釋出。讓你的面試官瞭解你清 楚的知道,程式設計只是到達目的的一種手段。
注意,在別人面前編碼可能會讓你感到害怕。自己找方法去練習白板程式設計和結對程式設計。Google基本上都是白板程式設計,而Square都是結對程式設計。我的朋友和同時Dan寫了一篇關於這個的文章( Read this)。
其他建議:
在這裡,我不能自稱專家。事實上,有些人會說我甚至不善於和別人相處。但是我還是應該說一些非技術的建議,其中有一些還是非常明顯的。
1 知道為什麼你在那裡
如果你在面試一家公司的時候,完全不明白為什麼他們在這,他們是誰,他們在做什麼,那麼請不要去面試。
2 激情
如果你不在意,那麼其他人也不會。對某些事情充滿激情。可能是程式設計,或者別的。你會熱衷於利用業餘時間編寫一個編譯器嗎?你會自己動手製造一個遙控直升機嗎?只要你有激情,都沒關係,你會使其變得有趣。
3 不要做任何假設
如果不確定,就詢問。如果他們問了你一個問題,你不是100%的肯定問題是什麼,那麼請他們再問一次。我見過許許多多的求職者從不詢問任何問題,結果浪費大量時間解答了錯的問題。
4 微笑
興奮,開心和積極。但不要過度。正如我前面提到的,人們會作出快速的判斷。確保你留給別人的第一印象是好的。微笑是能夠傳染的,我常常帶著糟糕的心情走進面試的房間,但是求職者一個合適的微笑會讓我快速的恢復過來。
正如我之前所說,沒有銀彈能夠讓你被僱傭。但是,作為一個工程師,你能盡你最大努力做的是 ABC: Always Be Coding. – 堅持程式設計。
*Today, I work for myself. Building something new. 如今,我為自己代言。要做些新東西。
相關文章
- 我的iOS高效程式設計祕訣-堅持程式設計習慣iOS程式設計
- TGDC | 一個遊戲程式設計師的堅持 —— 論向量化程式設計遊戲程式設計師
- 程式設計師 為什麼要堅持寫部落格程式設計師
- 風變程式設計:互動式學習,更容易堅持!程式設計
- 堅持程式設計:如何找到一份工程師工作程式設計工程師
- 談談小城市程式設計師的迷茫和堅持程式設計師
- 程式設計師十誡:第九誡:不可不堅持學習程式設計師
- 程式設計師的燈下黑:堅持和良好心態近乎道程式設計師
- 程式設計中,有哪些好的習慣一開始就值得堅持?程式設計
- 程式設計師這條路很難走,你還要堅持下去嗎?程式設計師
- 程式設計師工作量大,堅持不下去了該如何解壓?程式設計師
- 一天只工作 3 小時的程式設計師,已堅持兩年程式設計師
- Java程式設計中,有哪些好的習慣從一開始就值得堅持?Java程式設計
- 學習跪在堅持!
- 程式設計師應該堅決避免的10種程式設計壞毛病程式設計師
- 計世網:IT人堅持不懈的十件蠢事
- 堅持就會有回報
- goCms-持續更新,希望能堅持下去Go
- 程式設計師持續學習之道程式設計師
- 程式設計師要有持續產出程式設計師
- 今天買了"Oracle 9i&10g 程式設計藝術" ,一定堅持看完一遍啊Oracle程式設計
- 國家資訊中心單志廣:智慧計算中心建設要堅持需求導向求導
- 因為專業,所以堅持(轉)
- js堅持不懈之11:focus()方法JS
- Gitlab堅持用雲的原因Gitlab
- 學習貴在堅持——效率啊
- 如何持續對程式設計保持熱情程式設計
- 程式設計師的Windows工具(持續更新)程式設計師Windows
- 劉博文:程式碼無終點,堅持跑,就不會輸
- 勝因沙龍 - 程式設計競賽(持續更新)程式設計
- 堅持“動態清零”不動搖
- 希望以後能堅持寫日誌
- 聚焦Oracle,堅持走技術路線Oracle
- 【2024-05-23】堅持中庸
- 一名普通程式設計師的正確理財方式:建立思維模型,選中好公司,堅持長期主義程式設計師模型
- JavaScript高階程式設計(讀後感-持續更新)JavaScript程式設計
- Verilog HDL程式設計心得(持續記錄)程式設計
- 主宰遊戲屆,任天堂在堅持什麼?遊戲