优秀程序员的开发效率是普通程序员的 10 倍,那么如何提升呢?
1975 年,弗雷德里克·布魯克斯(Frederick Brooks)出版了軟件行業(yè)的名著《人月神話》,他給出了一個(gè)統(tǒng)計(jì)結(jié)果,優(yōu)秀程序員的開(kāi)發(fā)效率是普通程序員的 10 倍。40 多年過(guò)去了,這個(gè)數(shù)字得到了行業(yè)的普遍認(rèn)同。
成為 10x 程序員是很多程序員的追求。但工作產(chǎn)出并不只是由寫代碼的效率決定的,一些不恰當(dāng)工作方法很大程度上影響著你的產(chǎn)出。在接下來(lái)的這段時(shí)間里,我希望通過(guò)這個(gè)專欄和你一起探討,作為一個(gè)程序員,該如何更高效地工作,怎樣才能把時(shí)間和精力盡可能地放在處理本質(zhì)復(fù)雜度的事情上,減少在偶然復(fù)雜度上的消耗。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
作者 | 鄭曄
出處 | 極客時(shí)間《10x 程序員工作法》專欄
作為整個(gè)專欄第一講,我就從我常用的一個(gè)思考框架開(kāi)始。
一個(gè)思考框架
我曾經(jīng)組織過(guò)針對(duì)應(yīng)屆畢業(yè)生的培訓(xùn),第一堂課往往是我親自操刀,其中有一個(gè)頭腦風(fēng)暴的環(huán)節(jié)“暢想未來(lái)”,我會(huì)讓大家思考三個(gè)問(wèn)題:
(1)我現(xiàn)在是個(gè)什么水平?
(2)我想達(dá)到一個(gè)什么水平?
(3)我將怎樣到達(dá)那個(gè)目標(biāo)?
大家會(huì)圍繞著這三個(gè)問(wèn)題,從各種角度展開(kāi)討論。這是一個(gè)有趣的練習(xí),你會(huì)發(fā)現(xiàn)大家“最擅長(zhǎng)”回答的是第一個(gè)問(wèn)題:我現(xiàn)在處于什么水平?和有經(jīng)驗(yàn)的人相比,他們大多自認(rèn)為比較“菜”。但對(duì)于后兩個(gè)問(wèn)題的討論,卻可以切實(shí)看出人和人之間處理問(wèn)題的能力差異。
有人通過(guò)之前的資料搜集,已經(jīng)對(duì)自己的未來(lái)有了一個(gè)打算。比如想成為一個(gè)研發(fā)大牛,或者想做一個(gè)開(kāi)源軟件等,也就是說(shuō),對(duì)于第二個(gè)問(wèn)題,他有明確的答案。而有的人則是一臉茫然,他很可能根本沒(méi)有考慮過(guò)這個(gè)問(wèn)題。而從題目本身來(lái)看,目標(biāo)相對(duì)清晰的同學(xué),才會(huì)進(jìn)入到第三個(gè)問(wèn)題,而茫然的同學(xué),則完全無(wú)從下手。
那么我為什么會(huì)問(wèn)這幾個(gè)問(wèn)題呢?我是想讓大家跳出現(xiàn)有的思考模式,擺脫僅憑直覺(jué)“悶頭做事”的習(xí)慣方式,把低著的頭抬起來(lái),看一眼未來(lái),給自己找一個(gè)方向。否則,如果你對(duì)未來(lái)沒(méi)有定位,是茫然的,盡管你也知道要努力,但勁兒該往哪里使呢?如果使勁的方向不對(duì),那么你越使勁兒,可能會(huì)在錯(cuò)誤的路上跑得越遠(yuǎn)。南轅北轍的道理大家都懂,但具體到自己的工作和發(fā)展上,真正能體會(huì)并實(shí)踐的卻是少數(shù)。
其實(shí),這三個(gè)問(wèn)題來(lái)自一個(gè)思考框架。在給其他公司團(tuán)隊(duì)做咨詢時(shí),我也經(jīng)常會(huì)運(yùn)用到它,原來(lái)的問(wèn)題是:
Where are we?(我們現(xiàn)在在哪?)
Where are we going?(我們要到哪兒去?)
How can we get there?(我們?nèi)绾蔚竭_(dá)那里?)
這三個(gè)問(wèn)題實(shí)際上是幫我們確定:
現(xiàn)狀
目標(biāo)
實(shí)現(xiàn)路徑
如果一個(gè)人能夠清晰地回答出這三個(gè)問(wèn)題,通常意味著他對(duì)要做的事有著清晰的認(rèn)識(shí)。這個(gè)框架雖然看似簡(jiǎn)單,但卻非常有效,它已經(jīng)成為我工具箱里一件非常稱手的思考工具。在我的職業(yè)生涯里,與很多人討論不同的事時(shí),我都會(huì)用到這個(gè)思考框架的不同變體,而在這個(gè)專欄里,我也會(huì)用它來(lái)幫助回答“怎樣高效工作、怎樣做好軟件”這件事。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
四個(gè)思考原則
在實(shí)際的工作中,這個(gè)思考框架會(huì)幫助我更好地了解自己的工作。比如,當(dāng)一個(gè)產(chǎn)品經(jīng)理給我交代一個(gè)要開(kāi)發(fā)的產(chǎn)品特性時(shí),我通常會(huì)問(wèn)他這樣一些問(wèn)題:
為什么要做這個(gè)特性,它會(huì)給用戶帶來(lái)怎樣的價(jià)值?
什么樣的用戶會(huì)用到這個(gè)特性,他們?cè)谑裁磮?chǎng)景下使用,他們又會(huì)怎樣使用它?
達(dá)成這個(gè)目的是否有其它手段?是不是一定要開(kāi)發(fā)一個(gè)系統(tǒng)?
這個(gè)特性上線之后,怎么衡量它的有效性?
如果產(chǎn)品經(jīng)理能夠回答好這些問(wèn)題,說(shuō)明他基本上已經(jīng)把這個(gè)工作想得比較清楚了,這個(gè)時(shí)候,我才會(huì)放心地去了解后續(xù)的細(xì)節(jié)。
我們用思考框架對(duì)照一下,為什么我會(huì)問(wèn)這些問(wèn)題。一般來(lái)說(shuō),一個(gè)新特性要開(kāi)發(fā)時(shí),現(xiàn)狀我是知道的。所以,我更關(guān)心目標(biāo),這里“為什么要做這個(gè)特性?”就是在問(wèn)目標(biāo),“給用戶帶來(lái)怎樣的價(jià)值”是在確定這個(gè)目標(biāo)的有效性。接下來(lái),我會(huì)關(guān)注實(shí)現(xiàn)路徑,用戶會(huì)怎么用,是否有其他的替代手段,我需要了解產(chǎn)品經(jīng)理的設(shè)計(jì)是經(jīng)過(guò)思考的,還是“拍著腦袋”給出的。衡量有效性,則是要保證我的工作不會(huì)被浪費(fèi)。
通過(guò)這個(gè)例子,我給你展示了怎么用這個(gè)思考框架提出問(wèn)題。但我估計(jì)你更想了解的是,我怎么會(huì)想到問(wèn)這些問(wèn)題。給出思考框架是為了讓你明白為什么要提出問(wèn)題,而具體問(wèn)題要怎么問(wèn),就可以遵循下面這四項(xiàng)原則:
(1)以終為始
(2)任務(wù)分解
(3)溝通反饋
(4)自動(dòng)化
這是我從思考框架延伸出來(lái)的。在這個(gè)專欄里,我會(huì)圍繞這四項(xiàng)原則和你詳細(xì)討論。
解釋一下,以終為始就是在工作的一開(kāi)始就確定好自己的目標(biāo)。我們需要看到的是真正的目標(biāo),而不是把別人交代給我們的工作當(dāng)作目標(biāo)。你可以看出這個(gè)原則是在幫助我們回答思考框架中,Where are we going?(我們要到哪兒去?)這個(gè)問(wèn)題。
任務(wù)分解是將大目標(biāo)拆分成一個(gè)一個(gè)可行的執(zhí)行任務(wù),工作分解得越細(xì)致,我們便越能更好地掌控工作,它是幫助我們回答思維框架中,How can we get there?(我們?nèi)绾蔚竭_(dá)那里?)的問(wèn)題。
如果說(shuō)前兩個(gè)原則是要在動(dòng)手之前做的分析,那后面兩個(gè)原則就是在通往目標(biāo)的道路上,為我們保駕護(hù)航,因?yàn)樵趯?shí)際工作中,我們少不了與人和機(jī)器打交道。
溝通反饋是為了疏通與其他人交互的渠道。一方面,我們保證信息能夠傳達(dá)出去,減少因?yàn)槔斫馄钤斐傻墓ぷ魇杪?#xff1b;另一方面,也要保證我們能夠準(zhǔn)確接收外部信息,以免因?yàn)樽晕腋杏X(jué)良好,阻礙了進(jìn)步。
自動(dòng)化就是將繁瑣的工作通過(guò)自動(dòng)化的方式交給機(jī)器執(zhí)行,這是我們程序員本職工作的一部分,我們擅長(zhǎng)的是為其他人打造自動(dòng)化的服務(wù),但自己的工作卻應(yīng)用得不夠,這也是我們工作中最值得優(yōu)化的部分。
這四個(gè)原則互相配合,形成了一個(gè)對(duì)事情的衡量標(biāo)準(zhǔn)。總體上可以保證我的工作是有效的,在明確目標(biāo)和完成目標(biāo)的過(guò)程中,都可以盡量減少偶然復(fù)雜度。
怎么把這四個(gè)原則用在工作中呢?我們回過(guò)頭來(lái)看一下前面的場(chǎng)景,產(chǎn)品經(jīng)理把要做的產(chǎn)品特性擺在我面前。站在以終為始的角度,我需要了解真正的目標(biāo)是什么,所以,我會(huì)關(guān)心為什么要做這個(gè)特性,為了保證目標(biāo)是有效的,我會(huì)關(guān)心它給用戶帶來(lái)的價(jià)值。
有了任務(wù)分解的視角,我需要將一個(gè)大的目標(biāo)進(jìn)行拆解,如果我要達(dá)成這個(gè)目標(biāo),整體解決方案是遠(yuǎn)遠(yuǎn)不夠的,我需要把任務(wù)分解成一個(gè)一個(gè)小的部分。所以,我會(huì)關(guān)心一個(gè)一個(gè)具體的使用場(chǎng)景。一方面,我會(huì)了解到更多的細(xì)節(jié),另一方面,當(dāng)時(shí)間緊迫的時(shí)候,我會(huì)和產(chǎn)品經(jīng)理來(lái)談?wù)劸烤箖?yōu)先實(shí)現(xiàn)哪個(gè)場(chǎng)景。
為什么要學(xué)會(huì)溝通反饋?因?yàn)槲倚枰鞔_,自己是否真正理解了產(chǎn)品經(jīng)理提交的需求,所以,我要不斷地問(wèn)問(wèn)題,確保自己的理解和產(chǎn)品經(jīng)理交代的內(nèi)容一致。另外,我也需要保證我的產(chǎn)品做出來(lái)確實(shí)能夠達(dá)到目標(biāo)。所以,我會(huì)關(guān)心它上線后的衡量手段。因?yàn)槲抑?#xff0c;這個(gè)行業(yè)里有太多代碼上線后,從來(lái)沒(méi)有運(yùn)行過(guò)。
自動(dòng)化的角度很有意思,我們做的方案通常是一個(gè)自動(dòng)化方案,但我們需要了解這個(gè)方案沒(méi)有自動(dòng)化之前是怎么做的。如果不自動(dòng)化,用戶會(huì)怎么用。所以,我會(huì)關(guān)心是不是還有其它替換方案,比如,買一個(gè)現(xiàn)成的服務(wù)。因?yàn)楹芏嘈枨蟮奶岢?#xff0c;只是因?yàn)槲覀冇辛艘粋€(gè)開(kāi)發(fā)團(tuán)隊(duì)而已。
好,現(xiàn)在你已經(jīng)對(duì)這四個(gè)原則在工作中的應(yīng)用有了一個(gè)直觀的認(rèn)識(shí)。但你也會(huì)發(fā)現(xiàn),我問(wèn)的這些問(wèn)題似乎已經(jīng)“超綱”了,超過(guò)了一個(gè)普通程序員應(yīng)該關(guān)注的范圍。但這就是真實(shí)世界,它不像考試一樣,有一個(gè)標(biāo)準(zhǔn)答案。
我們不是一個(gè)人孤獨(dú)地在工作,而是與其他人在協(xié)作,想要做到高效工作,我們就要“抬起頭”來(lái),跳出寫代碼這件事本身。所以,我在開(kāi)篇詞里說(shuō),程序員解決的問(wèn)題,大多不是程序問(wèn)題。
可能你對(duì)這些原則的了解還沒(méi)過(guò)癮,沒(méi)關(guān)系,這一講只是讓大家清晰地了解思考框架和原則的背后邏輯。接下來(lái),我會(huì)結(jié)合行業(yè)里的最佳實(shí)踐,給你進(jìn)一步講解這些原則和具體應(yīng)用。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
總結(jié)時(shí)刻
總結(jié)一下今天的內(nèi)容。大多數(shù)人工作低效是由于工作中偶然復(fù)雜度太多造成的,只要能夠更多地將注意力放到本質(zhì)復(fù)雜度上,減少偶然復(fù)雜度造成的消耗,我們“真實(shí)”的工作效率自然會(huì)得到大幅度提升。而想要減少偶然復(fù)雜度的消耗,就要了解一些高效的工作方式和行業(yè)的最佳實(shí)踐,而這一切是可以用統(tǒng)一的框架進(jìn)行思考的。
運(yùn)用這個(gè)思考框架,我們需要問(wèn)自己一些問(wèn)題:
Where are we?(我們現(xiàn)在在哪?)
Where are we going?(我們要到哪兒去?)
How can we get there?(我們?nèi)绾蔚竭_(dá)那里?)
為了把這個(gè)框架應(yīng)用在我們程序員的工作中,我給了你四個(gè)思考原則:
a、以終為始,確定好真實(shí)目標(biāo);
b、任務(wù)分解,找到實(shí)施路徑;
c、溝通反饋,解決與人打交道出現(xiàn)的問(wèn)題;
d、自動(dòng)化,解決與機(jī)器打交道出現(xiàn)的問(wèn)題。
如果今天的內(nèi)容你只能記住一件事,那請(qǐng)記住:面對(duì)問(wèn)題時(shí),用思考框架問(wèn)問(wèn)自己:現(xiàn)狀、目標(biāo)和路徑。
最后,我想請(qǐng)你思考一下,如果把這個(gè)思考框架運(yùn)用在你的職業(yè)發(fā)展規(guī)劃上,你會(huì)如何回答這三個(gè)問(wèn)題呢?歡迎留言。
如果你學(xué)習(xí)C/C++編程知識(shí)感覺(jué)有困難,想要和人一起交流討論,可以來(lái):C/C++編程,一起來(lái)成長(zhǎng)學(xué)習(xí)!
總結(jié)
以上是生活随笔為你收集整理的优秀程序员的开发效率是普通程序员的 10 倍,那么如何提升呢?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 读书笔记:《时间投资法》之二
- 下一篇: c/c++这么难学,那么学会了究竟有多牛