人力招募 - 二、見面談:招募第一關 面試


接續上一篇 萬事起頭難:面試名單從哪來?,這篇整理的是面試篇。

面試是很多管理者(特別不習慣面對人的技術管理者)要學習的重要課程,也可能是第一個面對公司內部、客戶以外的人:從社會來的任意一個陌生人。

面試的目的在於找到 適合的人,要清楚以下本質:

  • 面試是用人手段,透過面試了解是否適任,了解彼此,為彼此找到適合方向
  • 面試是雙向的,面試官在面試別人,面試者也在面試這家公司
  • 用人不只是技能,還有價值觀,反過來也是考驗企業文化是否對到面試者的頻率
  • 面試只是其中一種篩選方法,吃飯喝茶、喇低賽、三顧茅廬也是面試。

底下整理面試方要準備的工作。


面試前的準備工作

面試前要準備很多事情,包含流程、問題的設計、評量的方法、薪資 … 等。必須跟上層主管、HR有充分溝通與確認,甚至是平行管理者可以有交流討論。

流程設計

每家公司有不同面試流程,有不同的時間。大部分台灣的面試時間都很短,普遍都在半天之內,有些則是固定一小時。有些大型外商,面試流程很長,通常是兩三天起跳。加上交通時間,一場面試跑完大概要一個禮拜。

不管是一小時,還是好幾天,面試的目的就是要了解 Candidate 是否適合這個職務。

面試流程設計有其目的性,主要目的有以下:

  • 硬技能:確認技能是否符合需求,底下為軟體工程師的驗證面向:
    • 基本程式語言的駕馭能力、開發流程
    • 資料結構、演算法
    • 作業系統、網路、計算機結構
  • 軟技能:是否適合團隊
    • 團隊協作
    • 溝通表達
  • 人格特質:是否能長久合作
    • 價值觀
    • 態度
    • 企圖心

鑑別與評核方式

AWS Certified Developer 準備心得 一文中最後段落提到一些概念,也是用來作 能力 足夠與否的參考點:

  • 技能 (Skills):具備駕馭的技術能力
    • 基本功:Programmer Competency Matrix 是不錯的參考。
    • 實踐功力:例如會 Java, PHP, AWS, K8s … 等。
    • 難易度從養成技能的時間判斷,例如學好 OS 運作,需要長時間累積,但指令只要搜尋或者 man 就有。
  • 經驗 (Experience)
    • 曾經的經驗與環境,像在 IBM, TrendMicro, KKBox, Facebook 待過幾年,或者什麼角色幾年
    • 具體的經驗數字,例如每天維護處理 100TB 的資料搜尋引擎,一共使用 200 個資料節點
  • 專業 (Prefessional):解決問題的能力,像是:
    • 導入微服務架構解偶現有系統,為公司跨國帶來更彈性基礎
    • 導入敏捷開發,讓開發與協作更加順暢
    • 解決 c10k 效能問題
    • 能寫出 Rate Limit 演算法,並且用在適當情境

這三點用來參考能力的參考點,也許不是最好,但卻很實際。能力跟 Performance (產能)有直接關係,屬於硬實力。

軟實力呢?大概就是團隊合作、溝通、教育訓練、影響力、文字駕御 … 等項目。有機會另外寫專文說明。

問題的設計

問問題要有技巧,STAR 是最常見的方式,套路是這樣:

  • Situation (背景):其實就是我常說的環境,什麼樣的環境之下,會做出怎樣的行動。
  • Task (工作任務):主要的目標任務
  • Action (實際行動):如何完成任務的實際行動
  • Result (關注結果):結果到底是好、不好,成功或者失敗等。

問題的設計通常可以依據這樣的套路。

例如,應試者履歷上只寫 完成某一個專案,但是這段工作時間有一定的長度,那麼可以試著這樣追問:

  • 背景:跟哪一些人合作?這個專案的 TA?怎樣的市場?團隊的工作模式?
  • 任務:你在前述中是扮演怎樣的角色?根哪一些人協作?使用了哪一些技術
  • 行動:執行的方法、遇過怎樣的問題?映像最深刻的?讓你最感到興奮的?
  • 結果:後來這個專案上線了嗎?有怎樣的結果?做了怎樣的改善或者調整?你學到了什麼?

這個只是一個常用的套路,使用要看應試者本身的表達狀況。有些應試者本身擅長表達,容易有類似的呈述結構,面試官容易了解他的狀況。但有些則不太會表的,往往是做了很多,但卻不知道怎麼組織自己的任務,這時候可以適時用這樣的問法問出一些東西。

問題設計的背後,要清楚想知道的,重點在於瞭解應試者是否符合條件,特別是跟態度、價值觀、潛力、人格特質有關的。

技能驗證

技能驗證是技術人必要的關卡,目的是確認技能能夠滿足任務的需求。技術能力滿足的狀況分幾種:

  • 火力
    • 通常是 資深 或是 專家,這種人可遇不可求。只要給予武器,他可以馬上上戰場,甚至他可以直接指揮小組作戰,佈局、攻守、改善武器火力、優化後勤
    • 面對新技術,他能很快找到資源,快速掌握技術核心概念,從抽象到實作能力具備,同時可以把這樣的能力擴散到團隊
  • 即戰力:通常只要給武器,就可以馬上上戰場,滿足任務的需求。
  • 淺戰力:需要短時間 (1Q 以內) 就可以上戰場
  • 無戰力:從頭開始訓練的人,無戰力分成兩種
    • 有潛力:通常是基本能力足夠的人,像是有扎實的計算機基礎科學,經過訓練,很快可以轉為 淺戰力
    • 堪用:雖然沒有潛力,但是現場需要人手,可以協助,通常是助理的角色,一段時間後可以轉為 淺戰力

