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

硬件工程師看了只會找個角落默默哭泣#硬件工程師 #MDD #MDD辰達(dá)半導(dǎo)體 #產(chǎn)品經(jīng)理 #軟件工程師
機(jī)械工程師的九個段位,你現(xiàn)在處于哪一層?
【華秋DFM】V4.6正式上線:工程師的PCB設(shè)計“好搭子”來了!
如何成為一名嵌入式軟件工程師?

一位老電子工程師的十年職場感悟

電子工程師的電源設(shè)計經(jīng)驗分享
電子工程師的經(jīng)驗分享

不同時期的硬件工程師,最怕發(fā)生的事 #電子工程師 #硬件工程師 #內(nèi)容過于真實 #YXC晶振 #揚(yáng)興科技
2025賽盛技術(shù)培訓(xùn)事業(yè)全景規(guī)劃發(fā)布


當(dāng)你的工程師朋友失聯(lián)時,別氣,ta真的是在忙工作 #搞笑 #電子愛好者 #硬件工程師 #晶振 #揚(yáng)興科技

評論