Categories
程式開發

技術招聘已經變味了


在技​​術面試中,常用的代碼考量手段無非是現場寫代碼和留算法筆試作業,但這兩種方式可以考察的因素非常有限,因此受到了一些技術人的吐槽。

技術招聘已經變味了 1

回家寫筆試代碼是個好主意嗎?

最近,Andrew Rondeau 放棄了一個在家編碼的面試機會。為了尊重公司隱私,這裡只簡述公司的測試需求:

這項測試需要花費幾個小時來完成。創建一個基於 Web 的留言板,需要使用 C#、ASP.Net Core、Angular 和 Material 設計,並使用數據庫。當有人添加消息時,請實時更新所有其他打開的瀏覽器。為方便起見,無需進行身份驗證。

根據 HR 的說法,這需要花費幾個小時來完成,但 Andrew Rondeau 其實對 ASP 並不十分了解,自 WebSocket 出現以來,沒有進行過任何實時操作,也沒有使用過 Angular 或 Material 設計。 Andrew Rondeau 預計該項目至少需要花費一天時間。

公司的人力資源畢竟有限,Andrew Rondeau 猜測公司並沒打算在他身上花費太多時間,但是卻希望求職者傾注很長時間在它身上。 Andrew Rondeau 沒有接觸到團隊中的其他成員,也沒有見過他們的產品。 Andrew Rondeau 在想如果在該項目上投入很長時間,卻不小心犯了低級錯誤怎麼辦?那些高級工程師會不會將他拒之門外?如果到最後發現自己並不想要這份工作,但是浪費了很長時間,又該怎麼辦?

基於如上種種原因,Andrew Rondeau 放棄了這個工作機會。

Andrew Rondeau 表示還有一種情況,他也會考慮放棄面試。

此前,他曾接到測試要求是“修復開源項目中的 bug”。解讀複雜的源代碼可能需要幾天時間,如果源代碼使用了不熟悉的語言或習語,那估計花費的時間更長。

在Andrew Rondeau 看來,修復開源項目中的bug 並不友好,因為無法與已經在該代碼庫中工作過的其他面試者公平競爭,他很擔心花了很長時間在家完成了這項測試最終卻連個面試機會都沒得到。

現場編程只是“假 IQ 測試”

Neil Sainsbury 擁有 15 年的軟件開發經驗,作為一名開發人員,他成功經營著自己的軟件業務,並且是一家已經拿到風投的初創公司聯合創始人,所以需要親自招聘和管理開發人員。他認為,招聘應該從多個角度對候選人進行評估,比如他們對人友好嗎?溝通能力如何?如何證明自己的想法?如何看待這個行業?對這個業務領域有什麼看法?如何應對壓力等。

相比之下,在招聘開發人員時,招聘過程會忽略人的因素,只關注算法或技術方面的東西。這是一種“假”IQ 測試,甚至都算不上是好的測試。以 Homebrew 作者 Max Howell 面試谷歌被拒為例。谷歌說他們有 90% 的員工使用了 Max 開發的 Homebrew,但因為在面試時 Max 沒能在白板上寫出如何反轉一顆二叉樹而被拒。 (當然,這件事情后來在知乎上引起了激烈討論,各方觀點皆有,此處不贅述,感興趣的朋友可以點擊文末鏈接)

Neil Sainsbury 認為,軟件行業,特別是開發人員的招聘顯示出了一些獨特性。其他職業很少會如此徹底地忽略候選人的實際能力、歷史成就和整體素質,而這些其實都是招聘過程的一部分。

Neil Sainsbury 表示曾經招聘過一些在技術上表現優秀但其實很差勁的開發人員。

技術能力優秀的開發人員之所以失敗,其中一個原因是他們太過於沉迷代碼,以至於無法理解他們正在開發的東西是否有人關心或使用,而那些技術能力不那麼優秀但懂得從用戶角度思考問題、懂得用戶需求的開發人員反而具有10 倍(甚至是1000 倍)的效能。他們可能花了 5 個小時去了解用戶的需求,而技術能力優秀的開發人員可能花了幾個月辛勤耕耘代碼,開發出沒有人在乎的功能。

如何了解候選人是否具備理解用戶的能力?首先,他們可能會自己開發和交付產品,並讓產品獲得用戶青睞;其次,他們具有很強的社交能力,溝通能力也很好。如果他們還寫博客,那麼去閱讀他們的博客,並把它作為招聘過程的一部分。換句話說,他們具備了一些很好的素質,但卻被整個軟件行業的招聘給忽視了。

