歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> Linux業界

堅持編程:如何找到一份工程師工作

說實話,你是一位優秀的工程師候選人嗎?你怎麼評價自己?你面試過多少家公司?你拿到offer的比率是多少?試一下用以下的公式來計算。
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. 如今,我為自己代言。要做些新東西。
Copyright © Linux教程網 All Rights Reserved