你要面試一個程序員,應(yīng)該問他什么問題?
首先,最重要的是,你自己一開始就應(yīng)該想清楚:
1.需要新員工完成什么樣的任務(wù)?
2.怎樣的人能完成這樣的任務(wù)?
3.哪些途徑和方法可以發(fā)現(xiàn)這樣的人?
只有明確這些根本性的問題,才能正確高效地完成面試。
假定你對上一節(jié)的三個問題,已經(jīng)有了清晰的想法,那么接下來就可以設(shè)計如何提問了。
有一些提問的原則,是你應(yīng)該遵循的:
每一個面試問題都有明確的目的。你不僅自己了解,還能向其他面試官解釋清楚。
多提一些開放性(Open-ended)的問題,而不是那種用Yes/No就可以回答的問題。這樣做使你有機會與面試者展開討論,并且提出后續(xù)的問題,盡可能多地了解對方。
不要問宗教、家庭、健康、個人隱私等方面的問題。
不要問太復(fù)雜的問題。因為面試者沒有太多思考時間,所以無法周全地回答,你也就無從判斷他的能力了。
為了確認面試者是勝任的,你可以問一些與職位相關(guān)的專業(yè)方面的問題。(不過通常來說,一次面試不足以看出一個人的專業(yè)能力。)
比如,你的招聘職位是系統(tǒng)管理員,你可以問如何快速地在50臺機器上部署Linux?(提示:正確答案不是刻錄50張安裝光盤。)
另外,你還應(yīng)該向面試者了解他的過去,因為過去是未來的最好預(yù)測依據(jù)。不過,提問的重點不要僅僅是他過去的成果,更要關(guān)注在當時的環(huán)境中,他是如何決策和實施的。
因為人是會發(fā)展的,所以某種程度上,面試者的綜合素質(zhì)要比他的專業(yè)能力更重要。
所以,具體的技術(shù)問題(如何調(diào)用API、什么是設(shè)計模式、編程語言的語法等等)可以少問一些,更應(yīng)該關(guān)注面試者的事業(yè)心、對工作的熱情、進取心、自律能力、毅力等方面。
下面是一些典型問題:
Whydidyougetintodevelopment?
你為什么開發(fā)軟件?
Howmanytechnicalbooksdidyoureadinthepastyear?
去年你讀了幾本技術(shù)書籍?
Whatwasyourfavoritetechnicalbookinthepastyear?Whatdidyoulearnfromit?
去年你最喜歡的技術(shù)書籍是哪本?你從中學(xué)到了什么?
Whatwebsitesdoyoureadregularly,relatedtodevelopment?
平時你經(jīng)常訪問哪些編程類網(wǎng)站?
Doyoumaintainanyopen-sourceprojects?
你有自己的開源項目嗎?
Doyoucodeinyourspare-time?
業(yè)余時間你編程嗎?
Doyouloveprogramming,ordoyoudoitforthemoney?
對于你來說,編程是一種愛好,還是一種謀生手段?
Haveyouaccomplishedanythingimportantinyourcareeryet?Doyouwantto?
你的職業(yè)生涯之中有什么重要的成就?它是你主導(dǎo)的嗎?
Whatwouldmakeyoufeelthatyouhavedonesomethingimportant?
什么事情會讓你很有成就感?
某些情況下,你可能需要了解面試者的分析判斷能力,看他能否全面地思考問題、客觀地評價自己。
那么,你可以依次提出這樣三個問題:
What‘syourfavoriteprogramminglanguage?Why?
你最喜歡的編程語言是哪種?為什么?
Ifyoucouldaddonefeaturetoyourfavoritelanguage,whatwoulditbe?Why?
如果允許你為這種語言加一種功能,你會加什么功能?為什么?
Ifyoucouldremoveonefeaturefromit,whatwoulditbe?Why?
如果允許你取消一種功能,會是什么功能?為什么?
這里的重點是,讓面試者從正反兩方面評價一件自己熟悉的東西,看看他的思維是否片面。答案無所謂對錯,只要面試者有一個明確的立場,能夠從正反兩方面說出令人信服的理由,就可以了。比如,某個軟件的口碑不好,但是面試者說他很喜歡,而且說得出一大堆理由,清楚地解釋了這種軟件的優(yōu)點和缺點在哪里,這樣就很好。
你還可以把這些問題,套用在其他東西上面,比如操作系統(tǒng)、文字編輯器等等。