幾個(gè)月前一個(gè)新工程師加入了我們的團(tuán)隊(duì)。和往常一樣,我花了些時(shí)間和他相處,來更好地了解他是哪種類型的人、他的驅(qū)動力是什么。我們經(jīng)常討論過去的經(jīng)歷,但更重要的是:未來的目標(biāo)。結(jié)果發(fā)現(xiàn),他有個(gè)有趣的目標(biāo):
「我想成為世界上最好的程序員」
野心勃勃。我喜歡。
但是,這讓我思考了一個(gè)問題:成為“最好的程序員”實(shí)際上意味著什么。怎么衡量“好”?怎么知道他(她)是“最好的程序員”?
這讓我想起了上世紀(jì) 60 年代,Sackman、 Erikson 和 Grant 撰寫的論文《Exploratory Experimental Studies Comparing Online and Offline Programming Performance》。該研究的目的是調(diào)查程序員在編程的多個(gè)方面的表現(xiàn),無論他有電腦——那時(shí)是主機(jī)——的交互權(quán)限還是用“紙和筆”高效工作。盡管這個(gè)問題的答案幾乎要過時(shí)了——誰還在紙上編程啊——仍然有幾點(diǎn)發(fā)現(xiàn)現(xiàn)在仍然適用:
研究對象中,
最好和最差的程序員完成一個(gè)編程練習(xí)所用的編程時(shí)間有 20 倍的差距。
調(diào)試時(shí)間有 25 倍的差距。
所寫程序大小有 5 倍差距。
程序執(zhí)行速度有 10 倍差距。
研究對象都有幾年的經(jīng)驗(yàn),事實(shí)上經(jīng)驗(yàn)?zāi)陻?shù)對這些數(shù)字似乎沒有顯著的影響??傊罹噙€是挺顯著的,不是嗎?
10 倍價(jià)值的程序員
“10 倍價(jià)值程序員”這個(gè)概念起源于這篇論文。這個(gè)概念吸引了人們數(shù)十年,而且及其有爭議。直接 Google 一下這個(gè)英文短語(10x programmer)。
公平來講,Sackman 等人的數(shù)字一定被夸大了,很多人都對他們的方法提出了質(zhì)疑。但是幾乎沒有人反對在糟糕的程序員與優(yōu)秀的程序員之間有著顯著差距。甚至據(jù)傳,每個(gè)人都認(rèn)識一個(gè)人,他能在極短時(shí)間內(nèi)寫出驚人的軟件。
誰在乎?
“所以……誰在乎?”你可能會問。為什么 10 倍價(jià)值程序員這么重要呢?
一方面來說,10 倍價(jià)值程序員至少表面上對雇主來說是樁好買賣。理論上,雇主可以:
1.炒掉 90% 的員工
2.剩余 10% 雇傭 10 倍價(jià)值程序員
3.付給他們大約 2 倍工資
4.盈利
簡單,對吧?
然而現(xiàn)實(shí)會有點(diǎn)不一樣。首先,這假設(shè)你能招到一個(gè) 10 倍價(jià)值程序員的團(tuán)隊(duì)……祝你好運(yùn)。由于你很可能做不到這一點(diǎn),你得把他們整合進(jìn)現(xiàn)存的一倍價(jià)值程序員團(tuán)隊(duì)中去。結(jié)果發(fā)現(xiàn),團(tuán)隊(duì)中有一個(gè)比你更更更高產(chǎn)的程序員并不是那么鼓舞人心。
但是實(shí)際上,我不想太過詳述 10 倍價(jià)值程序員這個(gè)概念。因?yàn)樵谖铱磥恚羞@么一群不同的“人種”,他們的影響力遠(yuǎn)超過 10 倍價(jià)值程序員。
是誰呢?
我們先來仔細(xì)研究一下“程序員”這個(gè)概念。在 Sackman 的研究中,他們完全只關(guān)注編程能力。練習(xí)是高度與算法相關(guān)的,像“假定某網(wǎng)格代表一個(gè)迷宮,編寫一個(gè)程序找到通路”這樣的類型。好“程序員”擅長這種類型的工作:輸入編程挑戰(zhàn),輸出代碼。每個(gè)程序員都有自己的任務(wù)列,并且在逐個(gè)完成。
輸入代碼。
如果這是你喜歡的工作,我肯定你能找到如此工作的地方。
然而,在我曾經(jīng)工作的任何地方,實(shí)際編程都不是這樣的。實(shí)話實(shí)說——謝天謝地。我覺得長期這樣編程會無聊透頂?shù)摹?/p>
我覺得更有趣的角色是工程師的角色。工程師把想法變成實(shí)實(shí)在在的產(chǎn)品,他們也因此有更廣闊的視野。他們手頭有大量工具可以完成工作,當(dāng)然編程也是工具之一。
但是實(shí)話實(shí)說,并且我想我也可以在此說,我們真的超級不擅長在那些被過分吹噓的技能。
統(tǒng)計(jì)量不會說謊:
(a)行業(yè)均值:“每 1000 行代碼中大約有 15 到 50 處錯(cuò)誤?!彼M(jìn)一步聲明這對那些背后有一定程度結(jié)構(gòu)化編程、可能混有一些代碼技巧的代碼具有代表性。
(b)微軟應(yīng)用:“內(nèi)部測試時(shí)每 1000 行代碼中大約有 10 到 20 處錯(cuò)誤,發(fā)布產(chǎn)品中每 1000 行代碼中大約有 0.5 處錯(cuò)誤(Moore 1992)?!彼麑⑵錃w功于代碼閱讀技巧和獨(dú)立檢測的組合(在其著作的另一章中有進(jìn)一步討論)。
(c)“Harlan Mills 開創(chuàng)了名為 ‘cleanroom development’ 的技巧,能實(shí)現(xiàn)在內(nèi)部測試時(shí)每 1000 行代碼有 3 處錯(cuò)誤,在發(fā)布產(chǎn)品中每 1000 行代碼有 0.1 處錯(cuò)誤(Cobb 和 Mills 1990)。幾個(gè)項(xiàng)目——例如飛船軟件——利用了格式開發(fā)方法系統(tǒng)、同行審查和統(tǒng)計(jì)測試實(shí)現(xiàn)了在 500,000 行代碼中有 0 處錯(cuò)誤的水平。
要我說——我們應(yīng)該盡力避免編程,使世界免受每次在集成開發(fā)環(huán)境(IDE)中按下某鍵產(chǎn)生的所有 bug 的侵害。
所以沒錯(cuò),10 倍價(jià)值程序員是個(gè)好主意,但是我要把門檻設(shè)置得高一點(diǎn)。到 2018 年了,世界已經(jīng)變了。
…………
100 倍價(jià)值工程師
我喜歡延伸目標(biāo)。它們經(jīng)常引導(dǎo)我們后退一步,并帶來思維的巨大轉(zhuǎn)變。這個(gè)目標(biāo)也一樣。如果我們想成為 100 倍價(jià)值工程師——其影響力是老一倍價(jià)值工程師的 100 倍,該怎么實(shí)現(xiàn)呢?
做到自己高產(chǎn)并不夠——當(dāng)然單單有編程天賦就可能實(shí)現(xiàn) 10 倍價(jià)值,但達(dá)到 100 倍價(jià)值就不可能了。為了擁有有 100 倍的影響力,你得讓團(tuán)隊(duì)和組織的生產(chǎn)率均大幅提高,并最終領(lǐng)導(dǎo)其他人用同樣的工作方式。
盡管 100 倍價(jià)值聽起來很極端,我在職業(yè)生涯中仍然和許多我認(rèn)為有“100 倍價(jià)值的觀念模式”、獨(dú)特的思考、說話和行動方式的人合作過。
可能讓某些人吃驚的是,這些與編程能力、科技和編程語言沒有任何關(guān)系。常見的口號是:“為什么我們還在用 Java?如果我們能只用 Scala、Clojure、Node,《《在此輸入今日便好 insert flavor of the day here》》就會更高產(chǎn)!”現(xiàn)實(shí)是,一種不同的編程語言可能最多讓你達(dá)到 1.5 倍到 2 倍。這與 100 倍價(jià)值相比簡直是小巫見大巫。100 倍價(jià)值是完全不同的游戲。
所以,到底什么是“100 倍價(jià)值的的觀念模式”?讓我們一起來討論兩個(gè)方面。
1. Ownership 所有權(quán)
100 倍價(jià)值工程師掌控他們所做的事。他們知道為什么這么做、怎么做、所做的是什么。在《Extreme Ownership》這本書中,兩位前海豹突擊隊(duì)隊(duì)員解釋了他們的極端所有權(quán)(extreme ownership)概念。這個(gè)概念的核心是,當(dāng)我說“擁有某物”時(shí)到底意味著什么。這意味著:接受你要對你所做的任何事情負(fù)責(zé)。
最重要的是這意味著:不能指別人。這不意味著所有事情都在你的控制之下,卻意味著:當(dāng)事情不可避免地出錯(cuò)時(shí),你要對你如何反應(yīng)負(fù)責(zé)。這意味著:你要負(fù)責(zé)預(yù)期可能發(fā)生的事情,并做好應(yīng)急措施。這意味著你要從錯(cuò)誤中學(xué)習(xí),甚至從中汲取價(jià)值。掌控你所做事情的各個(gè)方面。
要得到這種程度的所有權(quán),我只知道一個(gè)方法:挑戰(zhàn)。挑戰(zhàn)你和你的團(tuán)隊(duì)被要求做的任何事情,這樣你能理解并掌控每一個(gè)決定。
2. Challenging the status quo 挑戰(zhàn)現(xiàn)狀
100 倍價(jià)值工程師在三個(gè)維度進(jìn)行挑戰(zhàn):
1.做什么(What)?
這主要是關(guān)于范圍的:我們在開發(fā)什么?是否仔細(xì)研究過?要求是否明確?我們確定所有這些都是重要的并且需要(馬上)完成嗎?
2.怎么做(How)?
這是關(guān)于在怎樣機(jī)智地執(zhí)行某事。有可以得到同樣結(jié)果的更輕松方法嗎?這也是關(guān)于過程的:我們怎么樣得到想要的結(jié)果,以及怎樣提高?
3.為什么(Why)?
這是關(guān)于業(yè)務(wù)環(huán)境的、關(guān)于完全理解為什么需要開發(fā)某個(gè)特性并檢查產(chǎn)品經(jīng)理的方法是否是滿足用戶需求的正確方法。
來逐個(gè)看看更多細(xì)節(jié)。
What? 做什么?
更快地提供某產(chǎn)品的唯一最好方法是:縮減范圍。它需要擁有的特性是什么。
可以在此應(yīng)用我的“5 個(gè)真的嗎?”技巧:
產(chǎn)品經(jīng)理:我們需要有所有這 10 個(gè)特性
100 倍價(jià)值工程師:真的嗎?
產(chǎn)品經(jīng)理:嗯。
100 倍價(jià)值工程師:真的嗎?
產(chǎn)品經(jīng)理:好吧,好吧,可能不需要第七個(gè)特性。但是剩下的都要。
100 倍價(jià)值工程師:真的嗎?
產(chǎn)品經(jīng)理:嗯,是的,我是這么想的……讓我跟客戶確認(rèn)一下。
好吧,他們可能需要第四個(gè)和第五個(gè)特性,但是我們可以之后再做這兩個(gè)。剩下的都是必須的。
100 倍價(jià)值工程師:真的嗎?
產(chǎn)品經(jīng)理:是的。
這可能聽起來像個(gè)玩笑,但是產(chǎn)品經(jīng)理常常會拿一張長長的必需特性清單出現(xiàn)。然后經(jīng)過幾小時(shí)、幾天、有時(shí)是幾個(gè)月的談判后,你得到了一張幾乎只有原清單四分之一的清單。這是自然的,想出要加上的新特性要比移除特性更容易。
另一個(gè)在將范圍降低到較低水平的方法,是使用“帕累托法則”,二八法則。維基百科:
帕累托法則(也叫二八法則,關(guān)鍵少數(shù)法則,或者稀疏因子法則)表明,對很多事件來說,大約 80% 的影響來自于 20% 的原因。
該法則有很多應(yīng)用,軟件開發(fā)就是其一。往往有很多種實(shí)現(xiàn)某特性的方法,使用極少的精力(比如說 20%)就能帶來大多數(shù)收益(例如 80%)。這點(diǎn)吸引人,不僅僅是因?yàn)楦俚墓ぷ髁?,還因?yàn)槟隳芨?jīng)濟(jì)地徹底檢查特性,并且只在這些特性有價(jià)值、使用過后才進(jìn)行完全開發(fā)。
How? 怎么做?
既然需要開發(fā)的清單已經(jīng)減少到一小部分了,仍然要通過挑戰(zhàn)特性的實(shí)現(xiàn)方法來獲得機(jī)動空間和好處。一般來說,實(shí)現(xiàn)某特性有很多方法。一旦團(tuán)隊(duì)想出一種方法,很多團(tuán)隊(duì)就滿意了。100 倍價(jià)值工程師總會進(jìn)一步尋找替代方法,根據(jù)各自的優(yōu)缺點(diǎn)評估所有選擇。
“怎么做”也會被技術(shù)債務(wù)影響。經(jīng)常有“變態(tài)的”方法來實(shí)現(xiàn)某些快、臟的特性,“合適的”方法來首先還清技術(shù)債務(wù),再干凈地實(shí)現(xiàn)特性。什么是最好的方法?100 倍價(jià)值工程師認(rèn)識到不只有一個(gè)正確答案,并且這取決于不同情況和累積技術(shù)債務(wù)的費(fèi)用。一個(gè) 100 倍價(jià)值工程師能在不同的情景中作出正確抉擇,能在合適的時(shí)機(jī)和產(chǎn)品談判來降低技術(shù)債務(wù)。
“怎么做”的另一個(gè)方面是過程。我對 Scrum 很喜歡的一點(diǎn)是,它能有效設(shè)定一個(gè)基礎(chǔ),如果用得合適可以鼓勵 100 倍價(jià)值的行為:
?改進(jìn)是討論和挑戰(zhàn)做什么、怎么做和為什么的好平臺。產(chǎn)品所有者提出要開發(fā)的新特性,開發(fā)團(tuán)隊(duì)挑戰(zhàn)做什么和為什么,來得到全面的背景,并相互挑戰(zhàn)如何實(shí)現(xiàn)特性。
?Plannings 針對下一步?jīng)_刺(sprint)做什么的計(jì)劃,計(jì)劃也是通往“輝煌和頭腦”的手段:記起到底需要做什么,并且計(jì)劃團(tuán)隊(duì)如何合作來交付產(chǎn)品
?Retrospectives 回顧是團(tuán)隊(duì)提升的方法。在一次沖刺循環(huán)中,有些事情出錯(cuò)了,有些事情進(jìn)展不順利。回顧是 100 倍價(jià)值工程師挑戰(zhàn)團(tuán)隊(duì)來提升、下次做得更好的時(shí)刻?;仡櫼材芫毩?xí)所有權(quán)。100 倍價(jià)值工程師不抱怨低產(chǎn),不指向自己以外的其他人。
Why? 為什么?
上周我和一個(gè)工程師聊了聊,他剛剛發(fā)現(xiàn)自己花了整整 3 個(gè)月時(shí)間實(shí)現(xiàn)某特性,后來有發(fā)現(xiàn)對用戶來說同樣的價(jià)值本可以在 3 日內(nèi)實(shí)現(xiàn)。顯然不會是同一種功能,但是實(shí)現(xiàn)的目標(biāo)是一樣的。
這種事情怎么會發(fā)生呢?
除非工程師退后一步、擴(kuò)大視野、挑戰(zhàn)為什么,這種事情就會發(fā)生。為什么要開發(fā)這個(gè)特性?用戶想要實(shí)現(xiàn)什么?他們的需求是什么?產(chǎn)品經(jīng)理往往會提出非常具體的特性要求,偶爾具體化程度會比較低。他們的出發(fā)點(diǎn)是好的。然而更可能的情況是:產(chǎn)品經(jīng)理也是人,也會遺漏。此外,風(fēng)險(xiǎn)在于工程師不再挑戰(zhàn)更基礎(chǔ)的問題:為什么我們要這么做?不是還有用其他更少的精力實(shí)現(xiàn)同樣結(jié)果的方法嗎?
但是,等等
說起來容易做起來難。做起來也應(yīng)該難,不是什么人都應(yīng)該能躋身 100 倍價(jià)值工程師。然而,我們都可以渴望變得更好,并找到相應(yīng)的方法。
因此,看看 100 倍價(jià)值工程師的技能集合是值得的。你會注意到,這與 10 倍價(jià)值程序員是非常非常不同的。
?溝通——這點(diǎn)幾乎明顯得不用提了,但是它是重要的一點(diǎn)。100 倍價(jià)值工程師有優(yōu)秀的溝通技巧。溝通是擁有 100 倍影響力的關(guān)鍵部分。
?創(chuàng)造力——顯然這在 10 倍價(jià)值程序員中是常見的,但是所要求的創(chuàng)造力不是關(guān)于算法的,也不是關(guān)于靈巧的類繼承結(jié)構(gòu)(class inheritance structures)的,而是關(guān)于想出更有效的方法來實(shí)現(xiàn)目標(biāo)。
?同理心——在“挑戰(zhàn)所有”的長篇大論中隱藏著“生產(chǎn)力挑戰(zhàn)”。那么我這么說意味著什么?讓我用我的大兒子做例子來解釋一下。他 4 歲了。4 歲小孩最喜歡的問題是什么?“為什么???”這意味著我兒子是個(gè) 100 倍價(jià)值工程師嗎?不。為什么不呢?因?yàn)樗偸菃枴盀槭裁??”,無論時(shí)機(jī)正確與否,無論有沒有意義,無論他是不是讓他的父母想自殺。擁有知道該挑戰(zhàn)什么、怎么挑戰(zhàn)和何時(shí)挑戰(zhàn)的同理心也是 100 倍價(jià)值工程師的重要技能。
?談判——好主意被高估了。人人都有好主意,但幾乎沒人真正實(shí)現(xiàn)這些想法。你知道需要實(shí)現(xiàn)一個(gè)想法,實(shí)現(xiàn)它的一個(gè)重要因素就是談判——與其他開發(fā)人員談判,與產(chǎn)品經(jīng)理談判,與其他利益相關(guān)者談判。解釋為什么某個(gè)主意是個(gè)好主意,以及為什么需要時(shí)間執(zhí)行它們。100 倍價(jià)值工程師知道怎么做。所以當(dāng)他們在場時(shí),所有事情都似乎有可能實(shí)現(xiàn)。
?技術(shù)——這是清單上的最后一點(diǎn),但依然重要。雖然大多數(shù)提到的技巧都是“軟實(shí)力”,但這并不意味著 100 倍價(jià)值工程師不需要技術(shù)。事實(shí)上,他(她)擁有領(lǐng)先的技術(shù)天賦是先決條件,原因有二:(1)挑戰(zhàn)技術(shù)層面上的事情會產(chǎn)生巨大收益,也因此要求對技術(shù)有深層次的理解;(2)理念是重要的,如果 100 倍價(jià)值工程師沒有高技術(shù),就不會被同輩接受。你得是“我們的一員”。
…………
幾個(gè)月后,“我想成為世界上最好的程序員”先生作為程序員工作得非常順利。他有天賦、努力工作、高產(chǎn)而且非常聰明。他會成為世界上最好的程序員嗎?我不知道。
但是私下里,我希望這不重要。
我希望某一天,不是現(xiàn)在,但是可能是幾年后,他會想做更多事。那時(shí)他會調(diào)整他的理想,不僅僅要擅長這個(gè)叫“編程”狹窄領(lǐng)域,而且渴望擁有 100 倍價(jià)值工程師的影響力。
-
工程師
+關(guān)注
關(guān)注
59文章
1571瀏覽量
68607
發(fā)布評論請先 登錄
相關(guān)推薦
評論