1. 面試的核心目標:找到聰明又能把事做好的人#

Joel 認為,技術面試的終極目標可以濃縮成一句話:找到既聰明(Smart)又能把事情做好(Gets Things Done)的人。這兩個特質缺一不可:

  • 只有聰明但做不出東西的人:這類人往往沉迷於學術理論或過度設計,卻無法交付實際成果。他們可能在白板上畫出完美的架構圖,但永遠無法把產品送到使用者手中。
  • 能做事但不聰明的人:這類人會埋頭苦幹,但產出品質低落。他們寫出的程式碼充滿 bug,其他人得花更多時間去修補,反而拖累整個團隊。
  • 兩者兼備的人:這才是你真正要找的人——能獨立思考、快速學習,同時也能把想法落地為可運作的軟體。

面試的決策應該是二元的:錄用(Hire)或不錄用(No Hire)。沒有「也許」這個選項。如果你對一位候選人感到猶豫,那就是不錄用。一個「還可以」的工程師對團隊的傷害,遠大於暫時少一個人手。

2. 有效的面試方法#

2.1 讓候選人寫程式#

面試中最有效的手段,就是請候選人當場寫程式。不需要是完整的應用程式,一個小型的演算法或資料處理問題就足夠了。觀察重點不只是最終答案,更重要的是:

  • 候選人如何分析問題
  • 如何組織思路
  • 如何處理邊界條件
  • 能否清楚地解釋自己的思考過程

2.2 使用開放式問題#

好的面試問題沒有唯一正確答案,而是能引導出深入的討論。例如:

  • 「請設計一個 ___」——觀察候選人如何拆解需求、做出取捨
  • 「如果遇到 ___ 問題,你會怎麼處理?」——觀察應變能力與經驗深度
  • 「告訴我一個你解決過的困難技術問題」——觀察真實經歷與反思能力

這類問題能讓聰明的候選人發光,因為他們會自然地展開多層次的思考。

2.3 觀察熱情與好奇心#

頂尖的工程師對技術有發自內心的熱情。在面試中,這會表現為:

  • 談到自己做過的專案時眼睛發亮
  • 主動深入探討技術細節
  • 對新事物保持好奇,願意學習不熟悉的領域

熱情是很難偽裝的。一個真正熱愛程式設計的人,會在談論技術時自然流露出興奮感。這種特質往往比任何特定的技術技能都更能預測長期表現。

3. 應該避免的面試陷阱#

3.1 不要問冷知識題#

「C++ 中 virtual 關鍵字的預設行為是什麼?」這類問題測試的是記憶力,不是能力。候選人可能前一天剛好讀到答案,也可能是十年經驗的高手但就是記不住這個細節。冷知識題無法區分好工程師與差工程師。

3.2 不要問腦筋急轉彎#

「曼哈頓有多少個水溝蓋?」這類問題曾經風靡一時,但研究顯示它們與工作表現幾乎沒有相關性。這些問題測試的是一種非常特殊的思維模式,與日常軟體開發所需的能力關係不大。

3.3 不要被表面印象誤導#

  • 名校學歷不等於能力
  • 口才好不等於技術好
  • 安靜內向不等於不夠聰明

唯一可靠的判斷依據,是候選人在面試過程中實際展現出的思考能力與解題能力。

4. 溝通能力同樣重要#

Joel 強調,軟體開發不是獨自一人在洞穴裡寫程式。一個無法清楚表達想法的工程師,會在以下方面造成問題:

  • 無法有效參與設計討論
  • 寫出難以理解的程式碼與文件
  • 難以與團隊成員協作
  • 無法向非技術人員解釋技術決策

溝通能力不代表要能言善道,而是能用清晰、有條理的方式傳達複雜的技術概念。

一個技術頂尖但無法與人溝通的工程師,對團隊的貢獻可能遠低於一個技術稍弱但溝通良好的工程師。團隊的產出是整體的,而非個人的加總。

5. 游擊式面試的實踐原則#

Joel 提出的「游擊式面試法(Guerrilla Guide to Interviewing)」核心精神:

  • 快速但深入:每位面試官有限的時間內,專注在最能區分候選人的問題上
  • 多位面試官獨立判斷:避免群體思維,每個人獨立給出錄用或不錄用的決定
  • 寧缺勿濫:錯過一個好人選的代價,遠低於錄用一個不適合的人。一個差勁的工程師不只是「少一個好人」,而是會主動拖累團隊
  • 面試是雙向的:好的候選人也在評估你的團隊。面試體驗本身就是公司文化的展現
面試決策的思維框架

在做出錄用決定時,可以問自己以下問題:

  • 這個人能在沒有指導的情況下獨立完成有意義的工作嗎?
  • 我會期待與這個人一起解決困難問題嗎?
  • 這個人能讓團隊整體變得更強嗎?
  • 六個月後,我會慶幸做了這個錄用決定嗎?

如果以上任何一個問題的答案是「不確定」,那答案就是不錄用。