爲什麼有些面試官喜歡讓面試者用紙寫代碼呢?

趙慶樹


此前Max Howell面試時因沒有通過白板測試而被Google拒絕,引發了一陣關於白板測試的爭議。事情是醬嬸兒的:

Homebrew是蘋果OSX下面的軟件包管理工具,Max Howell是Homebrew的作者(由於國外大量程序員使用蘋果電腦進行軟件開發,Homebrew在程序員裡是人人皆知的著名軟件)。這樣一位頗有名氣的程序員,在參加Google面試時,卻因為無法在白板上寫出翻轉二叉樹的代碼,慘遭淘汰。隨後Max Howell發推文懟Google,表達了自已對白板測試的不滿。

Max Howell推特截圖

不過,Max Howell被Google拒絕之後,Apple向他拋出了橄欖枝,如今Max Howell已經成為Apple的一員大將,不知道他現在能不能在白板上寫出翻轉二叉樹的代碼?

上個月這個問題又被知乎送上熱榜,所以,呼聲又起:“白板測試究竟是不是面試程序員最好的方法?”“為什麼有人喜歡用白板測試面試程序員?”

實際上,面試官喜歡採用白板測試,主要有兩個目的:一方面考察應聘者的個人能力與簡歷是否相符;另一方面,瞭解應聘者的職業素養,以及與崗位的契合程度。

一、考察應聘者簡歷的真實性

任何一家公司都希望能夠聘請到最優秀的人才,簡歷關通過後,企業首先要確認的是應聘者的個人能力是否與簡歷相符。通常來說,紙筆編程的題目都是較為簡單的基礎算法題或者常見小規模設計題,一般來說不會專門考察某些框架API(至少正常情況下不會讓拿個Spring框架套著寫功能),並且通常是針對招聘要求而設計。我們舉幾個簡單的例子:

如果個人材料裡寫著自己熟悉C++11,有兩三年工作經驗,那麼,自己封裝一個RAII的、使用智能指針的簡單FIFO Queue不會特別困難,並且能一併考察如下知識點:

  • 什麼是FIFO Queue(基礎數據結構知識)
  • 會不會用模板設計(C++基礎)
  • 會不會RAII設計(C++經驗)
  • 會不會用智能指針(C++11功能)
  • 會不會順帶考慮到線程安全等相關問題(其它與崗位相關的知識)

如果個人材料裡寫著自己本科畢業,成績優秀,那麼,簡單的冒泡排序或者插入排序,甚至寫個快排不會太難,一個簡單的面試能夠確認:

  • 基礎數據結構和算法知識
  • 課程基礎是否紮實
  • 是否有基本的算法思想(如快排包含的分治、遞歸思想)

如果個人材料說自己曾獲ACM競賽區域賽銀牌,由於ACM競賽三人一組,而Regional銀牌在自己能力一般,但隊友比較給力的情況下也能取得,那麼,需要區分此人的實際能力。而對比ACM Regional,Leetcode上的簡單題,僅僅相當於現場賽簽到題,不會太難,同時能夠確認:

  • 基礎算法知識是否達到了自己所述的水平
  • 思維是否靈活足以駕馭一般的基礎算法問題
  • 對問題分析的細緻程度

因此,這類題目,能夠在儘量簡單的前提下,基本評估應聘者實際水平是否與其簡歷有較大出入。白板測試過程中,小失誤並不會太過降低評價,但如果號稱自己熟悉C++11卻不會用、號稱自己本科畢業成績優秀卻寫不出最基本的冒泡排序/插入排序,這種情況下簡歷的可信度就需要打折扣了。

你看,魔笛手的工程師們即使在酒店裡也是備著白板的,而且還不止一塊。圖片截自視頻。

二、驗證應聘者與崗位的契合程度

很多人會提出,如果要考察簡歷的真實性,完全可以在機器上考,沒必要進行白板測試,實際上,筆寫能夠了解到更多細節,包括:

  • 在有限的空間、時間,且氛圍相對緊張的情況下,考察應聘者冷靜處理問題的能力;
  • 能否快速分解、明確思路,考察應聘者思考問題的方式及工作效率;
  • 是否能在沒有參考或輔助的情況下減少修改,考察應聘者的功底及嚴謹程度;
  • 在拿到代碼後即刻詢問其思路和思考過程,瞭解其表述能力;
  • 筆寫程序一般來說不容易做到完全正確,出現小的錯誤恰恰給後續面試過程做鋪墊,面試官可以就錯誤部分進行針對性交流。

所以,總的來說,通過紙筆寫代碼,可以在短時間內對應聘者簡歷的真實性、個人基礎水平、思維方式以及溝通能力進行考察和評估。

儘管白板測試能夠檢測出應聘者的部分技能,大多數情況下,應聘者對於這種形式還是會感到不爽:

正常工作環境中,可以訪問API,也可以通過搜索找到自已想要的答案,但是白紙與白板杜絕了這些可能;而且白板測試並不能說明應聘者的所有技能,要求一位有多年編程經驗的程序員突然在紙上或白板上寫代碼,可能會讓他直接懵掉。這也是為什麼有時應屆生可以做出白板測試,而身為技術大牛的Max Howell卻栽了的原因。

還有一些面試官濫用白板測試,根據測試結果片面的定位應聘者的水平,加重了應聘者的牴觸情緒。因此,在效仿Google白板測試刷掉大牛之前,面試官至少要先考慮一下你的應聘者隊伍是否像Google那麼長,同時,也需要考慮面試官能否駕馭這一面試形式。

當然,如果你的目標公司目前還採用白板測試的方式,而你也樂於接受這項挑戰,那不妨提前做些準備,以便在面試時遊刃有餘的發揮。這裡提供幾個練習建議:

1、雖然很難猜出面試官究竟要出什麼問題,但是你可以根據現有的面試資料列出一份練習提綱;

2、給自己限定一個時間,隨機選取一個問題,開始模擬測試;

3、一邊做一邊把自己的思路講出來;

4、查漏補缺,搜索相關資料,看別人怎麼做,進行思路完善;

5、讓朋友做面試官,隨機出題,自己在白板上演示出來,並解釋給朋友聽。

綜上,如果你不喜歡白板測試,或許可以找一家不進行白板面試的公司,Github上列出了眾多不需要白板測試的公司。不過話說回來,一張小小的白紙(白板)怎麼可能阻擋得了我們無堅不摧的程序員跨進理想公司的腳步呢?對吧?


慕課網


一個理解了編程精髓的程序員,完全可以用極簡的方式表達出來自己的程序設計。因此,用筆寫代碼是考驗設計能力的好辦法。如果用筆寫不好程序,編碼再熟練也只能下廚房當碼農,上不得廳堂的。


日衝信息 黃


因為不需要準備上機用的電腦,一張紙就可以在同時打發十幾二十個面試者,成本低。

至於單獨面試階段還讓用紙寫代碼的就有些腦殘了。要考察能力,寫時序圖都好啊。最多讓從時序圖裡挑一段出來,讓人實現一下就好🙄


分享到:


相關文章: