十倍程序員的傳說

  • 2019 年 10 月 3 日
  • 筆記

最近關於 10 倍程序員的事又開始在各個社交平台火了起來,CODING 作為國內領先的一站式 DevOps 解決方案,今天也來討論一下 10 倍程序員到底存不存在和這個概念到底意味着什麼。

這個話題之所以會時不時被拿出來討論,主要是因為它觸及了一個比較深的意識形態問題:有些人是否比其他人更有才華,以及為什麼會這樣(這是天生還是後天可以改變的)。如果答案是肯定的,我們應該如何正確對待這件事。

因此,在各個社交平台的激烈討論主要分成了兩派,一邊認為 10 倍程序員只是一個傳說,是對程序員群體的刻板印象,而且比起討論這個問題還有更重要的事去做,比如好好寫文檔或者帶帶實習生。而另一邊則會翻個白眼告訴你 10 倍程序員當然是存在的,那些不願意承認的人都是被各種正義宣傳洗了腦,或者是一個不想承認自己的失敗的自卑者。

關於 10 倍程序員的傳說究竟如何,讓我們來稍微解密一下。

關於 10 倍程序員的研究

這次風波的起因是在 7 月 11 日,Shekhar Kirani(在 Accel 印度的基金擔任合伙人職位)發了一條微博:

圖片

聲稱 10 倍程序員是一種稀有物種並建議創業公司的 CEO 尋覓這種罕見的程序員,如果能找到一個 10 倍程序員作為你初始團隊的前幾名程序員之一,可以顯着提高你的啟動成功幾率。並且還列舉了諸如「仇恨會議」,「高度不規則」的工作時間,「可以高效將想法轉化為他們心中的代碼」,知道已經投入生產的「每行代碼」,筆記本電腦屏幕背景顏色是黑色的等幾條 10 倍程序員的特徵。

圖片

我們暫且不討論他的論斷是否正確,其實在過去關於 10 倍程序員這個概念有着很多的討論,其中比較有名的是 Steve McConnell 在八十年做的研究:Productivity Variations Among Developers and Teams: The Origin of 10x。從中我們可以提取出幾個關鍵點:

1.10 倍程序員指的是最優秀的程序員和最差的程序員之間的差距,而不是和平均相比

這樣其實更好讓人接受,在我看來,更容易相信最好的開發人員比平均水平高出 3 倍,而最差的開發人員的生產力要低 3 倍。這樣可以讓你達到 10 倍的整體差價。

也許我們應該將「x」重新定義為平均值,稱之為「3 倍程序員」,這樣就不用吵來吵去了。

2. 10 倍程序員的概念的確是基於研究而來,但這並不代表研究是完美的

McConnell 在上面提到的文章中詳細總結了之前關於 10 倍程序員的研究,但是這些研究在今天看來都略顯過時並存在一定的缺陷,比如總樣本量相對較小,並且並沒有很好的把控變量。其中一些研究是在幾十年前(第一次是 1968 年)完成的,當時計算機、編程語言和開發任務都和現在有很大不同。雖然他們採用了一些還不錯的度量方式,比如任務完成時間,但是大部分度量方式是值得商榷的,例如每天的代碼行數,並且在某些情況下,他們認為代碼行數是負面影響因子(對於給定的任務,更少的代碼量被認為是會更好)。

總的來說,雖然有些瑕疵,但還是有明顯的證據表明,個人之間的生產力差異很大。

3. 10 倍只是一個粗略估計

不同研究發現的生產力差距存在一定的範圍,通常在 5 至 25 倍之間。這與剛剛討論的研究的局限性相結合,意味着我們不能說「大致數量級」。「10 倍」並不準確,它只是一種方便的方式來記住生產力的差異存在並且很大。

4.10 倍的數字僅僅是對代碼生產力的衡量

它並非旨在完全衡量程序員對組織的價值,也不能用於此目的。也就是說,這些仍然是有意義和重要的措施。

5.這些研究並沒有揭露造成差距的原因

據我所知,McConnell 的調查至少沒有解決重要的問題,例如:個人的生產力水平是否隨時間穩定? 它是否因環境而異?工作環境對生產力的影響程度如何? 它會因為項目的不同或工作內容的變化而變化嗎? 它會隨着經驗而增長嗎? 可以通過學習進步嗎?(McConnell 表示最初 1968 年的研究「發現程序員的經驗和代碼質量或生產力之間沒有任何關係」,但這並不意味着生產力不會隨着時間的推移而增長,只是它不一定會這樣做)。

生產力的差距是確實存在的

以下四個想法不僅基於研究,而且基於我們日常的觀察:

1. 生產力的差異是真實的、重要的,並且可能被低估。

即使差異不是「十倍」,但是很多時候也會舉足輕重,而且我相信這個現象不僅僅存在於軟件行業。McConnell 本人就指出過這一點,引用 Norm Augustine 的一項研究:「在各種職業,無論寫作,足球,發明,警察工作還是其他職業,一定都是前 20% 的人產生了約 50% 的產出, 無論是橄欖球中的達陣還是專利,解決案例或軟件。」

圖片

2. 工作環境至關重要

在現實世界中,生產力其實很大程度是受工作環境制約的。程序員是否明確了目標和優先事項? 他們是否相信自己做的事情?他們有動力嗎?他們能否相互信任?他們可以集中注意力嗎?他們必須隨機參加會議嗎?他們有良好的基礎設施和工具嗎?等等。

3. 生產力是自身特徵和後天技能的結合

也就是說,高生產力是可以通過學習來部分提高的。可獲得的技能包括從調試特定工具到思維模式和解決方式等,通過這些來提高自己的生產力。但是自身的特性暫時還是不能(或者說還不知道如何)有效的識別和通過學習來習得的,這與個人自身的智力和思維模式有很大關係。

4. 生產力並不和過往經歷強相關

有非常高效的初級程序員,也有非常平庸(或更糟糕)的高級程序員。因此即使可以通過學習來提高自身的生產力,但是學習的過程也不會自動發生,固步不前的程序員在我們的行業中也是很常見的。

最終還是歸結到人與人之間的關係

關於 10 倍程序員的討論歸根結底是在討論如何僱傭、獎勵員工以及我們如何對待彼此。

圖片

所以我們總結出了如下的結論,希望對企業的研發團隊有些幫助:

  • 招聘環節至關重要:儘可能地花更多的心思和時間去尋找最優秀的候選人。
  • 創造良好的工作環境:努力創造一個良好的工作環境,有很多生產力的問題都是由工作環境的問題造成的。
  • 賞罰得當:能正確地辨識工作的價值,讓創造更多價值的人獲得相應的報酬。
  • 不要認為生產力的原因僅僅在於人:在一個環境中生產力不足的人可能在不同的項目或不同的團隊或公司中卓有成效。在解僱對方之前最好仔細分析一下問題所在。
  • 即使是 10 倍程序員也不能放任自流:這個應該是原則問題,不言而喻。

另外,再說一下開頭提到的整場討論的起因——我們認為發現 10 倍程序員的規律或者特質並不存在,他們不是什麼特殊物種,不可能通過終端的顏色,鍵盤上的磨損,或任何其他刻板印象來識別它們。

Reference:
https://yourstory.com/2019/07/10x-engineers-accel-shekhar-kirnani-startups
https://jasoncrawford.org/10x-engineers
https://www.construx.com/blog/productivity-variations-among-software-developers-and-teams-the-origin-of-10x/