《10x程序員工作法》學(xué)習(xí)筆記 day12

任務(wù)分解

什么是任務(wù)分解

將一個(gè)大問題悼院,分解成一個(gè)個(gè)可執(zhí)行的小問題

任務(wù)分解的重要性

一個(gè)大問題淮逊,我們都很難給出答案,但回答小問題卻是我們擅長(zhǎng)的蚁趁。所以裙盾,當(dāng)我們學(xué)會(huì)將問題分解,就相當(dāng)于朝著問題的解決邁進(jìn)了一大步。
與很多實(shí)踐相反番官,任務(wù)分解是一個(gè)知難行易的過程庐完。知道怎么分解是困難的,一旦知道了徘熔,行動(dòng)反而要相對(duì)來說容易一些门躯。
也許你會(huì)說,任務(wù)分解并不難于理解酷师,我在解決問題的過程中也是先做任務(wù)分解的讶凉,但“依然過不好這一生∩娇祝”這就要提到我前面所說難點(diǎn)中懂讯,很多人可能忽略的部分:可執(zhí)行。
不過台颠,在實(shí)際工作中褐望,大多數(shù)人都高估了自己可執(zhí)行粒度,低估任務(wù)分解的程度蓉媳。換句話說譬挚,如果你沒做過任務(wù)分解的練習(xí),你分解出來的大部分任務(wù)酪呻,粒度都會(huì)偏大减宣。只有能把任務(wù)拆分得非常小,你才能對(duì)自己的執(zhí)行能力有一個(gè)更清楚地認(rèn)識(shí)玩荠,真正的高手都是有很強(qiáng)的分解能力漆腌。這個(gè)差別就相當(dāng)于,同樣觀察一個(gè)物品阶冈,你用的是眼睛闷尿,而高手用的是顯微鏡。在你看來女坑,高手全是微操作填具。關(guān)于這個(gè)話題,后面我們?cè)賮砑?xì)聊匆骗。

以終為始劳景,任務(wù)分解

“以終為始”,就是在強(qiáng)調(diào)盡早發(fā)現(xiàn)問題碉就。能從需求上解決的問題盟广,就不要到開發(fā)階段。同樣瓮钥,在開發(fā)階段能解決的問題筋量,就不要留到測(cè)試階段烹吵。
想要理解測(cè)試金字塔成為行業(yè)最佳實(shí)踐的緣由,我們需要理解不同層次測(cè)試的差異桨武。越是底層的測(cè)試肋拔,牽扯到相關(guān)內(nèi)容越少,而高層測(cè)試則涉及面更廣呀酸。
這個(gè)模塊的主題是“任務(wù)分解”只损,我必須強(qiáng)調(diào)一點(diǎn):小事反饋周期短,而大事反饋周期長(zhǎng)七咧。小事容易做好,而大事難度則大得多叮叹。所以艾栋,以這個(gè)標(biāo)準(zhǔn)來看,底層的測(cè)試才更容易寫好蛉顽。
所以蝗砾,雖然冰淇淋蛋卷更符合直覺,但測(cè)試金字塔才是行業(yè)的最佳實(shí)踐携冤。

測(cè)試驅(qū)動(dòng)開發(fā)

在很多人看來悼粮,TDD 就是先寫測(cè)試后寫代碼。在此我必須澄清一下曾棕,這個(gè)理解是錯(cuò)的扣猫。先寫測(cè)試,后寫代碼的實(shí)踐指的是測(cè)試先行開發(fā)翘地,而非測(cè)試驅(qū)動(dòng)開發(fā)申尤。
學(xué)習(xí) TDD 的第一步,是要記住 TDD 的節(jié)奏:“紅 - 綠 - 重構(gòu)”衙耕。


image.png

