上個月,在負責技術晉升評審的過程中,有人認為在評審過程中以述職講述為主,可能對某些比較擅長寫代碼而不擅于演講的同學不公平。而對于中級別的程序員技術晉升我們更傾向于篩選出擅長編程,而非僅僅是說得好的同學。
這個過程里面,存在四種情形:
代碼寫得好,也說得好
代碼寫得好,但說不出
代碼寫得不太行,但說得很好
兩者都不行
晉升篩選的目標是選出 1 和 2 兩種,篩掉 3 和 4。這里面的挑戰(zhàn)在于,在采用述職答辯這種形式下,1 和 3 這兩種很難分辨,同時 2 和 4 也很難分辨。關鍵就在于如何識別并判斷代碼寫得好還是不好的問題,區(qū)分度的標尺怎么定的問題。這個判斷問題在面試程序員時也存在,要不就先從「代碼面試」說起吧。
1
在我過去十年多一些的從業(yè)經歷中,倒是面試過很多次,其中不乏面試寫代碼的。
剛畢業(yè)那年第一次去面試,聊了沒幾句面試官就給了一張白紙和鉛筆,要求在紙上用 C 語言寫一個快速排序算法的實現(xiàn)。這次經歷我記憶猶新,差不多半小時,我磕磕碰碰的寫了一個實現(xiàn)。在和面試官討論時,被指出了不少沒考慮到的情形和漏洞,后來的結果自然是沒能通過。
現(xiàn)在回想起來,在紙上編程真是一件很難受的事情。雖然五十年代的程序員基本都在紙上編程,那是因為那時計算機的運行成本很高。但面試時的紙上編程,一方面時間很有限,另一方面環(huán)境和氛圍比真正的編程要緊張不少。所以,我是不支持紙上編程這種形式的,它既不能讓候選人很好的發(fā)揮,另外一方面也可能沒有足夠的區(qū)分度。比如,像上面那樣寫一個著名的算法實現(xiàn),背過和沒背過差別可以很大,但對真正的編程能力卻不足以區(qū)分。