自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

高效的面試程序員方式:結(jié)對編程

開發(fā) 前端
面試是技術(shù)研發(fā)企業(yè)永恒的話題。什么樣的面試方式才是最高效的?資深Java程序員Rod Hilton 5月27日在博客文章Different Kind of Technical Interview中介紹了他們公司的做法:結(jié)對編程。此文在Reddit上引起了強烈反響。

 

[[31641]]

 

(結(jié)對編程面試場景,其中兩個屏幕是互為鏡像的)

有一定職業(yè)編程經(jīng)驗的人一定都知道,業(yè)界標(biāo)準(zhǔn)的面試模式大致如此:進(jìn)入面試房間后,給你一個白色寫字板(國內(nèi)用紙卷做題應(yīng)該也很常見),讓你在上面寫出每個問題所對應(yīng)的代碼。

這樣的面試大家都會覺得不爽。在平時的工作環(huán)境中,你可以訪問API,或者通過搜索引擎來尋求你的答案。但面對一張白板/白紙,這些都不可能。白板上的問題一般不會涉及到太多整體設(shè)計方法,往往局限于簡單的算法問題,所以僅憑這一套面試題很難測試求職者的所有技能。說實話,一般程序員寫字都很糟,讓他們在一個大的白板上直接寫代碼感覺好不了。

我們喜歡編碼。我們喜歡坐在電腦旁,喜歡和同事一起探討自己的想法,并通過編譯器來驗證。白板面試僅能幫助面試官了解求職者的很少信息,但求職者不會從面試中學(xué)到任何東西。簡言之,這種標(biāo)準(zhǔn)的面試方式還有許多需要改進(jìn)的地方。

我所在的公司(譯注:指Rally軟件公司,5月底作者剛剛離開,加入了時代華納有線)正在嘗試另一種更高效的技術(shù)面試方式:結(jié)對編程。

新方式主要是在傳統(tǒng)面試基礎(chǔ)上增加了一些環(huán)節(jié)。求職者通過電話篩選后,會與團(tuán)隊中的兩個開發(fā)者進(jìn)行一個小時的直接面試(采用白板模式),隨后會安排應(yīng)聘者和其中一個開發(fā)者坐在一起,讓他們?nèi)ス餐瓿梢粋€任務(wù)。

我已經(jīng)嘗試用這樣的方式面試了一些應(yīng)聘者,新增加的這些面試環(huán)節(jié)取得了很好的效果,所以我希望在此稍詳細(xì)的介紹一下這個面試過程,并分享一下它帶來的好處。

具體怎么做?

我們有一個名為“pairing”的git遠(yuǎn)程倉庫,它包含一個基于IntelliJ的項目框架。其中包含Java、Ruby和JavaScript模塊,面試者可以從我們常用的語言中選擇自己最熟悉的。

每個模塊都有一個基本的項目結(jié)構(gòu)。比如,Java模塊包含一個maven pom.xml文件,和“main”和“test”目錄。這個pom文件也包含常見的庫以方便應(yīng)聘者編程。還有很多commons-lang工具包,以及Google Guava、JUnit、TestNG、Mockito和很多常用的庫。

每個模塊還有一個“README.txt”文件,它列出了一些練習(xí)。在Java模塊里有5個練習(xí)。求職者可以從中挑選一個自己最感興趣的項目。這些練習(xí)項目在結(jié)對編程的情況下大概需要花費兩個小時,難度級別一樣。同時,它們廣泛覆蓋了開發(fā)者所要解決的各種不同的問題。有一些涉及到大量的字符串和文本操作,另一些本質(zhì)上則是純粹的數(shù)學(xué)問題。

比如,其中的一個問題是寫一個程序來分析一組撲克牌,并選出它***的組合牌型(順子、滿堂紅即三帶兩、對子等)。起初,我們計劃采用兩組撲克牌,并從中選出一組獲勝者,但考慮到這樣會使難點加大,為了與其余4個項目難度相當(dāng),我們***又做了一些簡化。

我向應(yīng)聘者解釋說,他們并不是必須要完成練習(xí)(這點很重要)。“我們的目標(biāo)不是完成這個任務(wù),而是讓彼此感受一下對方喜歡如何工作。”但很多面試者仍試圖能盡快完成該任務(wù),每當(dāng)我察覺到他們這么做時,我就開始問一些關(guān)于代碼的值得思考的問題,以便他們能慢下來。一旦應(yīng)聘者意識到他(她)已沒有機(jī)會完成這個任務(wù)時,他們就會慢下來,停止沖刺。