紅昧穿,表示寫了一個(gè)新的測(cè)試,測(cè)試還沒有通過的狀態(tài)橙喘;綠时鸵,表示寫了功能代碼,測(cè)試通過的狀態(tài)厅瞎;而重構(gòu)饰潜,就是再完成基本功能之后,調(diào)整代碼的過程磁奖。
測(cè)試先行開發(fā)和測(cè)試驅(qū)動(dòng)開發(fā)在第一步和第二步是一樣的囊拜,先寫測(cè)試,然后寫代碼完成功能比搭。二者的差別在于冠跷,測(cè)試驅(qū)動(dòng)開發(fā)并沒有就此打住南誊,它還有一個(gè)更重要的環(huán)節(jié):重構(gòu)(refactoring)。
如果你真的理解重構(gòu)蜜托,你就知道抄囚,它就是一個(gè)消除代碼壞味道的過程。一旦你有了測(cè)試橄务,你就可以大膽地重構(gòu)了幔托,因?yàn)槿魏涡薷腻e(cuò)誤,測(cè)試會(huì)替你捕獲到蜂挪。
因?yàn)橹貥?gòu)和測(cè)試的互相配合重挑,它會(huì)驅(qū)動(dòng)著你把代碼寫得越來越好。這是對(duì)“驅(qū)動(dòng)”一詞最粗淺的理解棠涮。

因?yàn)槊В阋苍S本能上認(rèn)為,測(cè)試是額外的工作严肪,但實(shí)際上史煎,測(cè)試也應(yīng)該是程序員工作的一部分,這在上一篇文章中我已經(jīng)講過驳糯。
如果我們把思路反過來篇梭,我有一個(gè)測(cè)試,怎么寫代碼能通過它酝枢。一旦你先思考測(cè)試恬偷,設(shè)計(jì)思路就完全變了:我的代碼怎么寫才是能測(cè)試的,也就是說帘睦,我們要編寫具有可測(cè)試性的代碼喉磁。用這個(gè)角度,測(cè)試是不是就變得簡(jiǎn)單了呢官脓?
把測(cè)試放在前面协怒,還帶來了視角的轉(zhuǎn)變,要編寫可測(cè)的代碼卑笨,為此孕暇,我們甚至需要調(diào)整設(shè)計(jì),所以赤兴,有人也把 TDD 稱為測(cè)試驅(qū)動(dòng)設(shè)計(jì)妖滔。

測(cè)試驅(qū)動(dòng)開發(fā)的特點(diǎn)

《測(cè)試驅(qū)動(dòng)開發(fā)》這本書很有意思。如果你只是為了了解 TDD桶良,這本書可能很無聊座舍。Kent Beck 在第一部分只是在寫一個(gè)功能,寫完一段又寫一段陨帆。
這本書我看過兩遍曲秉,第一遍覺得平淡無奇采蚀,這種代碼我也能寫。第二遍看懂他的思路時(shí)承二,我?guī)缀跏钦痼@的感覺榆鼠,因?yàn)樗耆窃谡故?Kent Beck 的工作方式。這也是我把 TDD 放到這個(gè)部分來講的重要原因亥鸠,Kent Beck 在做的就是任務(wù)分解妆够。任務(wù)分解,也是這本書的真正價(jià)值所在负蚊。

Kent Beck 是怎么做的呢神妹?每當(dāng)遇到一件要做的事,Kent Beck 總會(huì)先把它分解成幾個(gè)小任務(wù)家妆,記在一個(gè)清單上灾螃,然后,才是動(dòng)手寫測(cè)試揩徊、寫代碼、重構(gòu)這樣一個(gè)小循環(huán)嵌赠。等一個(gè)循環(huán)完成了塑荒,他會(huì)劃掉已經(jīng)做完的任務(wù),開始下一個(gè)姜挺。
一旦在解決問題的過程中遇到任何新的問題齿税,他會(huì)把這個(gè)要解決的問題記錄在清單上,保證問題不會(huì)丟失炊豪,然后凌箕,繼續(xù)回到自己正在處理的任務(wù)上。當(dāng)他把一個(gè)個(gè)任務(wù)完成的時(shí)候词渤,問題就解決完了牵舱。

任務(wù)分解的重點(diǎn)是:小

