以一當十的程序員不是傳說

>>>  技術話題—商業文明的嶄新時代  >>> 簡體     傳統

  英文原文:The 10x developer is NOT a myth 

  昨晚,我發了下面的微博:

有些人議論所謂10x或者超級的程序員都是傳說。可那些著名運動員,藝術家,作家,呃,還有搖滾明星的都是神話嗎?

Yevgeniy Brikman (@brikis98) September 29, 2013

  我收到了大量的回復和問題,但微博不適合討論問題,所以我寫了這篇博格來進一步討論。

  已經有   文章號稱 10x 的程序員根本不存在。反對觀點一般分為以下三種:

  1. 最初 10x 這個數字來自一個研究(Sackman,Erikson, and Grant (1968)),不是很有說服力。
  2. 生產力是個很難測量的模糊概念,所以我們不應該聲稱諸如 10x 之類的度量。
  3. 個人才華確有高低不同,但一個程序員不可能比另一個程序員高出 10 倍的工作能力。

  我不同意以上的這些觀點,我來逐條看一下這些論點。

  [譯者注]:10x 程序員(10x 效應來自一個有趣的觀察:偉大的程序員相比普通程序員的生產力不僅是 15-20% 的差距,很可能會 10 倍甚至更多)的說法最初來自于 www.forbes.comwww.tempobook.com

  對 10x 程序員的研究不只有一個

  盡管微博和 Hacker News 里那些坐在搖椅里的學術專家喜歡駁斥同行的研究結果,然而 10x 程序員的證據相當令人信服而且并不限于單個研究。請允許我引用來自 StackOverflow 里得票最多的回復

Sackman, Erikson, and Grant 在 1968 年進行的最初研究發現程序員的編程效率有巨大的差異。他們研究了平均有 7 年經驗的專業編程人員,發現最好和最差的編程人員初次寫代碼所用的時間比率大概是 20 比1;調試時間大概是 25 比1;程序大小大概是 5 比1;程序執行速度大概是 10 比1。他們還發現,編程者的經驗和代碼質量的好壞并沒有關系。

對他們的發現進行詳細的考證,可以看出一些方法論上的缺陷。。。然而,即使考慮了這些缺陷,他們的數據依然可以呈現出最好和最差的程序員之間不止 10 倍的差距。

在首個研究之后的幾年里,程序員之間倍數級的差距這一發現被其他許多專業程序員的研究所驗證(Curtis 1981, Mills 1983, DeMarco and Lister 1985, Curtis etal. 1986, Card 1987, Boehm and Papaccio 1988, Valett and McGarry 1989, Boehm etal 2000)

  在這里 and 這里你可以讀到更多。

  即使不能測量,依然可以推理

  即使你無視上面的研究,聲稱編程效率很難測量-那也表示我們依然可以討論下 10 倍效率程序員。僅僅是因為一個東西很難測量并不代表我們不能測量。

  比如,你是如何為你最近的項目挑選編程語言的?你有去搜索證明這種語言比其他更有效率的研究嗎?個人來講,我不需要經驗就可以證明 Ruby 在構建網站方面比C高效了好多倍。你可以拋出一些粗略的準則(程序庫的可利用性,社區支持,文檔等),但現實是大多數人會基于直觀推理來選擇語言,并不是什么雙盲研究。盡管缺少數據資料,我打賭選 Ruby 而不是C去做網站開發大多數時候都會被證明是一個正確的決定。

  當然,編程并不是個例:什么樣的度量標準可以判斷某個作家,藝術家,教師或者哲學家比另外一個好?僅通過觀察,我不能給你一個生產力度量標準說莎士比亞,納博科夫,或者奧威爾比一般的作家好了好幾倍,但是大多數人會同意他們是的。

  編程不是體力勞動

  針對 10 倍效率程序員的最大問題是有些人認為編程不過是體力勞動,程序員也不過是流水線上的工人。一些程序員可能會比其他人好一些,但是,一個程序員必定不可能持續地比其他人解決 10 倍多的問題。10 個人的團隊總是會勝過一個程序員!9 個女人一起也不可能在一個月內就生出一個孩子啊!

  上面的邏輯聽起來就像編程效率就是打字速度;好像 10x 程序員只是簡單地比普通程序員多產了 10 倍的代碼。這種推理無視了編程其實是一個創造性的專業,并不是體力勞動。解決同一個問題有許多許多種方式。更多地考慮刑偵級推理而不是簡單的嬰兒式推理:10 個普通的偵探對一個夏洛克。誰可以更快地破案?

  一個 10x 程序員有普通程序員無法企及的解決問題的能力和洞察力;他們將會避開耗費普通程序員大量時間的所有問題。10 個寫錯誤代碼的工程師肯定不如一個寫正確代碼的程序員。

  編程是選擇

  想一想一個軟件的構建需要做多少決定,比如一個網站:你要采用什么語言?采用什么樣的架構?用什么存儲數據?用什么來高速緩存?在哪里托管站點?如何監測?如何推動新的改變?怎么存儲代碼?需要設置什么樣的自動化測試?

  10 個普通程序員在每個階段都可以做出平均水平的決定,這些決定的成本或者收益會累乘。設想流量呈指數增長,但是這個普通的團隊構建了一個普通的網站,難以分區的數據存儲,缺少足夠冗余的托管,沒有合適備份的版本控制,沒有持續集成環境,以及沒有監測。如果他們的時間全在忙于到處滅火,這 10 個程序員能有多高效?

  如果一個程序員可以以倍數級降低的工作量的方式來建模這個問題,那么這一個程序員就勝過一個 10 個人的團隊。從我多年的經驗來看,一個偉大的程序員知道那些事后修補更為昂貴的錯誤。預先做出一個好的決定,一個 10x 程序員可以避免數月的工作。

  編程不是寫更多的代碼;是要寫正確的代碼。成為一個10x程序員并不是因為你做了幾倍多的工作,而是因為你更為經常地做出更好的決定。

  這不是說 10x 程序員就完全不會犯錯;而是程序員每天都要做出許多選擇,偉大的程序員會比普通的程序員更為經常地做出正確的選擇。

  而且這并不只是說編程。你是更想要 10 個普通科學家呢還是牛頓?10 個普通科學家可不會提出運動三定律,萬有引力,二項式序列,微積分等;一個牛頓就做到了。在你的團隊里你是更想要一個邁克爾喬丹呢還是 10 個普通球員?(注意:喬丹拿著 10 倍于 NBA 球員的平均薪資)?你是更想讓史蒂夫喬布斯或者艾倫馬斯克運作公司或者把鑰匙交給 10 個普通的企業家?

  10x程序員非常稀有

  把目光放長遠一點很重要。明星程序員,運動員,作家以及科學家是極為稀有的。我并不推薦僅雇傭這些搖滾明星的招聘體系;這只會看起來愚蠢又孤獨。不要讓完美成為不錯的敵人:雇傭能找到的最好的的工程師,給他們變得越來越好的機會。

  然而,不要掉入所有的程序員生來平等的謬論。在任何一個創造性的專業都存在一個巨大的能力譜圖。一端是可以毀掉一個組織的雇員類型,每行他們寫下的代碼都增加了技術負債。另一端,則是那些可以寫出任何可能的代碼,而且數倍地優秀于普通人的人。


Cnblogs 外刊IT評論 2015-08-23 08:57:30

[新一篇] 為什么用了這么多社交軟件,你還是要回家相親

[舊一篇] 你應該在大學學到的10個方面的知識
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表