當(dāng)面試者寫了一些代碼后,我會尋問他們計劃如何測試代碼的準(zhǔn)確性。一些人喜歡經(jīng)常運行所寫代碼,一些人會寫一個“public static void main”方法來驗證所寫代碼是否實現(xiàn)了正確的功能,還有一些人會通過單元測試來驗證。無論他們?nèi)绾位卮?,我都會建議他們繼續(xù)做下去,并確保到目前為止,所寫的代碼是正確的。這是一個很好的建議。因為在練習(xí)過程中最糟糕的事情就是,直到面試臨近結(jié)束時,他們才運行自己所寫的代碼,結(jié)果發(fā)現(xiàn)了一堆的Bug,在剩下的時間里很難調(diào)試完。如果某個應(yīng)聘者喜歡寫測試代碼,那我將和他(她)一起做乒乓結(jié)對編程(譯注:結(jié)對編程的一種,在結(jié)對編程引入測試驅(qū)動開發(fā),兩個人輪流編寫測試,由對方編寫能通過測試的代碼,能有效提高代碼質(zhì)量)。

很多時候,面試者都會問一些諸如“如果輸入無效,我們應(yīng)該怎么做?”之類的問題。我通常會反過來問他們,他們打算怎么做。在練習(xí)中,并沒有所謂的完全錯誤的答案。有時,他們會提出想用Google搜索一些東西或查閱一些文檔,可能有人會覺得有作弊之嫌。但我會說,對他們使用何用工具、資源沒有任何限制。并反復(fù)強調(diào)說,他們應(yīng)該像在平常工作中解決問題那樣來完成這個任務(wù)。

在練習(xí)的***20分鐘左右時,我喜歡讓面試者停止編碼,并和他們一起討論他們編寫的代碼。應(yīng)聘者為什么采用了某種設(shè)計,而沒選用另一種;他(她)是否還有其他想做的事等相關(guān)問題。我也會問他們,“如果我們計劃和其他工程師一起對這些代碼進(jìn)行代碼審查,在審查之前,你計劃對這些代碼做些什么?”通常在短短的兩個小時內(nèi),面試者很難按他們所設(shè)想的去重構(gòu)代碼,所以我也希望了解,如果還有時間,他們將會從何入手。

當(dāng)然,他們離開后,這就是我要做的事。其他的一些開發(fā)者和我一起審查這些代碼,問我一些相關(guān)的問題,并就諸如代碼風(fēng)格等問題展開討論。

有哪些好處?

上述面試過程所帶來的反饋效果是相當(dāng)不錯的。首要的是,應(yīng)聘者也很喜歡這種面試方式。相比在一個安靜的屋里拿著白板筆苦思冥想,他們感覺在實際的電腦旁寫代碼更舒服。他們覺得這種面試方式比傳統(tǒng)面試方式更輕松(剛開始面試者的反應(yīng)讓我都有些驚訝)。每個經(jīng)歷過這種面試過程的應(yīng)聘者都表示很喜歡,我們今后的面試都將按這種方法來進(jìn)行。而且,這種面試不再是單方面的了:應(yīng)聘者感覺面試就好像在工作一樣,雙方可以很好地對彼此進(jìn)行評估。

另外,相比普通面試,面試官通過上述面試過程,能更好地了解應(yīng)聘者的“軟技能”。他的交際能力如何?他和同事一起思考、解決問題的過程是怎樣的?他喜歡協(xié)作,還是喜歡獨立工作?他是否喜歡開玩笑?通過這些編碼實踐中,我對這些問題都能找到了很好的答案。

最重要的是,你實際上正在他們每天實際工作的環(huán)境中面試他們。因為開發(fā)者一般不會在白板上編碼,所以白板面試只能測試應(yīng)聘者在做白板面試時的好壞程度。他們可以用編譯器或解釋器,他們可以用測試工具,他們可以Google搜索,在結(jié)對編程練習(xí)中他們可以用所有這些輔助工具,但在白板面試過程中,這些都是不允許的。在熟悉的工作環(huán)境中測試開發(fā)者可以算是評審他們的一種極其高效的方法。

因為這種面試長達(dá)2個小時,并且只關(guān)注一個任務(wù),所以更有機(jī)會了解面試者是如何進(jìn)行編碼設(shè)計的,比起“請寫出一只雞的對象模型”這種類型的設(shè)計問題來得更加實在些。不必要求應(yīng)聘者畫出UML,你就可以了解他的設(shè)計能力如何,因為他們在現(xiàn)實工作中可能并不總畫UML圖。