這篇:Senior Software Developer,是我過去對於 資深專業大師 的看法整理。

技能驗證一定要確認幾個點:

  1. 真的寫過程式:這一定要親自確認過,不要以為很好笑、或很疑惑,因為真的有這樣的人矇混過了。
  2. 寫程式的紀律、習慣:基本語法掌握度、排版、Coding Convention、工具 (IDE)
  3. 如何確認需求與團隊溝通
  4. 如何找資料、參考、照抄
  5. 寫程式的功力,像是演算法、程式技巧、OO、數學

對,寫程式的功力是最後一點。很多時候,看到寫程式連該要有的 排版都沒做好,會讓人看都不想看。

程式寫好後,被改動的機會變少了,但閱讀的機會變多了。紀律很重要。

不管是 Live Coding or Offline Coding 都是要確認前面提到的五個點。

技術驗證:Live Coding

面試當天在現場進行考試。現場考試方式通常不是白板題,就是上機考。題目的難易度,取決於時間。事前可以定義面試流程的時間分配,從時間分配題目的難度與深度。題目的設計要注意:

不是要難倒面試者,而是要了解面試者的程度。

要難倒面試者很容易,隨便出個演算法就搞定了,但沒有意義。

我個人偏好上機考,可以直接看出一個人寫程式的習慣,如何面對問題,有沒有 UT 的習慣,寫程式的思路,對於開發環境的要求 … 等。

技術驗證:Offline Coding

驗證的方法分成客觀、主觀的方法,客觀的就是考試,這兩個 LeetCode, Codility 是業界很多公司會用的線上測驗系統。主要考資料結構與演算法、邏輯、基本英文閱讀等。

這類工具已經有很方便的確認方式,只要預算允許,是可以使用的。

我也曾經設計類似題目,請面試者在家自行開發,題目是我學生時代寫過的東西,我那時候想兩天,寫兩小時。那時候大概是 1999 年,我剛寫程式 2 年。也因此這題目我認為算是簡單的,有興趣嗎? 點這裡 試看看。

團隊面試

面試不是只有跟用人主管,而是跟團隊。

這個想法我從 上一個工作 開始就這樣操作,因為真正一起協作的不是管理者,而是團隊的成員。管理者只是在旁邊給予協助與教育的角色。所以一直以來,我都會希望,讓團隊主要的成員,一起參與面試的過程,通常是資深的成員。

在這過程,也讓資深的成員培養他們對於 面試 概念的建立,思考 如何面對人 這件事情。因為 資深 代表著有機會往上爬,有機會做管理工作。創造機會讓他們一起學習,管理者也可以從他們的反饋,從而修正面試相關的工作項目。


面試當天

面試當天的準備

  • 詳細閱讀面試者的資料,針對資料準備可能的提問與方向
  • 確認要問的問題,以及問題背後的目的
  • 確認面試地點、時間、相關的面試團隊

面試當下的情境

盡可能讓面試者表現出 真我 (True Color),也就是真實的自己,盡可能讓他可以在面試官面前侃侃而談。目的是能夠在短短的時間之內了解這個人是否真的適合我們,也在了解他面對壓力的時候的態度。讓面試者放鬆的方法很重要,通常見面會聊聊輕鬆的話題,像是:

  • 怎麼過來面試的?從哪裡來?來到公司要多久?
  • 今天請假?還是目前待業?(有些履歷上不會寫)

這類的問題,通常跟新同事、或者同事碰面會聊的話題。

面試可能發生的問題

為了讓面試順利,要留意以下可能的問題以及如何應對:

  • 面試者:
    • 遲到、早到
    • 不願意測驗
    • 自介一直說停不下來,或說兩句就沒了
    • 剛衝浪完,一身都是沙子
    • 才談兩分鐘就發現不適合怎麼繼續?
  • 面試官:
    • 遲到
    • 沒有會議室
    • 臨時有事,像是重要會議
  • 環境問題
    • 沒電腦可以考試
    • 冷氣不夠冷
    • 忘了準備水
    • 下大雨

紀錄面試過程

面試過程會問問題,應試者會答覆問題。這些過程在事後跟上及、或者自己事後回想的時候,需要有參考資料。

Candidate 經常會問的問題

現在有很多 Head Hunter 會教人如何面試,如何反問用人主管問題、反問企業 … 甚至有書 (提升程式設計師的面試力)、網站 專門在討論。

  • 此職缺產生的原因為何?相關的成員有多少人?
  • 貴公司面試流程為何?預估時間?
  • 能否提供此職缺的待遇範圍及結構
  • 你上次出國是什麼時候?
  • 你們常加班嗎?為什麼?
  • 公司福利?上下班時間
  • 拿出某一個鄉民的 comment 請你說說看法?

面試後續

如果想用這個人,後續有幾件事要持續的:

  • Candidate
    • 他期待的薪資範圍與未來
    • 他可能的 Offer
    • 市場的行情
  • 內部溝通
    • 對上溝通
    • 對下溝通
    • 對 HR 溝通

結論

面試只是用人的手段方法,實際上重點在於找到適合的人。

適合 很抽象,具體的說:

  • 短期:能分擔團隊的任務
  • 中期:能貢獻提供火力
  • 長期:為公司帶來價值

所以廣結善緣,多一些連結,就會多一些機會。

第一次通常是要確認 技能 能否滿足任務需求,如果企業要長期發展,那 價值觀 可能會是更重要的。下一篇聊的是:深度對談 價值觀


延伸閱讀

系列文章

站內延伸


Comments