20年招聘經驗:我所看重的開發人員的品質
本文轉載自公眾號“讀芯術”(ID:AI_Discovery)
我曾領導過許多招聘流程,包括從從初級技術人員到高級軟件工程師。作為開發人員,我也曾成功地完成過從大型跨國公司到小型初創公司的許多不同類型公司的整個招聘過程。在這篇文章中,我將分享我這20年來的主要經驗。
1.基本的編碼技能
評估方法:在面試期間進行非正式編程測試
評估一個人的編程能力非常困難。編程能力的真正含義是什么?語言知識起著一定的作用,但解決問題、時間管理技能、對算法和數據結構的理解也很重要。
一些面試過程會測試程序員的知識,但這存在很大問題。大多數語言的范圍都很寬泛,有人已經可以稱得上是專家的人仍然會被一些小眾問題絆倒。也有通過自動測試來測試技能的其他面試過程,但這些過程也不能令面試官滿意。像所有考試一樣,這類測試也有應試技巧,有的人就算僥幸通過,其他方面仍然很糟糕。
因此,以“ 1到10”種方式全面測試某人的編碼能力毫無意義。我將編碼測試視為排除那些絕對不會編碼的人的一種方法,我們需要測試否定因素。
我認為,編碼測試應該是一個討論的機會,應該是對候選人思維過程的了解,而不是直接的通過或刷掉。他們所寫的代碼應該符合規范,但是通過思考出來的編程和一些問答,我們可以更有趣地了解候選人為什么以某種方式做事。
因此,對于初始編碼測試,我會提出一個所有程序員都應該能夠很快解決的相對簡單的問題。一個格式正確的問題有著各種不同的解題方法,我得以開展討論,管中窺豹。例如:
- 編寫一個函數以反轉字符串(就地選擇或修改后的副本取決于候選者和良好的討論要點)。
- 編寫一個函數以返回給定時間的時鐘指針之間的角度。同樣,這可以通過多種方式解決。
- 編寫一個函數來計算斐波那契數列的前n個值(斐波納契數列的定義作為測試的一部分設定),這可以迭代或遞歸解決,也可以很好地討論。
可以在網上找到許多這樣的示例。請注意,我不是在尋找一種正確的解決方案,而是希望了解候選人如何解決問題,給出任何一個解決方案以及一些良好的后續討論。只有在給定時間內未能提供任何可行解決方案的候選人才會在這一過程被刷掉。
2.學習能力
評估方法:簡歷,面試和個人資料
技術是日新月異的,新的語言出現的同時,其他的語言也在減少。在語言中,框架也在不斷演變和更新。基于此,我認為快速學習新技術的能力對于開發人員來說是非常重要的品質。開發人員必須有能力追蹤其所在領域最新的技術,并且知道何時需要使用它。
我在面試中對此進行評估的方式是,讓求職者講一些示例,說明他們在以前的職位中需要學習和運用新技能的地方。在整個生涯中僅使用一種技術是某種危險標志,其適應性可能存在問題。理想的答案應該包括討論候選人何時評估了一系列技術選擇,以及選擇特定技術的合理理由,個人資料和簡歷也可以為接觸各種技術提供證據。
3.解決問題的能力
評估方式:實踐項目、面試
如果候選人通過了上述的初始“過濾器”測試,接著我想讓他們參與更深入的項目。理想情況下,這需要花費一些時間(可能是半天)與團隊一起進行實際的產品工作。它也可能是一個人工項目,類似于他們在工作中會遇到的問題。例如:
- 編寫一個類,該類封裝要在后臺線程上執行的工作,以及用于調度該工作的無鎖機制。
- 編寫用于顯示來自API的表數據的UI,并修改表中的單元格,將更改異步寫入API。
- 設計基于微服務的體系結構,以使用深度學習識別照片中的對象來分析用戶上傳的照片。
此任務的確切細節會根據你的業務性質和所涉及的角色有很大的不同,但我希望能提供抽象級別的概念。我想看到的是:
- 候選人是否有效地管理自己的時間以產生可行的解決方案,還是會在某一個方面花費太多時間?
- 他們是否能與其他團隊成員有效地合作(即使只是問問題并確定范圍)?
- 他們是否已對問題和可能的方法進行了全面思考,還是只是直接研究解決方案?
與前面的篩選環節一樣,通過解決方案進行討論是其中關鍵。
4.把事情做好
評估方法:面試和投資組合
正如約耳·斯波爾斯基在其書《游擊面試指南》中所述,招聘開發人員時真正要尋找的是那些聰明且能把事情做好的人。
我們已經討論了幾種衡量“聰明”維度的方法,可以是在解決問題方面有所進展,也可以是能從頭到尾查看項目并按時交付代碼或項目。并非每個人都能做到這一點,許多人跳過了某些事情,或者過度致力于錯誤的事情,最終陷入困境。
除了實際技能測試之外,評估此技能的一個好方法是候選人的個人簡介。他們是否有完成項目的記錄以及向實際用戶發送代碼的記錄?還是他們的GitHub個人資料到處都是從未有人使用過的未完成的工作?
我會在面試討論和跟進個人資料。如果有人參與了一個成功的項目,那么他們的角色是什么,他們如何為項目的交付做出貢獻?他們能否舉其他例子說明他們做的事情,并詳細說明如何做?
5.組織適應度
評估方式:面試
我要尋找的最后一個品質是組織適合度,這關系到他們將如何適應他們所處的單個團隊以及整個組織文化,很大程度上要依靠招聘小組的主觀判斷,我們同時也需要制定適當的政策來應對這一點。
例如,公司可能有一項政策,以從性別、種族或其他因素的角度來增加其員工隊伍的多樣性。在這種情況下,“文化契合度”實際上可能意味著尋找與眾不同而不是與現有公司人口統計數據保持一致的人。
團隊協作將更多地是在技能方面對團隊進行補充。再次,這也有利于團隊的多元化,如果團隊中已經有一個非常擅長架構的人,并且有兩個分別入圍架構或UI專業的候選者,則可能有必要在此聘請UI人員,這這是為了增加團隊內部技能基礎。
招聘是一場雙向選擇。應聘者尋求著自己心儀的工作,招聘者也在尋找著具有特別品質的人。招聘的形式能否展現出雙方的能力和訴求,這一點非常重要,招聘應該是對話而不是測試。如果我們要聘用比較好的候選人,我們需要給他們機會展示他們的才能。