在主要的開發(fā)領(lǐng)域,采用上述面試過程是很重要的,不是呆在一旁的房間里,而是開始結(jié)對編程實踐。面試者有機(jī)會看到他們將工作的環(huán)境,并有助于他們對文化環(huán)境做出評價。如果你工作在一個嘈雜、非正式的辦公環(huán)境中,開發(fā)者可隨時播放音樂和彼此開玩笑,當(dāng)應(yīng)聘者真正參與到此環(huán)境中時,面試官可以看到他們是如何融入到環(huán)境中的。

還有一點很重要,它感覺并不像是在面試。它并不是由面試官來拷問,然后面試者寫下所有代碼來回答。這并不是現(xiàn)實生活中結(jié)對編程的工作方式,所以在結(jié)對編程練習(xí)中,它也不應(yīng)該是這樣的。面試官也應(yīng)該寫一些代碼,以顯平等,面試者也會感覺更舒服些(應(yīng)聘者當(dāng)然要更多地負(fù)責(zé)解決問題的任務(wù))。

基于應(yīng)聘者和面試官都喜歡這種面試過程,目前我很難有理由去進(jìn)行白板面試。就我個人而言,在和應(yīng)聘者進(jìn)行結(jié)對編程練習(xí)之前,我甚至都不看應(yīng)聘者的簡歷。在結(jié)對編程之前,我覺得沒有必要了解應(yīng)聘者的任何事情,我喜歡在和他們完成任務(wù)的2個小時里去了解面試者的一切。

如果你在招聘優(yōu)秀程序員的過程中有困難的話,可以嘗試一下這個面試過程。把結(jié)對編程作為面試過程的一部分,看看效果如何。

原文鏈接:Different Kind of Technical Interview

討論

此文引起了熱議。有人提醒,在結(jié)對編程面試中不要讓面試者在生產(chǎn)代碼中開發(fā),會涉及法律問題。

還有人認(rèn)為這種面試會耗費更多資源,很多公司未必能效仿。這種說法當(dāng)然引起了很多人的炮轟,很顯然,這是典型的磨刀不誤砍柴工,招到一個優(yōu)秀的新同事會事半功倍。而作者回答說,其實資源與原來的方式相同,因為他們公司之前是三輪面試,***輪電話篩選,第二輪是兩個考官進(jìn)行的白板面試(1小時),第三輪本來是另一組1小時的兩考官白板面試,現(xiàn)在換成了一考官2小時結(jié)對編程。

還有人質(zhì)疑,為什么非要結(jié)對編程呢?給面試者一臺電腦,一個任務(wù),讓他編代碼去,然后再問問問題,不也行嗎?作者回答,通過結(jié)對編程,很逼近實際的合作場景,可以全面了解面試者,這是另一種方式無法做到的。

【編輯推薦】

  1. Java侵權(quán)案鮮為人知的歷史內(nèi)幕:谷歌"螳螂捕蟬"
  2. 相同中的不同:Java程序員應(yīng)該停止低看C#
  3. 程序員新招:Java與C++混合編程
  4. IT界那些性感的讓人尖叫的程序員
  5. 看老外程序員如何向妻子解釋設(shè)計模式
責(zé)任編輯:陳貽新 來源: CSDN
相關(guān)推薦

2019-04-16 14:03:47

編程程序員代碼

2015-03-18 10:20:32

程序員程面試取勝編程面試技巧

2016-12-08 10:53:46

程序員編程

2014-06-05 09:23:47

程序員高效

2013-01-10 09:22:58

程序員面試程序員面試經(jīng)歷

2015-10-26 14:21:58

程序員面試編程面試

2012-08-30 10:05:40

編程編程語言程序員

2012-06-15 09:54:58

程序員編程開發(fā)

2016-04-28 11:17:33

互動出版網(wǎng)

2013-11-14 10:05:25

程序員職業(yè)轉(zhuǎn)型

2015-08-19 09:10:37

程序員面試

2015-12-24 10:28:37

程序員面試技巧

2015-02-03 02:40:33

程序員盲人程序員

2014-11-10 09:46:57

程序員

2013-05-07 09:11:26

程序員程序員特征

2015-08-13 08:56:40

高效程序員共同特征

2013-02-19 10:12:59

2015-08-19 08:51:38

程序員面試糟糕

2013-08-20 09:33:59

程序員

2009-02-27 09:25:28

編程語言程序員C#
點贊
收藏

51CTO技術(shù)棧公眾號