為什么程序員不會最簡單的100到1的輸出?
我最近寫了一本書,是關于我們作為程序員應該停止抱怨,專注于發展技能的。
其中一個數據要點是基于我在兩個月的時間里為我的一個客戶執行的22場程序員職位面試。
雖然這很難被認為是可取的樣本數量,但它確實暴露了一些關于程序員的有趣事實。下面這兩個看似完全無關的問題,是我們在面試中不同時間段提出的:
- 談談當前單位或管理人員的哪些事情是你不喜歡/不滿意的。
- 解決一個簡單的編程問題(絕對比著名的Fizz Buzz 問題要容易得多)。
我們的目的是為了研究抱怨和編碼能力之間的相關性。下面是我們收集的數據集合(當然由于我沒有攜帶秒表,所以已經將數據四舍五入至單位秒):
盡管曲線并不是非常一致,但是總的趨勢依然十分明顯——抱怨和解決簡單編程問題的能力之間有很強的聯系。
挺有趣的,是不是。而更有趣的是,這個實際要求應聘人員解決的編程問題難倒了很多人,并且我敢保證這問題絕對比Fizz Buzz 問題要容易得多:
- 約14%的人無法在10分鐘以內解決—— 這時我們需要提下一個問題了。
- 約40%的人需要5分鐘以上的時間才能解決問題,和/或不止一次的修改。
- 只有約14%的人能在2分鐘及以內解決這個問題。
- 約82%的人在解決問題之前,至少得修改一次。 (這意味著實際上他們第一次寫的代碼是錯的!)
那么他們要解決什么問題呢?
輸出100到1。
這就是問題。
關鍵點是什么?
一開頭你就需要寫“for(int i = 0;”,然后再繼續——在“for(int i = 0;”之前,你不能寫任何東西,并且你不能使用兩個循環。
按照這個方向試試。最多兩分鐘,最多4行代碼,包括花括號在內——但是如果方向不對,就會衍生出很多很多行代碼。
如果你能在合理的時間內,不犯錯誤地輸出正確的結果,那么我們就認為你的答案是正確的。
但是特別讓人難以理解的是,無數程序員面對這問題——抓耳撓繞,絞盡腦汁,最后甚至于不得不放棄。
不相信?那我告訴你,我曾碰到過兩個程序員,在10分鐘攻擂失敗之后,居然說這個問題太復雜了,他們搞不來。
雖然這個小小的試驗顯示了抱怨與技能之間的相關性,但卻并沒有建立任何因果關系。換句話說,我們從這些數據上看不出,是因為程序員不具備完成工作的足夠技能才抱怨的呢,還是因為愛抱怨從而使得他們不具備做好工作的技能,這是無法確定的。
也許程序員之所以技能不嫻熟是因為喜歡怨天尤人喋喋不休地抱怨,又或許是因為他們總是在抱怨,從而降低了我們對于他們的期望值,不會對他們做過多的要求,于是他們自己也松懈了,甚至連最基本的編程技巧也荒廢了。
無論是哪種原因,現在存在于IT行業的一個非常可悲的事實就是,你甚至都不需要使用Fizz Buzz這種難度的問題來考校程序員的優劣,—— 只要讓他們輸出100到1就夠了。
</div>
譯文鏈接:
http://www.codeceo.com/article/why-programmer-not-print-100-1.html
英文原文:
hy Can't Programmers Print 100 to 1?
翻譯作者:
碼農網 – 小峰