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)」核心精神:
- 快速但深入:每位面試官有限的時間內,專注在最能區分候選人的問題上
- 多位面試官獨立判斷:避免群體思維,每個人獨立給出錄用或不錄用的決定
- 寧缺勿濫:錯過一個好人選的代價,遠低於錄用一個不適合的人。一個差勁的工程師不只是「少一個好人」,而是會主動拖累團隊
- 面試是雙向的:好的候選人也在評估你的團隊。面試體驗本身就是公司文化的展現
面試決策的思維框架
在做出錄用決定時,可以問自己以下問題:
- 這個人能在沒有指導的情況下獨立完成有意義的工作嗎?
- 我會期待與這個人一起解決困難問題嗎?
- 這個人能讓團隊整體變得更強嗎?
- 六個月後,我會慶幸做了這個錄用決定嗎?
如果以上任何一個問題的答案是「不確定」,那答案就是不錄用。