領(lǐng)英上有不少公司CEO,聲稱可以在五分鐘內(nèi)通過簡單的對(duì)話甄別出合適的候選人,實(shí)際是違科學(xué)。本文將揭示面試開發(fā)者的科學(xué)之道。
我對(duì)領(lǐng)英上那些大言不慚的帖子快要失去耐心了,帖子里一位剛出道的科技公司CEO這樣說道:"我不需要對(duì)候選人進(jìn)行為期一周的面試和多次的評(píng)估,只需要與候選人進(jìn)行對(duì)話,就可以在大約五分鐘內(nèi)判斷他們是否可以勝任這份工作"。
事實(shí)果真如此嗎?非也。盡管較短的面試是個(gè)不錯(cuò)的選擇(過長的面試可能會(huì)嚇跑最搶手的候選人),但事實(shí)證明,"邊喝咖啡邊談話"式的面試很糟糕,它的結(jié)果并不比隨機(jī)選擇來得更好。
我們從那些CEO身上看到的并不是非凡的直覺或者社交技能,其實(shí)只是鄧寧-克魯格效應(yīng)(Dunning-Kruger effect),是一種認(rèn)知偏差,能力欠缺的人有一種虛幻的自我優(yōu)越感,會(huì)錯(cuò)誤地高估自己的真實(shí)能力,而且他們?cè)讲睿吖赖某潭染驮礁?。面試就是被研究得最充分的例子之一。不?jīng)過提前準(zhǔn)備,世界上沒有一個(gè)人可以在五分鐘左右的對(duì)話中評(píng)估出某人的工作技能,即興對(duì)話并不是面試,僅能達(dá)到見面聊天的效果。然而,有些雇主仍堅(jiān)持認(rèn)為,這是挑選出優(yōu)秀候選人的最高效的方式。
一次又一次的研究表明,這樣的做法是錯(cuò)誤的。天馬行空,沒有體系的面試會(huì)大大增加各種偏見,給面試官的個(gè)性發(fā)揮敞開大門,并最終大幅降低招聘的準(zhǔn)確性,結(jié)果可能比跳過面試隨機(jī)挑選還更糟糕。更嚴(yán)重的是,錯(cuò)誤的候選人可能會(huì)造成公司上百萬美元的經(jīng)濟(jì)損失,并導(dǎo)致項(xiàng)目的大幅延期。
編程考察和能力證明
對(duì)于程序員來說,糟糕的面試尤其讓人沮喪。而編程則是一項(xiàng)特別純粹,能證明自己能力的考察項(xiàng)。你僅僅通過肉眼,無法評(píng)估一座橋的質(zhì)量或者一頓飯的準(zhǔn)備工作量,但是代碼就不一樣,他特別純粹,所見即所得,好或者壞一目了然。不需要過多復(fù)雜的設(shè)置,候選人就可以展示自己實(shí)時(shí)編寫優(yōu)雅代碼的能力。然而,許多公司卻反其道而行之,經(jīng)常提出一些與他們正在招聘的工作完全無關(guān)的奇葩題目。
我們大多數(shù)人都有過切身的體會(huì)。你正在面試你的第一份程序員工作,而面試官卻想知道元素周期表上的哪個(gè)元素最能體現(xiàn)你的個(gè)性;你是一位資深的前端開發(fā),但是在長達(dá)一小時(shí)的面試時(shí)間里,卻都是一些"坑爹"測試題,比如closures(閉包)和hoisting(變量聲明提升)的用法;你從零開始搭建過多個(gè).Net應(yīng)用,但面試官卻希望你反轉(zhuǎn)二叉樹;你已經(jīng)為Linux內(nèi)核代碼做出貢獻(xiàn),但現(xiàn)在你必須猜測出面試室內(nèi)可以容納多少個(gè)乒乓球。這一切都讓你覺得崩潰。
在當(dāng)前程序員炙手可熱,工資飛漲的市場環(huán)境下,這樣的現(xiàn)象令人不解。越來越多的公司為了提升吸引力,允許遠(yuǎn)程辦工,部分初創(chuàng)的科技公司還提出一周只工作四天的優(yōu)厚待遇,獵頭更像詐騙犯一樣瘋狂地想聯(lián)系到我們。但是如果被錄用的候選人不能勝任這份工作,這一切不都白費(fèi)了,那為什么公司不愿在招聘階段花費(fèi)更多的投入呢?
優(yōu)化后的面試流程
下面讓我們來談?wù)劺硐氲木幊堂嬖噾?yīng)該是什么樣子,如果你的工作是寫Java代碼,那么流程可能是這樣的:
1. 在第一次接觸候選人時(shí),披露薪資范圍和福利情況
2. 提前查閱候選人的簡歷,了解他們的Java專業(yè)度或者開源經(jīng)驗(yàn)(任何其他的編程語言也類似;Groovy和Kotlin可以類比)
3. 在現(xiàn)實(shí)環(huán)境中觀察候選人近一小時(shí)的Java編碼情況,并根據(jù)預(yù)先制訂的、與工作相關(guān)的維度對(duì)他們進(jìn)行評(píng)分,如問題解決、空值安全、錯(cuò)誤處理、可讀性、命名規(guī)范、封裝度等
4. 進(jìn)行規(guī)范化、標(biāo)準(zhǔn)化的評(píng)估,考察候選人對(duì)JVM和基本命令行工具的熟練情況
5. 讓候選人知道什么時(shí)候可以接到后續(xù)通知
就是這樣,拒絕天馬行空的"文化面試",拒絕"小組測驗(yàn)",拒絕"編譯器優(yōu)化測驗(yàn)",拒絕讓候選人在業(yè)余時(shí)間從頭開始搭建一個(gè)15小時(shí)的項(xiàng)目。你只要正常評(píng)估他們的某項(xiàng)工作技能就可以了。
當(dāng)然,這并不是說我認(rèn)為編碼能力(或者其他一項(xiàng)技能)是候選人唯一重要的事。誠然,你想雇傭到可靠、聰明、誠實(shí)和善良的人,但你必須將自己的要求限制在可知的范圍內(nèi),就工作面試而言,選擇沒有很多。大多數(shù)應(yīng)聘者在求職面試中表現(xiàn)得很虛偽,其中絕大部分的人會(huì)撒謊。即使假定應(yīng)聘者很誠實(shí),十有八九的人還會(huì)有面試焦慮。如果你想真正了解某人在工作中的表現(xiàn),你根本不能依賴面試,那些都不是他們真正的樣子。當(dāng)然了,如果你看到任何不良的信號(hào),比如對(duì)待接待人員十分無禮,你大可以直接扔掉他們的簡歷,不過這也通常很少見。
這也是招聘的固有弊?。好嬖嚥]有我們想像中那么強(qiáng)大。許多雇主嘗試使用軟技能和人格測驗(yàn)的面試方法。但是,任何超出實(shí)際、不可衡量的指標(biāo)通常都是一種錯(cuò)覺,盡管看上去令人信服。2013年的一項(xiàng)研究表明,即使候選人的回答是隨機(jī)挑選的,面試官也會(huì)對(duì)候選人產(chǎn)生高度自信的印象!人們傾向于相信第一印象,無論他們是否準(zhǔn)確,這都會(huì)造成招聘過程中的失誤。任何僅通過直覺了解其他人的測試方法,都會(huì)降低結(jié)果的準(zhǔn)確性,唯一可以準(zhǔn)確衡量的只有任務(wù)能力。
測試編程能力的方法
這樣說來,如果現(xiàn)場編程是我們能做的最好選擇,那么衡量編程技能的理想方法是什么?不少商業(yè)產(chǎn)品如LeetCode,提供了一套編碼平臺(tái),并配有許多預(yù)先設(shè)計(jì)好、可以自動(dòng)評(píng)分的任務(wù)用來測試候選人。盡管他們比常規(guī)的方法要好得多,但我們并不打算推廣。你想一下,你的團(tuán)隊(duì)整天都在做針對(duì)性的、有現(xiàn)實(shí)意義的面試評(píng)測,你為什么要采用另一家公司的通用評(píng)測方法,并且還是付費(fèi)的?最近一次我在設(shè)計(jì)編程測試題時(shí),就從我的日常工作中選擇了一段比較優(yōu)秀(不是"膠水代碼")但不涉及任何公司業(yè)務(wù)的代碼,對(duì)其進(jìn)行調(diào)整以便能自己獨(dú)立運(yùn)行,并將函數(shù)簽名復(fù)制到LINQPad(一個(gè).net的代碼運(yùn)行平臺(tái))平臺(tái)上,而候選人的任務(wù)與我的工作需求很相似,要求實(shí)現(xiàn)這個(gè)函數(shù)。當(dāng)他們完成時(shí),我就知道他們是否可以勝任這份工作,基本上沒有比這更具實(shí)際意義的評(píng)測方法了。
此外,到目前為止,我經(jīng)歷過體驗(yàn)最好的面試流程,是與一家初創(chuàng)公司簽訂了一份為期一周的合同(一些公司稱之為"試鏡"),在這一周里我與他們的團(tuán)隊(duì)合作,他們給我分配任務(wù),我克隆了他們的倉庫代碼,用了幾個(gè)晚上的時(shí)間編寫并提交了PR(Pull Request),團(tuán)隊(duì)的其他成員給出了反饋意見,我根據(jù)反饋修改代碼以達(dá)到他們的標(biāo)準(zhǔn),最后他們將代碼合并,并按我的時(shí)薪標(biāo)準(zhǔn)支付了薪水。盡管我最終沒有接受他們的offer,但大家實(shí)現(xiàn)了雙贏——他們完成了一些額外的工作,而我得到了薪水。如果我接受了,通過一周的工作,證明了我的技能和團(tuán)隊(duì)合作能力不會(huì)有任何問題。多年后,如果我仍要找工作,這家公司仍在我的候選名單上,因?yàn)檫@種面試方式相當(dāng)靠譜。
也許這種方式不是你認(rèn)為的面試,但我要說這比面試好得多。你能想象花費(fèi)5分鐘與CEO們閑聊然后決定面試結(jié)果有多可笑嗎,這些CEO甚至都不會(huì)編碼。
出于安全或者公司規(guī)定等原因,一些團(tuán)隊(duì)可能無法采用上述這種面試方法,在這種情況下,你應(yīng)該盡量保證面試流程的統(tǒng)一。如果你不能讓面試看起來像是工作,至少讓每次面試都遵循相同的流程體系,并且在相同的指標(biāo)上比較候選人。
幫助候選人達(dá)到最佳狀態(tài)
一套標(biāo)準(zhǔn)統(tǒng)一,方法科學(xué)的面試流程也可以進(jìn)行靈活的調(diào)整。每個(gè)候選人都有不同的要求,不必為了標(biāo)準(zhǔn)化,被一些與面試指標(biāo)無關(guān)的事項(xiàng)損害到個(gè)人或者團(tuán)隊(duì)。例如,免疫力較低的候選人要求選擇遠(yuǎn)程面試以保證他們的健康;有身體或者神經(jīng)疾病的候選人期望分段面試以便休息,而不是一場三小時(shí)的面試馬拉松,這樣他們可能會(huì)表現(xiàn)得更好;一些有面試焦慮的候選人可能需要在面試前一兩分鐘與面試官建立友方關(guān)系,而對(duì)于其他人來說,他們寧愿跳過這部分閑聊環(huán)節(jié)。你應(yīng)該始終根據(jù)候選人的需要來調(diào)整面試的環(huán)境或者節(jié)奏,像這樣的調(diào)整是雙贏的,因?yàn)檫@樣讓每個(gè)候選人都有機(jī)會(huì)展示出他們最佳的狀態(tài)。如果你想找到最好的候選人,你就需要根據(jù)他們的最佳狀態(tài)來判斷。
此外,面試也是一個(gè)雙向選擇的過程,你在評(píng)估候選人,候選人也在評(píng)估你的公司和團(tuán)隊(duì)。如果因?yàn)楹蜻x人提出一些要求,而這些要求不在標(biāo)準(zhǔn)流程之內(nèi)就拒絕他們,那是得不償失的。
你希望獲取到客觀的、可比較的面試指標(biāo),候選人則希望獲到合理的便利和幫助,那么如何調(diào)解這對(duì)矛盾呢?可以采用軟件設(shè)計(jì)上的一條著名規(guī)律,即穩(wěn)健性原則:"對(duì)自己的工作要保守一些,對(duì)別人接受的事情要開放一些"。在面試中應(yīng)用這一原則,那么你應(yīng)該在標(biāo)準(zhǔn)化和相關(guān)技能的考察方面表現(xiàn)得保守,而在候選人需要幫助的方面表現(xiàn)得自由開放一些。這樣,兩全齊美,你既能獲取到想要的指標(biāo)數(shù)據(jù),候選人的表現(xiàn)也不會(huì)被不必要的條條框框限制住。
總結(jié)
經(jīng)過數(shù)十年的研究表明,結(jié)構(gòu)化的、真實(shí)的、聚焦工作內(nèi)容的面試才是黃金法則。所以,當(dāng)你決定使用計(jì)劃外的面試流程,或者某些無法量化的評(píng)估指標(biāo)時(shí),你應(yīng)該問自己,我是不是想選出一位不合適的候選人。
當(dāng)然,有時(shí)候仍然會(huì)看走眼,讓不合適的候選人混水摸魚,但這是無法避免的事。最好的面試機(jī)制也只能保證結(jié)果大部分是準(zhǔn)確的。所以不要害怕偶然的失誤,而再依靠直覺去評(píng)估候選人,計(jì)算機(jī)還偶爾會(huì)死機(jī)呢,但人們能回到手寫筆算的時(shí)代嗎?
科學(xué)的招聘機(jī)制也許是公司相對(duì)于競爭對(duì)手而言最大的優(yōu)勢,而要做到這一點(diǎn),最佳的途徑就是專注于你能考核能量化的指標(biāo)。
譯者介紹
李騰輝,51CTO社區(qū)編輯,目前在一家東南亞互聯(lián)網(wǎng)金融獨(dú)角獸擔(dān)任資深Java工程師,負(fù)責(zé)金融借貸平臺(tái)架構(gòu)設(shè)計(jì)及核心建設(shè)工作,對(duì)互聯(lián)網(wǎng)金融架構(gòu)、微服務(wù)體系有較深入的研究,期望在互金領(lǐng)域持續(xù)深耕。
原文標(biāo)題:The science of interviewing developers,作者:Isaac Lyman
鏈接:
https://stackoverflow.blog/2022/05/23/the-science-of-interviewing-developers/