開發(fā)團(tuán)隊(duì)尋找優(yōu)秀程序員的六個(gè)測(cè)試技巧
過去我參加過許多場(chǎng)編程測(cè)試。我喜歡參加這些活動(dòng),因?yàn)榭偸悄軌蚩吹讲煌某绦騿T在設(shè)計(jì)時(shí)會(huì)遇到哪些挑戰(zhàn)。但不幸的是,這些測(cè)試都不是非常棒。下文將列出某些有助于提高程序員測(cè)試質(zhì)量的建議:
Programming passion(from techcareertips.com)
1.保持關(guān)聯(lián)性
許多測(cè)試存在的問題是,內(nèi)容與該職業(yè)并不相關(guān)。編程測(cè)試背后的想法是確保就職者擁有勝任職位的能力。所以,不應(yīng)該詢問你認(rèn)為“優(yōu)秀程序員”應(yīng)該具備的主觀問題。并不是說你不應(yīng)該測(cè)試基礎(chǔ)知識(shí),因?yàn)槌绦騿T確實(shí)需要了解這些。重點(diǎn)在于,你不能只單純?yōu)榱四承└拍顏磉M(jìn)行測(cè)試。
C++中的“friends”便是***的例證。幾乎每個(gè)我參加過的編程測(cè)試都會(huì)詢問此類問題。到現(xiàn)在位置,我的編程經(jīng)驗(yàn)已經(jīng)有5年之多,但是我只用過它們兩次。***次是在大學(xué)的時(shí)候,第二次就是在參加編程測(cè)試的時(shí)候。我詢問過其他一些高級(jí)程序員,他們也都沒有用過。為什么要詢問與他們所要開展的工作無關(guān)的問題呢?我知道肯定有些人使用過,但是如果你團(tuán)隊(duì)中的多數(shù)程序員都從未碰過,那么為什么新程序員需要掌握這些內(nèi)容呢?如果新程序員確實(shí)會(huì)使用這些內(nèi)容的話,有可能帶來的好處是在解決相同的問題時(shí)提出不同的解決方案。
當(dāng)然,理想狀況是能夠雇傭到知道所有編程相關(guān)內(nèi)容的程序員。但是現(xiàn)實(shí)情況并非如此。因而,重點(diǎn)在于確保他們所掌握的知識(shí)與你所需要的相符。詢問不相關(guān)的問題不會(huì)幫助你找到合適的程序員,只會(huì)幫你找到那些深知如何通過編程測(cè)試的人。
2.不要詢問愚蠢的問題
為何要浪費(fèi)時(shí)間去詢問寫在紙上的代碼編譯錯(cuò)誤這些問題呢?現(xiàn)在,編譯器挑出錯(cuò)誤的速度要比人工快得多。測(cè)試程序員能夠找到這些簡(jiǎn)單的錯(cuò)誤就像是讓一位英語教授去尋找拼寫錯(cuò)誤而不是矯正句子結(jié)構(gòu)。應(yīng)該讓程序員去找出代碼中的邏輯錯(cuò)誤。讓他們根據(jù)代碼邏輯來尋找問題。
而且,不要向程序員提某些帶有花招的問題?;ㄕ惺降膯栴}需要大量的時(shí)間才能找得出來,而當(dāng)你已經(jīng)見過這個(gè)問題時(shí),你會(huì)很迅速地找出來。簡(jiǎn)單地說,花招式的問題測(cè)試的是程序員以前是否被提過這個(gè)問題,而不是這個(gè)程序員有多棒。
3.在詢問優(yōu)化問題時(shí)應(yīng)當(dāng)謹(jǐn)慎
編譯器和平臺(tái)的變化非常迅速,尤其是在數(shù)年時(shí)間內(nèi)便會(huì)出現(xiàn)全新硬件的游戲行業(yè)。出于這些原因,你必須在讓程序員優(yōu)化代碼時(shí)異常謹(jǐn)慎。即便是數(shù)年前堪稱精湛的優(yōu)化技術(shù)現(xiàn)在可能也已經(jīng)落伍了。
比如,某些現(xiàn)代CPU(游戲邦注:尤其是主機(jī)上的CPU)在執(zhí)行branches時(shí)非常緩慢。使用緩存的查找表格來作常規(guī)優(yōu)化可能不一定是最快的優(yōu)化方式。更為重要的是,詢問優(yōu)化的普遍概念。
如果他們能夠解釋出某些***的做法,那么這就是你要尋找的人。
如果你的工作并沒有明確與優(yōu)化相關(guān),那么我會(huì)提出某些具體的問題。在游戲中,代碼優(yōu)化非常重要,所以這樣做是很有必要的。但還是要提醒的是,詢問某些更高層次的概念問題,而不是給出具體的代碼然后讓他們?nèi)ゾ帉懗鲎羁斓拇a。最棒的求職者可能會(huì)說,在未知具體硬件和簡(jiǎn)況的情況下,他們會(huì)選擇編寫相對(duì)簡(jiǎn)潔的代碼而不是他們所認(rèn)為的優(yōu)化代碼。
4.根據(jù)團(tuán)隊(duì)的編程來編寫測(cè)試
如果你對(duì)需要在測(cè)試中提出的問題舉棋不定,那么最實(shí)用的方法是冷靜下來,查看或與團(tuán)隊(duì)成員交談他們正在執(zhí)行的任務(wù)。詢問團(tuán)隊(duì),他們將多數(shù)時(shí)間花在哪里。隨后,你可以根據(jù)耗費(fèi)時(shí)間最多的任務(wù)來編寫測(cè)試。
這也能夠保持測(cè)試的相關(guān)性,防止你提出不必要的優(yōu)化問題。我發(fā)現(xiàn)80%的工作時(shí)間都在做相似的任務(wù),所以掌握可用于這些任務(wù)技能的求職者正是你所需要的雇員。很顯然,如果你正在尋找的是特別職位的人選,這種方法可能并不奏效,但是當(dāng)你尋找的是普通程序員,這樣做確實(shí)能夠提供好處。
5.保持測(cè)試的簡(jiǎn)單化
我發(fā)現(xiàn),許多測(cè)試中的問題都過于復(fù)雜。你完全能夠明白他們要詢問的問題,但是他們卻使用了大量復(fù)雜的例子來提出這個(gè)問題,而不是簡(jiǎn)單地直接提出問題。為何不直接向參加測(cè)試的人直接提出問題,而要讓他們花數(shù)分鐘的時(shí)間去探索問題呢?
應(yīng)該復(fù)雜的不是問題,而是答案。盡管你要的不只是教科書上的答案,但***在面試前提供健全復(fù)雜的答案。
6.使用面試來判斷思考過程
編程測(cè)試能夠清除出那些根本無法編程的程序員,但是無法體現(xiàn)出程序員在解決問題時(shí)的思考過程。嘗試通過書面測(cè)試來實(shí)現(xiàn)這個(gè)目標(biāo)不太實(shí)際,應(yīng)將這個(gè)過程留到面試中。
我喜歡詢問簡(jiǎn)單的問題,程序員必須在白板上解決編程問題。這種做法的主要目的在于發(fā)現(xiàn)程序員在解決問題中的思考過程。作為程序員,你知道解決問題的正確方法,你會(huì)很快判斷出該程序員是否明白他們要解決什么問題。而且,你也有可能因?yàn)樗颂岢瞿銖奈聪氲竭^的有趣解決方案而感到驚奇。無論出于何種情況,他們編寫的代碼都不重要,重要的是他們解決問題的方式。讓他們?cè)诮鉀Q問題時(shí)大聲說出他們的想法。你需要考慮的是,這些想法是否會(huì)令問題加劇,該程序員是否是團(tuán)隊(duì)所需的合適人選。
結(jié)論
這些是編寫優(yōu)秀編程測(cè)試的簡(jiǎn)單技巧。我希望能夠看到更多能夠找到優(yōu)秀程序員的測(cè)試,而不是嘗試去尋找某種特殊程序員。
原文鏈接:http://gamerboom.com/archives/35862
【編輯推薦】