- 相關(guān)推薦
如何在面試中發(fā)現(xiàn)優(yōu)秀程序員
我曾在一次面試中要求一個(gè)很有經(jīng)驗(yàn)的嵌入式軟件開發(fā)人員寫出一個(gè)反轉(zhuǎn)一段字符串并輸出到屏幕上的程序。他在這個(gè)題目上掙扎了很久。這個(gè)家伙是個(gè)很神奇的人。你給他一些沒用的零件,他能建造一個(gè)機(jī)器人,并能用程序控制它在屋里走來走去。他曾經(jīng)參與過研制衛(wèi)星,并且這個(gè)衛(wèi)星現(xiàn)在正在軌運(yùn)行。他只用左腦都比我能干。但是對于這個(gè)題目他卻從來、從來沒機(jī)會干過:在屏幕上顯示什么東西。
有些人就有這種技能,能在面試中問出正確的問題,發(fā)現(xiàn)優(yōu)秀的程序員。而有些人卻害怕提問,畏首畏尾,問一些從網(wǎng)上拷貝下來的問題,自己沒主見,只會跟隨其他面試官的意見。但面試對于大多數(shù)開發(fā)人員來說是一項(xiàng)很基本的技能。一次失敗的招聘會給一個(gè)組織造成很嚴(yán)重的長期的后果,因?yàn)楹芩墓蛦T會把其他很水的人也帶進(jìn)公司。另一方面,把優(yōu)秀的應(yīng)聘者拒之門外對公司也是一種傷害。
一場技術(shù)性的面試至少包括三個(gè)部分。在第一部分里,我們要做的是看應(yīng)聘者的簡歷上寫的是否符合實(shí)際情況。在第二部分里,我們要評估一下候選者究竟有多少實(shí)際經(jīng)驗(yàn)。最后,我們要用一些問答選項(xiàng)或編程問題來測試這些經(jīng)驗(yàn)。
第一部分:測試簡歷的真實(shí)性
有一次我跟一位同事面試一個(gè)候選人。當(dāng)面試完之后,我覺得這個(gè)候選人還可以,但不是十分出色?晌业耐驴雌饋砗懿粷M意。“他撒謊,他說他會XXX技術(shù),可很顯然他根本沒有做過這種技術(shù)。絕對不能要這種人。”雖然這XXX技術(shù)對我們公司并不是很重要,“因?yàn)樗隽诉@個(gè)慌,”我的同事繼續(xù)說,“我就不會相信他在簡歷上寫的任何東西了。”
應(yīng)聘人員應(yīng)該在簡歷中用一種很積極的色彩來描繪自己。然而,這種積極的描繪應(yīng)該有個(gè)度,過了這個(gè)度,就表達(dá)的不正確了。在上面的例子中,我并不和我的同事一樣覺得這個(gè)事很嚴(yán)重,因?yàn)槲沂孪染图僭O(shè)了,簡歷上的任何東西都是假的,除非被證明。如果簡歷上說,“擅長于XXX技術(shù)”,那么我就認(rèn)為這個(gè)應(yīng)聘者可能僅是知道XXX技術(shù)這個(gè)名字。如果簡歷上說,“在一個(gè)開發(fā)多線程股票交易系統(tǒng)的團(tuán)隊(duì)里工作,”那我就會認(rèn)為應(yīng)聘者可能只是為這個(gè)系統(tǒng)挑選了一下背景的顏色。我的要求一向不嚴(yán)格,除非碰到了一位有十年工作經(jīng)驗(yàn)、已經(jīng)不再寫代碼的家伙。如果有人說他開發(fā)了OpenOffice軟件的文本格式化工具,或擁有哲學(xué)博士學(xué)位,那我們就很容易假設(shè)他們有什么技能了。假設(shè)一無所有。一切都要證實(shí)。
對于簡歷上每條相關(guān)的描述,我會首先估摸一下應(yīng)聘者的實(shí)際情況。然后,我通過下面的交談來證實(shí)。
開發(fā)過一個(gè)實(shí)時(shí)操作系統(tǒng)作為練習(xí)項(xiàng)目。
你工作的團(tuán)隊(duì)有多大?15個(gè)成員?哦,那么,你實(shí)際上負(fù)責(zé)哪部分的?消息隊(duì)列?很好!請描述一下一個(gè)高優(yōu)先級的任務(wù)向一個(gè)低優(yōu)先級的任務(wù)發(fā)送消息時(shí)會發(fā)生什么情況?
完全自主開發(fā)了一套為無線安全系統(tǒng)使用的音頻傳輸協(xié)議。
你的團(tuán)隊(duì)有多少人?只有你?哦,你是如何測試的?你為什么不使用RTP呢?
給XXX引擎修復(fù)Bug。
請你描述一下你曾發(fā)現(xiàn)過的一個(gè)特別有挑戰(zhàn)性的bug,以及你是如何修復(fù)它的。
第二部分:發(fā)現(xiàn)實(shí)際的經(jīng)驗(yàn)
擁有更多的經(jīng)驗(yàn)是一個(gè)優(yōu)秀人才的很好的指標(biāo)。有經(jīng)驗(yàn)的開發(fā)人員都是從犯錯(cuò)誤中成熟的。他們知道何時(shí)該,何時(shí)不該使用設(shè)計(jì)模式。他們有第六感,能感覺到需求的哪一部分需要修改,哪一部分要保持原樣。他們知道何時(shí)該偷懶,何時(shí)該考究。是真實(shí)的經(jīng)驗(yàn)讓優(yōu)秀的開發(fā)者和平庸的開發(fā)者之間的差距大的無法跨越。
并非所有的經(jīng)驗(yàn)都是等效的。很有可能,對于某個(gè)人,他通過多年的工作,在很多的任務(wù)中寫或重新無數(shù)的代碼,犯了許多的錯(cuò)誤,就能獲得扎實(shí)的技能。而另一種情況,一個(gè)人會在十年的時(shí)間里只在一個(gè)項(xiàng)目里修改了一行代碼,沒有學(xué)到任何新的東西。
發(fā)現(xiàn)隱藏的時(shí)間
很多偉大的程序員都是在他們大學(xué)的第二年就開始編程了。當(dāng)他們離開學(xué)校時(shí),他們就已經(jīng)有了幾年的工作經(jīng)驗(yàn)了。還有,有些很神奇的程序員在他們很小的時(shí)候就開始學(xué)習(xí)編程的藝術(shù)了。我也認(rèn)識好幾個(gè)人在他們十幾歲或更小時(shí)就寫出來一些不算小的程序了。這些信息你是在簡歷上找不到的,需要你在面試中把它們引誘出來。
你是怎么進(jìn)入到軟件開發(fā)這一行的?
你曾經(jīng)學(xué)過的第一種編程語言是什么?
經(jīng)驗(yàn)的密度
很多神奇的程序員只是在他們工作的時(shí)間里編碼。這很好,工作生活很平衡,你沒有理由不雇傭這樣的人。然而,在工作和學(xué)習(xí)之余做一些個(gè)人的編程項(xiàng)目是一個(gè)優(yōu)秀的人才的很好的指標(biāo)。有業(yè)余編程經(jīng)驗(yàn)的應(yīng)聘者很明顯有更豐富的經(jīng)驗(yàn),更適合公司。沒有個(gè)人項(xiàng)目?這里有其他幾點(diǎn)也能做這方面的指標(biāo):
在很小的團(tuán)隊(duì)或小組里工作。
參與過很多各種各樣的項(xiàng)目。
對一個(gè)大型項(xiàng)目的各個(gè)抽象層面上都有很詳細(xì)的了解。
在一個(gè)項(xiàng)目組里作為主要開發(fā)者。
第三部分:驗(yàn)證經(jīng)驗(yàn)
在對應(yīng)聘者有了一個(gè)基本的真正經(jīng)驗(yàn)水平的感覺后,就開始對他們進(jìn)行重要的實(shí)際編程經(jīng)驗(yàn)的驗(yàn)證了。幾分鐘的時(shí)間對于一個(gè)真正的測試肯定是很不充分的,但也只有這樣了。我們可以通過對編程開發(fā)的各個(gè)領(lǐng)域進(jìn)行提問來認(rèn)識應(yīng)聘者對這些知識掌握的深度和廣度。當(dāng)然了,你對應(yīng)聘者技能水平的看法會由于你自身的經(jīng)驗(yàn)水平而有所偏向。對于你不太熟悉的領(lǐng)域你不可能對答案做出正確的判斷。所以我們一般同時(shí)會有好幾個(gè)面試官。
工作職務(wù)的不同會有不同的面試主題。然而,下面幾個(gè)領(lǐng)域是很常見的:
數(shù)據(jù)結(jié)構(gòu)和算法
多線程
字節(jié)操作
內(nèi)存分配
對象,繼承,設(shè)計(jì)模式
遞歸
匯編知識和程序運(yùn)行原理
我選擇的每個(gè)領(lǐng)域都有一個(gè)精心挑選的很基礎(chǔ)的問題(“什么是一個(gè)信號?”)。問題很基礎(chǔ),只要應(yīng)聘者在這個(gè)領(lǐng)域做過一些工作就能回答上這些問題。每個(gè)領(lǐng)域都有一些其它的較深入的問題。候選人對這些問題的回答能證明他們到底是不是專業(yè)。例如,如果你問一個(gè)有經(jīng)驗(yàn)的嵌入式軟件開發(fā)人員如何把0x4c轉(zhuǎn)化成二進(jìn)制,他寫出一個(gè)4×16+12,這就不是很對了。
編碼問題
在完成了上面的步驟后,我通常就已經(jīng)能認(rèn)定了這個(gè)候選人是否能過關(guān),如果還有困難,那編碼問題會幫我掃除最后的障礙。這個(gè)很重要,即使在電話面試?yán)镆膊荒苈┻^。為了行之有效,在面試之前,你要好好的思考和計(jì)劃要提出的編碼問題。問錯(cuò)誤了,回答也就沒意義了。
首先,問題的選擇必須基于應(yīng)聘者的工作經(jīng)驗(yàn)之上。如果你想起來3D飛機(jī),想把所有問題都圍繞著它進(jìn)行,這樣會有很妙的問題。但你還是省省吧,吃午飯時(shí)跟同事說說還行。如果招聘的工作跟3D圖形沒一點(diǎn)關(guān)系,那這個(gè)候選人就肯定被不公平的排除掉了。
問題必須精確的表達(dá)出來。“寫出一個(gè)用來移動一摞卡片的函數(shù)”,這個(gè)表述就十分的含混不清。要給出功能性標(biāo)題,避免誤解,這種事情經(jīng)常發(fā)生。如果你不小心,面試者有可能回答的是一個(gè)比你提出的問題更難或者更簡單的問題,而不是你想要問的。如果回答的是更難的問題,那還好,除非難題讓他目瞪口呆。如果回答的是更簡單的問題,那沒有什么用處。為了防止浪費(fèi)大量的時(shí)間,在他們答題的幾分鐘后問一下他們的答題綱要,看看他們的理解是否在正確的方向上。
更進(jìn)一步
上面的指導(dǎo)并不能解決所有問題。這些主要是針對工作經(jīng)驗(yàn)。你也許會錯(cuò)過一些沒有多少經(jīng)驗(yàn)但有非常大的潛力的優(yōu)秀程序員。特別是當(dāng)面試官想通過一些不用編碼的難題來考察應(yīng)聘者解決問題的能力的時(shí)候。
這里所說的這些面試技巧都是要基于一種假設(shè)、可能性、內(nèi)部直覺。假設(shè)候選人是一個(gè)很出色的開發(fā)人員。那一個(gè)出色的開發(fā)人員應(yīng)該具有哪些品質(zhì)呢?你沒法直接的測量這些品質(zhì),所以你需要想:一個(gè)具有這些品質(zhì)的優(yōu)秀開發(fā)人員對這樣一個(gè)特定問題進(jìn)行快速回答的可能性是多少?你不可能通過面試對一個(gè)候選人進(jìn)行100%正確的評價(jià),但通過盡量周全的提問,你會做到很接近這個(gè)結(jié)果。
【如何在面試中發(fā)現(xiàn)優(yōu)秀程序員】相關(guān)文章:
面試技巧 如何在面試中交談08-09
如何在面試中展現(xiàn)自信12-19
如何在面試中智取工作07-26
如何在面試中談“失敗經(jīng)歷”?08-09
如何在面試中展現(xiàn)精彩的自己11-22
如何在面試中談“失敗經(jīng)歷”08-02
如何在面試中化劣勢為優(yōu)勢11-19
如何在面試中抓住主動權(quán)09-27
如何在面試中巧妙回答失敗經(jīng)歷03-19
如何在英語面試中脫穎而出?07-07