另一種常見的情況是,技術能力優秀的開發人員走的路線與業務目標不太一致。他們積極追求技術上的樂趣,但這對公司來說其實是不利的。但作為一家企業,你又怎敢抱怨?你想招一個對.Net 充滿激情的人?你招到了,接下來,你又發現.Net Core 看起來很棒,我們來升級一下吧,即使還沒有相應的產品。其結果是,3 個月後,大多數用戶開始流失。

此外,還有一些現場面試提出的問題是那種只停留在教科書上,實際中基本不會使用的算法,面對這種問題,很多工程師也會很煩躁。更重要的是,無論是現場寫代碼還是在家編程,不好的面試體驗都會讓公司錯失優秀的工程師。

糟糕的面試會錯失優秀的工程師

面試是個雙向選擇,企業在面試候選人時,候選人也在考察企業。找到優秀軟件工程師並不容易,而一場糟糕的面試意味著企業將與優秀的候選人失之交臂。

當 Andrew Rondeau 在大型科技公司工作時,HR 對軟件工程師的了解遠不如同崗位的工程師。 Andrew Rondeau 知道一些可以簡化現場和在家編碼問題的網站,網站上提供了大量的面試示例和工具,這些工具最大的價值就是尊重候選人的時間。

在要求候選人到公司現場面試之前,可以事先對候選人進行初步了解,如果不符合要求也不必浪費彼此的時間(有些候選人甚至可能需要乘飛機來參加面試),尊重候選人的時間至關重要。

如何權衡現場編碼和在家編碼?

如果公司經常要求面試者在家編碼,那麼這種公司面試候選人的時間成本會比較低(因為已經輕車熟路),但是如果公司隨意挑個問題發送給候選人,那麼就會佔用候選人比較長的時間,這也是Andrew Rondeau 為什麼放棄上述工作機會的原因。

很多工程師喜歡在沒有旁觀者的情況下放鬆自在地編碼,讓候選人在家編碼能幫助公司了解候選人的風格和管理項目的能力,卻無法看到工作過程,只能知道結果。但是在家編碼也存在一個隱患,那就是候選人可能會有欺騙行為,可能旁邊還坐著一位程序員幫他完成測試,現場編碼就避免了這種問題。

採取現場編碼面試可以很容易地看到候選人編碼的傾向或偏見。這些暴露出來的問題可以幫企業更好地判斷候選人是否符合崗位需求。

但作為候選人,當遇到一個糟糕的面試問題時,很容易無所適從。這種情況下,求職者通常會拒絕這份工作。但是,當在家編碼也遇到一個無法操作的面試問題時,也糾結到底要不要進行下去。

因此,可以讓應聘者自己決定現場編程或是在家編程,只要分清這兩種方式的利弊並做好取捨,就能輕鬆解決這一問題。

好的面試要滿足哪些條件?

在家編程

好的現場編程的面試問題首先要滿足的條件是不能佔用候選人太多時間,通常2-3 個小時為宜(要避免對測試時間的錯誤預估,可能HR 認為回答這個問題只需要2- 3 小時,但實際上卻需要15 個小時)。同時還需要了解候選人的學習軌跡,如果在家編程需要特定的庫、語言、框架等,要在發送問題之前與候選人進行溝通。如果是涉及公司內部業務的測試題,那麼現有員工完成這項測試的時間要是候選人完成測試時間的一半。

現場編碼

一個好的白板問題需要仔細規劃。面試官需要花費 1-2 小時來計劃一場 1 小時左右的面試,同一個問題可以向類似崗位的不同面試者提問。

  • 2-4 個對崗位至關重要的高級編程概念;
  • 對此崗位“常識”的認知;
  • 10 到 20 行非常基礎的代碼編碼問題;
  • 規劃一個討論問題,例如,假設需要解釋所有崗位需要的 API 和算法;
  • 確定這些問題是否是真正的白板問題,或者候選人是否需要攜帶筆記本電腦;

總結下來,在家編程和現場編程各有利弊:

技術招聘已經變味了 2

結語

一家公司的招聘行為通常會對公司和產品本身產生重大影響。一家公司其實就是員工和所做決策的共同反映。所以,如果只招聘填鴨式或算法式的員工,當他們交付出沒有品味的產品時,也無需感到驚訝。那麼,像Stadia(這項技術允許用戶通過互聯網瀏覽器或YouTube 玩遊戲)這樣的產品是來自於那些深諳用戶需求並知道如何為用戶開發產品的人,還是來自於那些總是認為需要(不惜一切代價)開發代碼的工程部門?

每個人的喜好不同,如果想讓所有應聘者都滿意,那麼最好的辦法就是讓應聘者自己選擇以哪種方式來編碼,重要的是,你要清楚如何計劃好的測試問題,並確保參與測試的每位候選人都有良好的體驗。