以一當十的程式設計師不是傳說

edithfang發表於2015-03-17
昨晚,我發了下面的微博:

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

— Yevgeniy Brikman (@brikis98) September 29, 2013”

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

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

最初10x這個數字來自一個研究(Sackman,Erikson, and Grant (1968)),不是很有說服力。

生產力是個很難測量的模糊概念,所以我們不應該聲稱諸如10x之類的度量。

個人才華確有高低不同,但一個程式設計師不可能比另一個程式設計師高出10倍的工作能力。

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

[譯者注]:10x程式設計師(10x效應來自一個有趣的觀察:偉大的程式設計師相比普通程式設計師的生產力不僅是15-20%的差距,很可能會10倍甚至更多)的說法最初來自於www.forbes.com和www.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程式設計師非常稀有

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

然而,不要掉入所有的程式設計師生來平等的謬論。在任何一個創造性的專業都存在一個巨大的能力譜圖。一端是可以毀掉一個組織的僱員型別,每行他們寫下的程式碼都增加了技術負債。另一端,則是那些可以寫出任何可能的程式碼,而且數倍地優秀於普通人的人。
相關閱讀
評論(2)

相關文章