摘要:2019 年,由印度初創公司投資人 Shekhar Kirani 提出的“十倍工程師”的概念在圈內引起熱議。他提出,有些程式設計師能以一當十,創業有了這類人,成功率將大幅提升。對於這個說法,多數人持反對態度,但直至如今,有關“十倍工程師”的討論依舊沒有停歇。
原文連結:https://earthly.dev/blog/stop-10x-developer/
宣告:本文為 CSDN 翻譯,未經授權,禁止轉載。
作者 | Adam Gordon Bell譯者 | 彎月出品 | CSDN(ID:CSDNnews)“10倍開發者”這個說法源自一則推特:
10倍工程師很少檢視類或方法的幫助文件。拿到一個產品功能後,他們只需一杯含咖啡因的飲料,沒有任何人打擾,就可以坐下來連續工作4~6個小時編寫出整個功能。
10倍工程師很討厭開會,認為那是在浪費生命,會議上討論的事情都是顯而易見的。
大多數10倍工程師都是全棧工程師。但是,我很少看到他們做UI的工作。
以上觀點由一位印度初創公司投資人 Shekhar Kirani 提出,並建議初創公司牢牢把握住10倍工程師——雖然我不同意這個看法,但“10倍工程師”這個話題並不會消失。
在本文中,我們來深入剖析一下這個概念,看看“10倍工程師”究竟有什麼意義,也許我們能找到一種更好的方式來描述天才工程師。
定義“10倍開發者”這個概念源自Tom Demarco的研究。他研究了600多名開發人員的程式設計練習結果,發現有些人的效率是其他人的10倍(在相同研究條件之下)。
網上經常討論的一個問題就是:10倍開發人員是否真的存在?畢竟,現在不是1984年,整個程式設計領域的水平也提高了。所以,我們先來解決這個問題。
95倍開發人員同一個地方不可能同時出現兩位10倍工程師,否則就會引發生產力奇點。
—— Xanda Schofield
開發技術千變萬化,而且可以不斷提高,這一點沒有爭議。但是,能夠完成10倍工作量的人真的比那些不稱職的同事好10倍嗎?事實上,我認為“10倍”這個數字太小了。
下面,我們來看一個例子,雖然這個例子很極端,但很有啟發性。
Leetcode網站上的問題表明開發人員的技術力有著數量級的差異。在LeetCode上,競賽選手的評分可以轉化為他們能夠解決問題的機率。具體來說,在實踐中,如果你遇到一個評分與你個人評分相同的問題,這就意味著你能夠解決該問題的機率為50%。LeetCode使用了ELO排名,這個排名可以直接等同於成功係數。雖然LeetCode不會公開問題的評分,但有一位使用者計算了各個問題的評分,並分享到了GitHub上(https://github.com/zerotrac/leetcode_problem_rating/blob/main/ratings.txt)。
透過這則資訊,再加上機率表,我可以告訴你,對於LeetCode上的問題“Count Ways to Make Array With Product ”(https://leetcode.com/problems/count-ways-to-make-array-with-product/),排名3000的使用者中有95%的人可以解決這個問題,但排名1700的使用者中只有大約1%的人能夠解決。
想象一下,Jira面板由2500個困難問題組成,如果LeetCode的規則非常貼近我們的實際工作,那麼一位排名3000的使用者的效率相當於95位排名1700的使用者,那他們就是所謂的“95倍開發者”。所以,可以肯定的是,如果LeetCode中存在95倍開發者,那麼只要難度上限足夠高,任何領域都有可能存在10倍開發者。
但是,日常工作的難度是否給了技術牛人大展拳腳的空間呢?
豪斯醫生,10倍醫生技術力的差異並不是軟體開發領域獨有的。如果說真的有10倍開發者,那麼就會有10倍醫生和10倍機械師。但是,一種能給團隊或組織帶來重大影響的技術,一定會成為限制因素。
如果《豪斯醫生》中的主角在一家小診所工作,每天的工作是打流感疫苗和抗生素,那麼他的效率不一定會比一個平庸的醫生更高。同樣,如果你們團隊沒有遇到高難度的程式設計問題,那麼即便是LeetCode冠軍也不會有突出的表現。如果說10倍開發者應該完成10倍的工作,那麼前提是你能丟擲一些具有挑戰性的問題。
(個人認為:許多團隊更需要的是具有10倍溝通能力的開發者。)
所以說,有些開發人員的效率確實更高,但這並不一定意味著完成更多的工作,除非高技術力能夠提高團隊的工作效率,或者解決團隊的瓶頸。時間和技術力在量上是不可互換的。但是,10倍開發者的思想還有一個更大的問題:技術力不是孤立存在的。
你不能透過一個單一的“尺度”(比如LeetCode的評分)衡量開發者的技術力,開發者又不是跳高運動員,不能根據能否跳過某個高度的欄杆來判斷他們的技術力。軟體開發是一個多樣化的領域,從事韌體開發與構建遊戲引擎所需的技術力完全不同,而他們掌握的技術型別也不同於前端JavaScript開發人員。軟體開發和大多數領域一樣,不是單一的田徑比賽。這些角色需要不同的技術,比如系統設計、測試、除錯等等。所以說,開發人員更像是體育比賽中的現代五項全能。
關於軟體開發的極端說法10倍開發者的說法太極端了。比如我的日常工作都是很簡單的任務,那就算是Fabrice Bellard(著名的計算機程式設計師,因FFmpeg、QEMU等專案而聞名業內,曾在國際C語言混亂程式碼大賽中三度獲勝)來了,也不能說就可以完成10倍類似的工作量。反之,如果給我足夠的時間,我可能也能像Fabrice Bellard一樣構建出FFmpeg和QEMU。
此外,10倍開發者這個概念還暗示著各種技術力都是可以互換的——優秀的資料庫內部專家就應該能構建出色的微服務架構嗎?這顯然不合理。
那麼,我們應該如何描述10倍開發者呢?比如專家,“某某人是影片編碼專家”;或者專業人士,“我曾與postgres專業人士有過合作”;再比如天才,“我需要一些出色的編譯器後端天才來幫助我設計增量式編譯”。
我認為,我們不應該用“10倍”這樣的詞語來籠統地描述開發者的技術力,我們應該更具體一點。技術千變萬化,人們的技術力也在不斷提高,我們不應該把人才神化。