軟體工程師面試重要的三個原則 (2017.12.22 更新) 2


背景資訊:我待過中型企業(100人)、超大型企業(8000人),職涯後半段都在新創公司(5人左右)、小型企業(20人)。

從以前到現在,面試工程師的經歷,沒有上百,也有幾十了。關於新創公司如何找人,請出門左轉。

[2017.12.22 內文更新]

下面列出我面試時的幾個原則:

如果找的是軟體工程師,面試一定要出程式題讓他寫

如果他進來之後的工作項目是coding,為什麼不在面試的時候就好好驗證這點呢?如果你是籃球隊教練,你召進來的隊員你會只跟他聊天,問他的強項跟專業,卻不讓他投幾個籃給你看嗎。

之前小時候也曾去過好幾家公司面試過,有些公司根本都不考你程式題,我覺得很詭異,創辦人跟你聊一聊天,氣氛愉快就答應錄取了。我反而比較欣賞出難題目的公司,如果我得要盡力發揮才勉強過關,那代表我將來的同事也都有一定水準

在這邊推薦LeetCode,多做不管對面試還是對自己寫程式都有幫助。[更新] 另外在應徵前,你大概要知道那間公司的屬性可能會用到哪些演算法,然後針對那些重點演算法,務必讀熟。例如像Facebook等社交軟體公司,你就應該要對Graph很熟。像Google的搜尋公司,你就應該要對各種Tree, Heap熟。這裡我也很推薦在面試心儀的公司前一個月可以買LeetCode付費版,因為它就會提供上述資訊,你會知道那間公司主要focus在考哪些題目,付那一個月少少的錢根本就是物超所值。

我個人會選比較有層次的題目,而非腦筋急轉彎類的題(只需要一步、一個idea就可以解題的)。例如之前常拿來問的是:

T  E  A

E  A  T

A  T  E

上面這個 3 x 3 的字母陣列,橫向(左到右),縱向(上到下),都是英文單字(tea 茶, eat 吃, ate 吃的過去式)。如果給你一個有所有英文單字的字典文檔。試著找出最大的N,讓N x N的字母陣列符合橫向(左到右),縱向(上到下),都是英文單字的這個條件。

如果能用暴力法解,大概就是40分。然後可以根據他的答案給一個tip,讓他optimize,再根據他的進展再給一點提示,讓他把演算法做得越快越好,能optimize 2次就差不多能錄取,再往上衝就可以認定這個人蠻優秀的。在應試者思考的時候,我通常會給好幾分鐘的時間,完全的沈默,整間房間一點聲音也沒有,這也給予一種無形的壓力,可以看看對方在壓力中會如何表現。接著讓他把他的演算法寫出來,然後用他寫的東西去challenge他的想法。

其實這是最有用的篩選方法,因為這個流程基本上跟實際工作會面對到的狀況一模一樣。這也是我很堅持面試一定要考手寫程式的理由。

好溝通 & 能力不錯 > 難溝通 & 能力超強

現在一個人幹完一整個產品的事情已經不太會發生了,尤其現在軟體產品的面向還蠻廣的,以基本的服務舉例來說有:網頁後端、前端、Android / iOS app、DevOps等,這算是基本配置。再厲害的Eng,大概兼兩三樣,但完成一個產品一定要跟其他人合作。所以找好的team player是Must Have,能力超強則是Nice To Have。因為現在有太多3rd party lib, framework可以做掉架構性的事。其實好好的使用工具就可以做出不錯的東西。

東西不會用可以學,態度差通常無法改變,而且會讓整個team士氣跟效率都降低,絕對要謹慎,在面試過程中要想辦法察覺。

基本資料結構+演算法強 > 只有單一領域專業強

本質好,學習斜率快,什麼不會,花時間學就好。如果在專一領域太久,反而有時頭腦會僵化,或者是不願意放棄自己原有優勢,不想跨到新領域。尤其現在軟體進展速度超快,可能今年召進來的時候本來打算做A,但到了明年,整間公司轉做B,這件事是很有可能發生的。所以在面試的時候,會考基本演算法的程式題,也是為了挑出本質強的人。

另外還有幾個小trick可以找出好的人才:

  1. 在面試前,請他準備一段他最近寫過覺得不錯的程式碼帶來:這樣可以直接看到程式碼,知道他的code到底有沒有怪味道。
  2. 在面試時,問他最近在工作上解決過什麼難題:藉由他陳述的最自豪的成就,可以觀察出他做事的水準。
  3. 請他說幾個常用的3rd Party library:真的有在寫程式的,他就能隨口說幾個實務上常用的,如果是嘴砲王,他就會用各種理由推辭,就是不說。
  4. 問他上一份工作為什麼離職:這邊務必從他的回答中多追問幾個問題,因為如果對方有鬼,被你抓到說謊的機率很高。
  5. 真的打電話去做reference check:曾經碰過給假資料的,這種人就不用考慮了。
  6. 碰到越會講話的,要越小心,要用程式題判斷對方是不是真的那麼強。碰到不太會說話的要有耐心,讓他的程式幫他說話:我們是找寫程式的,不是業務,所以最後判斷標準還是寫程式的功力高低。

Leave a comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料

2 thoughts on “軟體工程師面試重要的三個原則 (2017.12.22 更新)