很多人看了一些 TDD 的練習(xí)覺得很簡(jiǎn)單,但自己動(dòng)起手來卻不知道如何下手缺虐。中間就是缺了任務(wù)分解的環(huán)節(jié)芜壁。
隨著我在任務(wù)分解上練習(xí)的增多,我越發(fā)理解任務(wù)分解的關(guān)鍵在于:小高氮。
小到什么程度呢慧妄?有時(shí)甚至可以小到你可能認(rèn)為這件事不值得成為一件獨(dú)立的事。比如升級(jí)一個(gè)依賴的版本剪芍,做一次變量改名塞淹。
這樣做的好處是什么呢?它保證了我可以隨時(shí)停下來罪裹。

同樣饱普,我們寫程序的時(shí)候运挫,都不喜歡被打擾,因?yàn)橐坏┍淮驍_费彼,接續(xù)上狀態(tài)需要很長(zhǎng)一段時(shí)間滑臊,畢竟,我們可不像操作系統(tǒng)那么容易進(jìn)行上下文切換箍铲。
但如果任務(wù)足夠小雇卷,完成一個(gè)任務(wù),我們選擇可以進(jìn)入到下一個(gè)任務(wù)颠猴,也可以停下來关划。這樣,即便被打擾翘瓮,我們也可以很快收尾一個(gè)任務(wù)贮折,不至于被影響太多。

github提交1000天

我曾經(jīng)在 github 上連續(xù)提交代碼 1000 天资盅,這是什么概念调榄?差不多三年的時(shí)間里,每天我都能夠堅(jiān)持寫代碼呵扛,提交代碼每庆,這還不算工作上寫的代碼。
對(duì)于大多數(shù)人來說今穿,這是不可思議的缤灵。但我堅(jiān)持做到了,不是因?yàn)槲矣卸嗔瞬黄鹄渡梗俏茵B(yǎng)成了自己的微習(xí)慣腮出。
這個(gè)連續(xù)提交的基礎(chǔ),就是我自己在練習(xí)任務(wù)分解時(shí)芝薇,不斷地嘗試把一件事拆細(xì)胚嘲,這樣,我每天都至少能保證完成一小步洛二。當(dāng)然慢逾,如果有時(shí)間了,我也會(huì)多寫一點(diǎn)灭红。正是通過這樣的方法侣滩,我堅(jiān)持了 1000 天,也熟練掌握了任務(wù)分解的技巧君珠。

一個(gè)經(jīng)過分解后的任務(wù)娇斑,需要關(guān)注的內(nèi)容是有限的材部,我們就可以針對(duì)著這個(gè)任務(wù)乐导,把方方面面的細(xì)節(jié)想得更加清晰浸颓。
如果今天的內(nèi)容你只能記住一件事产上,那請(qǐng)記住:將任務(wù)拆小晋涣,越小越好谢鹊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末佃扼,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挎扰,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異似谁,居然都是意外死亡掠哥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來彪杉,“玉大人,你說我怎么就攤上這事攀唯】释瑁” “怎么了曙强?”我有些...
    開封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵碟嘴,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我错沃,道長(zhǎng)枢析,這世上最難降的妖魔是什么刃麸? 我笑而不...
    開封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任把沼,我火速辦了婚禮吁伺,結(jié)果婚禮上篮奄,老公的妹妹穿的比我還像新娘。我一直安慰自己昼丑,他們只是感情好夸赫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開白布胁附。 她就那樣靜靜地躺著,像睡著了一般州袒。 火紅的嫁衣襯著肌膚如雪郎哭。 梳的紋絲不亂的頭發(fā)上菇存,一...
    開封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天亥至,我揣著相機(jī)與錄音贱迟,去河邊找鬼衣吠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛惊搏,可吹牛的內(nèi)容都是我干的恬惯。 我是一名探鬼主播宿崭,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了吆鹤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤疑务,失蹤者是張志新(化名)和其女友劉穎沾凄,沒想到半個(gè)月后梗醇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡撒蟀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年叙谨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片保屯。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡手负,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出姑尺,到底是詐尸還是另有隱情竟终,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布切蟋,位于F島的核電站统捶,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏敦姻。R本人自食惡果不足惜瘾境,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望镰惦。 院中可真熱鬧迷守,春花似錦、人聲如沸旺入。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)茵瘾。三九已至礼华,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拗秘,已是汗流浹背圣絮。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留雕旨,地道東北人扮匠。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像凡涩,于是被迫代替她去往敵國(guó)和親棒搜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353