為什么程序員不會(huì)最簡(jiǎn)單的100到1的輸出?
我最近寫了一本書,是關(guān)于我們作為程序員應(yīng)該停止抱怨,專注于發(fā)展技能的。
其中一個(gè)數(shù)據(jù)要點(diǎn)是基于我在兩個(gè)月的時(shí)間里為我的一個(gè)客戶執(zhí)行的22場(chǎng)程序員職位面試。
雖然這很難被認(rèn)為是可取的樣本數(shù)量,但它確實(shí)暴露了一些關(guān)于程序員的有趣事實(shí)。下面這兩個(gè)看似完全無(wú)關(guān)的問(wèn)題,是我們?cè)诿嬖囍胁煌瑫r(shí)間段提出的:
- 談?wù)劗?dāng)前單位或管理人員的哪些事情是你不喜歡/不滿意的。
- 解決一個(gè)簡(jiǎn)單的編程問(wèn)題(絕對(duì)比著名的Fizz Buzz 問(wèn)題要容易得多)。
我們的目的是為了研究抱怨和編碼能力之間的相關(guān)性。下面是我們收集的數(shù)據(jù)集合(當(dāng)然由于我沒有攜帶秒表,所以已經(jīng)將數(shù)據(jù)四舍五入至單位秒):
盡管曲線并不是非常一致,但是總的趨勢(shì)依然十分明顯——抱怨和解決簡(jiǎn)單編程問(wèn)題的能力之間有很強(qiáng)的聯(lián)系。
挺有趣的,是不是。而更有趣的是,這個(gè)實(shí)際要求應(yīng)聘人員解決的編程問(wèn)題難倒了很多人,并且我敢保證這問(wèn)題絕對(duì)比Fizz Buzz 問(wèn)題要容易得多:
- 約14%的人無(wú)法在10分鐘以內(nèi)解決—— 這時(shí)我們需要提下一個(gè)問(wèn)題了。
- 約40%的人需要5分鐘以上的時(shí)間才能解決問(wèn)題,和/或不止一次的修改。
- 只有約14%的人能在2分鐘及以內(nèi)解決這個(gè)問(wèn)題。
- 約82%的人在解決問(wèn)題之前,至少得修改一次。 (這意味著實(shí)際上他們***次寫的代碼是錯(cuò)的?。?/li>
那么他們要解決什么問(wèn)題呢?
輸出100到1。
這就是問(wèn)題。
關(guān)鍵點(diǎn)是什么?
一開頭你就需要寫“for(int i = 0;”,然后再繼續(xù)——在“for(int i = 0;”之前,你不能寫任何東西,并且你不能使用兩個(gè)循環(huán)。
按照這個(gè)方向試試。最多兩分鐘,最多4行代碼,包括花括號(hào)在內(nèi)——但是如果方向不對(duì),就會(huì)衍生出很多很多行代碼。
如果你能在合理的時(shí)間內(nèi),不犯錯(cuò)誤地輸出正確的結(jié)果,那么我們就認(rèn)為你的答案是正確的。
但是特別讓人難以理解的是,無(wú)數(shù)程序員面對(duì)這問(wèn)題——抓耳撓繞,絞盡腦汁,***甚至于不得不放棄。
不相信?那我告訴你,我曾碰到過(guò)兩個(gè)程序員,在10分鐘攻擂失敗之后,居然說(shuō)這個(gè)問(wèn)題太復(fù)雜了,他們搞不來(lái)。
雖然這個(gè)小小的試驗(yàn)顯示了抱怨與技能之間的相關(guān)性,但卻并沒有建立任何因果關(guān)系。換句話說(shuō),我們從這些數(shù)據(jù)上看不出,是因?yàn)槌绦騿T不具備完成工作的足夠技能才抱怨的呢,還是因?yàn)閻郾г箯亩沟盟麄儾痪邆渥龊霉ぷ鞯募寄?,這是無(wú)法確定的。
也許程序員之所以技能不嫻熟是因?yàn)橄矚g怨天尤人喋喋不休地抱怨,又或許是因?yàn)樗麄兛偸窃诒г?,從而降低了我們?duì)于他們的期望值,不會(huì)對(duì)他們做過(guò)多的要求,于是他們自己也松懈了,甚至連最基本的編程技巧也荒廢了。
無(wú)論是哪種原因,現(xiàn)在存在于IT行業(yè)的一個(gè)非常可悲的事實(shí)就是,你甚至都不需要使用Fizz Buzz這種難度的問(wèn)題來(lái)考校程序員的優(yōu)劣,—— 只要讓他們輸出100到1就夠了。