程序員是一個(gè)忙碌的職業(yè),與這個(gè)職業(yè)聯(lián)系在一起的詞兒,通常是忙碌、加班、熬夜、過(guò)勞、亞健康……當(dāng)忙碌成為了主旋律,“高效”一詞就自然浮出了水面。
可是,程序員工作效率是由編程能力決定的嗎?答案是“未必”。
這些年,我一直在研究一件事兒:為什么那些大師級(jí)程序員,可以兼顧 N 倍于一般人的工作,還有條不紊?他們究竟用了什么工作法?根據(jù)我的觀察與總結(jié),他們往往繞不開(kāi)下面四個(gè)工作原則。
以終為始
任務(wù)分解
溝通反饋
自動(dòng)化一切
下面,就給大家先介紹前兩個(gè)工作原則。
以終為始DoD
DoD(Definition of Done,完成的定義),從名字便不難看出,它就是為了解決軟件開(kāi)發(fā)中常見(jiàn)的“完成”問(wèn)題而生的。DoD 本身并不復(fù)雜,它就是告訴我們?cè)鯓铀闶峭瓿闪耍M量減少因?yàn)槠缌x造成的各種浪費(fèi)。
既然 DoD 是一個(gè)彌補(bǔ)理解差異的做法,那么它就應(yīng)該在人與人的協(xié)同工作中起作用。其中,最常見(jiàn)的做法是在團(tuán)隊(duì)中確定好 DoD。比如:
特性開(kāi)發(fā)完成,表示開(kāi)發(fā)人員經(jīng)過(guò)了需求澄清、功能設(shè)計(jì)、編寫(xiě)代碼、單元測(cè)試,通過(guò)了測(cè)試人員的驗(yàn)收,確保代碼處于一個(gè)可部署的狀態(tài),相關(guān)文檔已經(jīng)編寫(xiě)完畢。
開(kāi)發(fā)完成,表示開(kāi)發(fā)人員編寫(xiě)好功能代碼,編寫(xiě)好單元測(cè)試代碼,編寫(xiě)好集成測(cè)試代碼,測(cè)試可以通過(guò),代碼通過(guò)了代碼風(fēng)格檢查、測(cè)試覆蓋率檢查。
大家都是聰明人,一旦 DoD 確定好了,誰(shuí)該做什么事就一目了然了。
DoD 是一個(gè)清單,清單是一個(gè)個(gè)的檢查項(xiàng),用來(lái)檢查我們的工作完成情況。DoD 的檢查項(xiàng),就是我們開(kāi)發(fā)產(chǎn)品所需的一系列有價(jià)值的活動(dòng)。比如:編寫(xiě)代碼、編寫(xiě)測(cè)試代碼、通過(guò)測(cè)試人員驗(yàn)收等。
DoD 是團(tuán)隊(duì)成員間彼此匯報(bào)的一種機(jī)制。別把“匯報(bào)”想復(fù)雜了,最簡(jiǎn)單的匯報(bào)就是說(shuō)一句“這個(gè)功能做完了”。當(dāng)我們有了 DoD,做事便只有兩種狀態(tài),即“做完”和“沒(méi)做完”,根本沒(méi)有 80% 做完的說(shuō)法。
DoD 的檢查項(xiàng)應(yīng)該是實(shí)際可檢查的:你說(shuō)代碼寫(xiě)好了,代碼在哪里;你說(shuō)測(cè)試覆蓋率達(dá)標(biāo)了,怎么看到;你說(shuō)你功能做好了,演示一下。
在前面的討論中,我們所說(shuō)的 DoD 只是從個(gè)人層面入手。在團(tuán)隊(duì)層面,我們也可以定義 DoD,比如:
某個(gè)功能的 DoD,比如:這個(gè)功能特性已經(jīng)開(kāi)發(fā)完成,經(jīng)過(guò)產(chǎn)品負(fù)責(zé)人的驗(yàn)收,處于可部署的狀態(tài)。
一個(gè)迭代的 DoD,比如:這個(gè)迭代規(guī)劃的所有功能已經(jīng)完成。
一次發(fā)布的 DoD,比如,整個(gè)軟件處于可發(fā)布狀態(tài),上線計(jì)劃已經(jīng)明確。
精益創(chuàng)業(yè):驗(yàn)證產(chǎn)品特性的思考框架
精益創(chuàng)業(yè)提出“開(kāi)發(fā)(build)-測(cè)量(measure)-認(rèn)知(learn)”這樣一個(gè)反饋循環(huán)和最小可行產(chǎn)品的概念。
當(dāng)你有了一個(gè)新的想法(idea)時(shí),就把想法開(kāi)發(fā)成產(chǎn)品(code)投入市場(chǎng),然后,收集數(shù)據(jù)(data)獲取反饋,看看前面的想法是不是靠譜。無(wú)非得到兩種結(jié)果:好想法繼續(xù)加強(qiáng)、不靠譜的想法丟掉算了。不管是哪種結(jié)果,你都會(huì)產(chǎn)生新的想法,再進(jìn)入到下一個(gè)循環(huán)里。在這個(gè)反饋循環(huán)中,你所獲得的認(rèn)知是最重要的,因?yàn)樗墙?jīng)過(guò)驗(yàn)證的。
我們能夠接觸到的大多數(shù)產(chǎn)品都可以放在這個(gè)框架內(nèi)思考。當(dāng)產(chǎn)品經(jīng)理要做一個(gè)新產(chǎn)品或是產(chǎn)品的一個(gè)新特性,我們就可以用精益創(chuàng)業(yè)的這幾個(gè)概念來(lái)檢驗(yàn)一下產(chǎn)品經(jīng)理是否想清楚。
比如,你要做這個(gè)產(chǎn)品特性,你要驗(yàn)證的東西是什么呢?他要驗(yàn)證的目標(biāo)是否有數(shù)據(jù)可以度量呢?要解決的這個(gè)問(wèn)題是不是當(dāng)前最重要的事情,是否還有其他更重要的問(wèn)題呢?如果這些問(wèn)題得到肯定的答復(fù),那么驗(yàn)證這個(gè)目標(biāo)是否有更簡(jiǎn)單的解決方案,是不是一定要通過(guò)開(kāi)發(fā)一個(gè)產(chǎn)品特性來(lái)實(shí)現(xiàn)。
任務(wù)分解馬斯克的任務(wù)分解
特斯拉的創(chuàng)始人伊隆·馬斯克(Elon Musk)同時(shí)還創(chuàng)建了太空探索公司 SpaceX。SpaceX 有一個(gè)目標(biāo)是,送 100 萬(wàn)人上火星。美國(guó)政府曾經(jīng)算過(guò)一筆賬,把一個(gè)人送上火星,以現(xiàn)有技術(shù)是可行的,但需花費(fèi) 100 億美金。如果送 100 萬(wàn)人上火星就要 1 萬(wàn)萬(wàn)億,這筆錢(qián)相當(dāng)于美國(guó) 500 年的 GDP,貴到連美國(guó)政府都無(wú)法負(fù)擔(dān)。
馬斯克怎么解決這個(gè)問(wèn)題呢?他的第一步是準(zhǔn)備把人均費(fèi)用降到 50 萬(wàn)美元,相當(dāng)于一個(gè)人在地球上房子的錢(qián)。把原來(lái)的 100 億降到 50 萬(wàn),降低 2 萬(wàn)倍即可。
當(dāng)然,降低 2 萬(wàn)倍依然是一個(gè)聽(tīng)起來(lái)很遙遠(yuǎn)的目標(biāo)。關(guān)注點(diǎn)來(lái)了,馬斯克的第二步是,把 2 萬(wàn)分解成“20×10×100”,這是一道簡(jiǎn)單的數(shù)學(xué)題,也是馬斯克三個(gè)重點(diǎn)努力的方向。
“20”:現(xiàn)在的火星飛船一次只能坐 5 個(gè)人,馬斯克打算把火箭造大一點(diǎn),一次坐 100 人,這樣,就等于把成本降低 20 倍。如果你關(guān)注新聞的話,SpaceX 確實(shí)在進(jìn)行這方面的嘗試。
“10”:馬斯克認(rèn)為自己是私營(yíng)公司,效率高,成本可以降到 1/10。事實(shí)上,SpaceX 的成本目前已經(jīng)降到了同行的 1/5。
最后的 100 是什么呢?就是回收可重復(fù)使用的火箭。如果這個(gè)目標(biāo)能實(shí)現(xiàn),發(fā)射火箭的成本就只有燃料成本,這也就是我們頻頻看到 SpaceX 試飛火箭新聞的原因。
這么算下來(lái),你是不是覺(jué)得馬斯克的目標(biāo)不像最開(kāi)始聽(tīng)到那樣不靠譜了呢?正是通過(guò)將宏大目標(biāo)進(jìn)行任務(wù)分解,馬斯克才能將一個(gè)看似不著邊際的目標(biāo)向前推進(jìn)。
微操作
在ThoughtWorks 工作時(shí),我的 Sponsor 是 ThoughtWorks 現(xiàn)任 CEO 郭曉(Sponsor,類(lèi)似于工廠里師傅帶徒弟的關(guān)系),他也是寫(xiě)代碼出身的。他和我講過(guò)他和 Wiki 的發(fā)明者 Ward Cunningham 一起結(jié)對(duì)編程的場(chǎng)景。
Ward 每天拿到一個(gè)需求,并不急于寫(xiě)代碼,而是和郭曉一起做任務(wù)分解,分解到每個(gè)任務(wù)都很清晰之后,一個(gè)個(gè)任務(wù)完成就好了。當(dāng)時(shí)郭曉雖然覺(jué)得工作很緊張,但思路卻非常清晰。有時(shí),他也很奇怪,因?yàn)樵陂_(kāi)始工作之前,他會(huì)覺(jué)得那個(gè)問(wèn)題非常難以解決,結(jié)果一路分解下來(lái),每一步都是清晰的,也沒(méi)遇到什么困難就完成了。
任務(wù)分解是個(gè)好習(xí)慣,但想要掌握好它,大量的練習(xí)是必須的。我自己也著實(shí)花不少時(shí)間進(jìn)行練習(xí)。隨著我的練習(xí)增多,我越發(fā)理解任務(wù)分解的關(guān)鍵在于“小”。小到什么程度呢?有時(shí)甚至可以小到你認(rèn)為這件事不值得成為一件獨(dú)立的事,比如,升級(jí)一個(gè)依賴(lài)的版本,做一次變量改名。這樣做好處就是,它保證了我可以隨時(shí)停下來(lái)。
我曾讀到過(guò)一個(gè)關(guān)于著名高爾夫球手“老虎”伍茲的故事。高爾夫球手在打球的時(shí)候,可能會(huì)受到一些外界干擾,一般情況下還好,如果他已經(jīng)開(kāi)始揮桿,這時(shí)候受到了干擾,一般選手肯定是繼續(xù)把桿揮下去,但通常結(jié)果是打得不理想。而伍茲遇到這種情況,他會(huì)停下來(lái),重新做揮桿的動(dòng)作,保證了每一桿的標(biāo)準(zhǔn)。
伍茲能停下來(lái),固然是經(jīng)過(guò)了大量的練習(xí),但還有一個(gè)關(guān)鍵在于,對(duì)于別人而言,揮桿擊球是一個(gè)動(dòng)作,必須一氣呵成,而對(duì)伍茲來(lái)說(shuō),這個(gè)動(dòng)作是由若干小動(dòng)作組成,他只不過(guò)是剛好完成了某個(gè)小動(dòng)作,而沒(méi)有做下一個(gè)小動(dòng)作而已。換句話說(shuō),大家同樣都是完成一個(gè)原子操作,只不過(guò),伍茲的原子操作比其他人的原子操作小得多。
一個(gè)經(jīng)過(guò)分解后的任務(wù),需要關(guān)注的內(nèi)容是有限的,我們就可以針對(duì)這個(gè)任務(wù),把方方面面的細(xì)節(jié)想得更加清晰。很多人寫(xiě)代碼之所以漏洞百出,一個(gè)重要的原因就是任務(wù)粒度太大。
-
代碼
+關(guān)注
關(guān)注
30文章
4900瀏覽量
70800 -
程序員
+關(guān)注
關(guān)注
4文章
954瀏覽量
30435 -
馬斯克
+關(guān)注
關(guān)注
1文章
852瀏覽量
21887
原文標(biāo)題:大師級(jí)程序員,都用哪些工作法?
文章出處:【微信號(hào):AI_shequ,微信公眾號(hào):人工智能愛(ài)好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
利用西門(mén)子博途(TIA Portal)的程序比較功能,提高工作效率

使用pdfDocs提高工作效率,改進(jìn)PDF工作流程

Amazon Q Business發(fā)布新功能 助力企業(yè)提升內(nèi)部工作效率
三維激光掃描儀如何提高工作效率
如何提高編碼器的工作效率與作用
Linux驅(qū)動(dòng)程序程序員指南

評(píng)論