敏捷開(kāi)發(fā)修煉之道
最近看了一本叫高效程序員的45個(gè)習(xí)慣征椒,下面總結(jié)內(nèi)容傅联。
全書(shū)分為9個(gè)章節(jié):
- 敏捷開(kāi)發(fā)之道
- 態(tài)度決定一切
- 學(xué)無(wú)止境
- 交互用戶(hù)想要的軟件
- 敏捷反饋
- 敏捷編碼
- 敏捷調(diào)試
- 敏捷協(xié)作
- 尾聲:走向敏捷
第一章:敏捷開(kāi)發(fā)之道
用原文的方法講,敏捷開(kāi)發(fā)就是在一個(gè)高度協(xié)作的環(huán)境中,不斷地使用反饋進(jìn)行自我調(diào)整和完善。
我想其實(shí)和學(xué)習(xí)任何事情都是一樣的道理,實(shí)踐出真知疆瑰,不斷地嘗試和反饋,糾正自己的錯(cuò)誤昙啄,這樣容易推動(dòng)進(jìn)度穆役,有目標(biāo)性,效率也會(huì)更高跟衅。
第二章:態(tài)度決定一切
做事的態(tài)度非常重要孵睬,包括個(gè)人和團(tuán)隊(duì)。專(zhuān)業(yè)的態(tài)度應(yīng)該著眼于項(xiàng)目和團(tuán)隊(duì)的積極結(jié)果伶跷,關(guān)注個(gè)人和團(tuán)隊(duì)的成長(zhǎng)掰读,圍繞最終的成功開(kāi)展工作。
1.做事
反例
:“出了問(wèn)題叭莫,第一重要的是確定元兇蹈集。找到那個(gè)白癡!一旦證實(shí)了是他的錯(cuò)誤雇初,就可以保證這樣的問(wèn)題永遠(yuǎn)不會(huì)再發(fā)生了”拢肆。
這個(gè)錯(cuò)誤的觀點(diǎn)很滑稽,但是從生活中也經(jīng)常發(fā)現(xiàn)這種態(tài)度靖诗,比如出錯(cuò)了大家第一件事情就是找是誰(shuí)的錯(cuò)郭怪,而不是想著解決問(wèn)題的方法。
正確的做法
:“把矛頭對(duì)準(zhǔn)問(wèn)題的解決方法刊橘,而不是人鄙才。這是真正有用處的正面效應(yīng)”。
勇于承認(rèn)自己不知道的答案促绵,這樣讓人感覺(jué)放心攒庵,一個(gè)重大的錯(cuò)誤應(yīng)該被視為一個(gè)學(xué)習(xí)而不是指責(zé)他人的機(jī)會(huì)。
平衡的藝術(shù):
- “這不是我的錯(cuò)”败晴,這句話(huà)不對(duì)浓冒。“這都是你的錯(cuò)”尖坤,更不對(duì)
- 如果你沒(méi)犯過(guò)任何錯(cuò)誤稳懒,那么說(shuō)明你可能沒(méi)有努力去工作(真是有道理!B丁场梆!哈哈)
- 開(kāi)發(fā)者和質(zhì)量工程師爭(zhēng)論某個(gè)問(wèn)題是系統(tǒng)本身缺陷還是系統(tǒng)增強(qiáng)功能導(dǎo)致的佛致,通常沒(méi)什么意義,還不如趕緊去修復(fù)它
- 如果一個(gè)團(tuán)隊(duì)成員誤解了一個(gè)需求辙谜、一個(gè)API,那么其他人可能也有相同誤解
- 如果一個(gè)成員一再傷害團(tuán)隊(duì)感昼,則他表現(xiàn)得很不職業(yè)装哆,應(yīng)該開(kāi)掉他
- 如果大部分成員(尤其開(kāi)發(fā)領(lǐng)導(dǎo)者)行為不職業(yè),并且他們對(duì)團(tuán)隊(duì)目標(biāo)都不感興趣定嗓,你就應(yīng)該離開(kāi)這個(gè)團(tuán)隊(duì)
2.欲速則不達(dá)
反例
:“你不需要真正理解那塊代碼蜕琴,它只要能夠工作就可以了。哦宵溅,只要在結(jié)果中加幾行代碼凌简,他就可以工作了,干吧恃逻!就把那幾行加進(jìn)去雏搂,它應(yīng)該可以工作”。
經(jīng)常會(huì)遇到這種情況寇损,出現(xiàn)一個(gè)bug凸郑,時(shí)間緊迫,通過(guò)加一行代碼或者忽略那個(gè)列表最后一個(gè)條目矛市,就可以工作(好像我也干過(guò)芙沥,欲哭無(wú)淚!W抢簟6颉)。但是接下來(lái)做法才能說(shuō)明找田,誰(shuí)是優(yōu)秀程序員歌憨,誰(shuí)是拙劣碼農(nóng):
- 拙劣代碼工人會(huì)不假思索完成改寫(xiě),然后轉(zhuǎn)向下一個(gè)問(wèn)題午阵;
- 優(yōu)秀程序員會(huì)盡力去理解為什么這里+1躺孝,更重要是去想明白會(huì)產(chǎn)生說(shuō)明其他影響;
因此底桂,最好做到:
- 不要孤立地編碼植袍,實(shí)行代碼復(fù)審,有利于代碼更好理解和發(fā)現(xiàn)bug籽懦;
- 使用單元測(cè)試于个,項(xiàng)目可以分成更好管理的小塊,還能直接閱讀單元測(cè)試文檔暮顺,更有利于理解代碼模塊厅篓,運(yùn)行和使用代碼秀存;
平衡的藝術(shù):
- 必須理解每一塊的代碼如何工作,但不需要成為專(zhuān)家羽氮,只要能夠使用它有效工作就夠了或链;
- 如果有成員宣布,某塊代碼其他人很難看懂档押,那么意味著任何人都很難維護(hù)它澳盐,需要修改它;
- 不要急于修復(fù)一段沒(méi)有真正理解的代碼令宿;
- 對(duì)于大型系統(tǒng)叼耙,除了深入正在開(kāi)發(fā)的模塊,還需要從更高層了解大部分模塊功能粒没,理解系統(tǒng)各個(gè)功能塊之間的交互
3.對(duì)事不對(duì)人
一個(gè)例子筛婉,當(dāng)某人正在做一個(gè)新方案介紹時(shí),下面有人說(shuō):“那樣很蠢癞松!”(也就暗示開(kāi)發(fā)者也蠢)爽撒,改進(jìn)一下“那樣很蠢,你忘記考慮它要線(xiàn)程安全拦惋〈艺悖”,而最佳表達(dá)方式是:“謝謝厕妖,xx首尼,但是我想知道,兩個(gè)用戶(hù)同時(shí)登錄會(huì)發(fā)生什么情況言秸?”
三種方式對(duì)應(yīng)三種含義:
- 否定個(gè)人能力
- 指出明顯缺點(diǎn)软能,并否定其觀點(diǎn)
- 詢(xún)問(wèn)你的隊(duì)友,并提出你的顧慮
對(duì)于團(tuán)隊(duì)決策需要做一下特殊技術(shù):
- 設(shè)定最終期限举畸,沒(méi)有最好的方案查排,只有最好,在決策為難時(shí)抄沮,必須做出決策跋核;
- 逆向思維,客觀對(duì)待問(wèn)題:先積極看到它的正面叛买,然后再努力從反面去認(rèn)識(shí)它砂代;
- 設(shè)立仲裁人,仲裁人保證每個(gè)人都有發(fā)言機(jī)會(huì)率挣,防止被明星員工操縱會(huì)議刻伊,及時(shí)打斷假大空發(fā)言,如果沒(méi)有積極參加這次討論,你最好就退一步做會(huì)議監(jiān)督者(咦捶箱,當(dāng)我對(duì)問(wèn)題不了解的時(shí)候智什,好像就是這么干的);
- 支持已經(jīng)做出的決定丁屎,無(wú)論誰(shuí)定的方案荠锭,團(tuán)隊(duì)?wèi)?yīng)該都努力完成,而不是關(guān)心誰(shuí)的主意
4.排除萬(wàn)難晨川,奮勇前進(jìn)
發(fā)現(xiàn)某段代碼太骯臟了节沦,應(yīng)該講糟糕的代碼放到一邊,立刻重寫(xiě)础爬。并且列出重寫(xiě)的理由,幫助你的老板和同事認(rèn)清形勢(shì)吼鳞,并得到正確的解決方案看蚜。
第三章:學(xué)無(wú)止境
敏捷開(kāi)發(fā)需要持續(xù)不斷的學(xué)習(xí)和充電(所有行業(yè)都是,好嗎E庾馈9┭住)
5.跟蹤變化
你能嗅到將要流行的新技術(shù),知道它們已經(jīng)發(fā)布或者投入使用疾党。如果必須把工作切換到一種新的技術(shù)領(lǐng)域音诫,你能做到。
平衡的藝術(shù):
- 正確把握對(duì)新技術(shù)的投入精力
- 不可能精通每個(gè)技術(shù)雪位,只要在某些方面成為專(zhuān)家竭钝,用同樣的方法,很容易成為新領(lǐng)域的專(zhuān)家
- 要明白為什么需要這項(xiàng)新技術(shù)雹洗,它企圖解決什么樣的問(wèn)題香罐?可以被用在什么地方?
- 避免一時(shí)沖動(dòng)情況下时肿,只是想把新技術(shù)引入開(kāi)發(fā)中庇茫,在做決策前,需要評(píng)估新技術(shù)的優(yōu)勢(shì)螃成,開(kāi)發(fā)一個(gè)小的原型系統(tǒng)
6.對(duì)團(tuán)隊(duì)投資
提供個(gè)人和團(tuán)隊(duì)學(xué)習(xí)的更好平臺(tái)旦签,例如通過(guò)午餐會(huì)議增進(jìn)每個(gè)人的知識(shí)和技能,并且?guī)椭蠹揖奂谝黄疬M(jìn)行溝通交流寸宏。
平衡的藝術(shù):
- 一起讀書(shū)宁炫,但是選好的書(shū)
- 盡量讓講座走入團(tuán)隊(duì),如果午餐會(huì)議在禮堂中進(jìn)行击吱,還要使用幻燈片淋淀,那么減少了接觸和討論機(jī)會(huì)
- 堅(jiān)持有規(guī)律講座,持續(xù)、小步前進(jìn)才是敏捷
- 如果有人因?yàn)槌燥埲毕荻浞祝妹朗痴T惑他們
- 不要局限于純技術(shù)主題炭臭,項(xiàng)目估算、溝通技巧非技術(shù)主題也可以
7.懂的丟棄
新技術(shù)會(huì)讓人感到恐懼袍辞,畢竟需要學(xué)習(xí)很多東西鞋仍。但是已有的技能和習(xí)慣為你打好了基礎(chǔ),但不能依賴(lài)它們搅吁。
8.打破砂鍋問(wèn)到底
不停地問(wèn)為什么威创,不能只滿(mǎn)足別人告訴你的表面現(xiàn)象,要不停地提問(wèn)知道你明白問(wèn)題的根源谎懦。
9.把握開(kāi)發(fā)節(jié)奏
項(xiàng)目開(kāi)發(fā)需要一致和穩(wěn)定的節(jié)奏肚豺。編輯,運(yùn)行測(cè)試界拦,代碼復(fù)審吸申,一致的迭代,然后發(fā)布享甸。如果知道什么時(shí)候開(kāi)始下一個(gè)節(jié)拍截碴,跳舞就會(huì)更加容易
平衡的藝術(shù):
- 在每天結(jié)束的時(shí)候,測(cè)試代碼蛉威,提交代碼日丹,沒(méi)有殘留的代碼
- 不要搞得經(jīng)常加班
- 以固定、規(guī)律的長(zhǎng)度運(yùn)行迭代
- 如果開(kāi)發(fā)過(guò)于密集蚯嫌,你就會(huì)筋疲力盡
- 有規(guī)律的開(kāi)發(fā)節(jié)奏會(huì)暴露很多問(wèn)題哲虾,讓你有更多鼓起勇氣的借口
- 就像減肥一樣,一點(diǎn)點(diǎn)的成功也是很大的鼓勵(lì)择示,小而可達(dá)到的目標(biāo)會(huì)讓每個(gè)人全速前進(jìn)妒牙,慶祝每一次難忘的成功:共享沒(méi)事和啤酒或者團(tuán)隊(duì)聚餐(我喜歡!6酝O娼瘛!)
第四章:支付用戶(hù)想要的軟件
開(kāi)發(fā)的目標(biāo)應(yīng)該由客戶(hù)決定剪菱,因此為了讓軟件符合用戶(hù)需求摩瞎,要提早集成,頻繁集成孝常,使得代碼一直保持可以發(fā)布旗们,由于需要一次又一次給用戶(hù)演示,因此應(yīng)當(dāng)提早實(shí)現(xiàn)自動(dòng)化部署构灸。
10.讓客戶(hù)做決定
開(kāi)發(fā)者上渴、經(jīng)理或者業(yè)務(wù)分析師不應(yīng)該做業(yè)務(wù)方面的決定。用業(yè)務(wù)負(fù)責(zé)人能夠理解的語(yǔ)言,向他們?cè)敿?xì)解釋遇到的問(wèn)題稠氮,并讓他們做決定曹阔。
平衡的藝術(shù):
- 記錄客戶(hù)做的決定,并注明原因
- 不要用低級(jí)別和沒(méi)價(jià)值的問(wèn)題打擾繁忙的業(yè)務(wù)人員
- 不要隨意假設(shè)低級(jí)別的問(wèn)題不會(huì)影響他們的業(yè)務(wù)
- 如果業(yè)務(wù)負(fù)責(zé)人回答“我不知道”隔披,這也是一個(gè)稱(chēng)心如意的答案赃份,也許是他們還沒(méi)想那么遠(yuǎn),也許是他們只有看到運(yùn)行的實(shí)物才能評(píng)估結(jié)果奢米,盡可能給他們提供建議抓韩,實(shí)現(xiàn)代碼的時(shí)候也要考慮可能出現(xiàn)的變化
11.讓設(shè)計(jì)指導(dǎo)而不是操作開(kāi)發(fā)
好的設(shè)計(jì)應(yīng)該是正確的,而不是精確的鬓长。也就是說(shuō)谒拴,它描述的一切必須是正確的,不應(yīng)該涉及不確定或者可能會(huì)發(fā)生變化的細(xì)節(jié)涉波,因此它是目標(biāo)彪薛,而不是具體處方。
如果寫(xiě)得太具體有兩個(gè)弊端怠蹂,一是程序員沒(méi)有代碼決定權(quán),只是翻譯偽代碼少态,沒(méi)成就感城侧;二是,花費(fèi)太多時(shí)間彼妻,如果項(xiàng)目變動(dòng)嫌佑,或者規(guī)劃有問(wèn)題,就浪費(fèi)了大量時(shí)間侨歉。
平衡的藝術(shù):
- 在真正代碼驗(yàn)證之前屋摇,不要陷入太多的設(shè)計(jì)任務(wù)。當(dāng)對(duì)設(shè)計(jì)一無(wú)所知的時(shí)候幽邓,投入編碼也是一件危險(xiǎn)的事情
- 白板炮温、草圖、便利貼都是非常好的設(shè)計(jì)工具牵舵,復(fù)雜的建模工具只會(huì)讓你分散精力柒啤,而不是啟發(fā)你的工作
12.合理地使用技術(shù)
根據(jù)需要選擇技術(shù),首先決定什么是你需要的畸颅,接著為這些具體的問(wèn)題評(píng)估使用技術(shù)担巩,對(duì)任何要使用的技術(shù),多問(wèn)一些挑剔的問(wèn)題没炒,并真實(shí)地回答涛癌。
平衡的藝術(shù):
- 如果沒(méi)有足夠經(jīng)驗(yàn),不要急于決定用什么技術(shù),如果再做系統(tǒng)原型拳话,演示給用戶(hù)看時(shí)先匪,可以用散列表代替數(shù)據(jù)庫(kù)
- 每一門(mén)技術(shù)都有優(yōu)缺點(diǎn),需要清楚它的利弊
- 不要開(kāi)發(fā)那些容易下載到的東西
13.保持可以發(fā)布
任何時(shí)候進(jìn)行項(xiàng)目展示時(shí)假颇,都能很自信毫不猶豫地給別人演示最新構(gòu)建的軟件胚鸯。項(xiàng)目一直處于可以運(yùn)行的穩(wěn)定狀態(tài)。
平衡的藝術(shù):
- 做了一些大改動(dòng)笨鸡,需要一個(gè)月才能保證發(fā)布姜钳,這種情況應(yīng)該只是例外,不能養(yǎng)成習(xí)慣
- 如果不得不讓系統(tǒng)長(zhǎng)期不可以發(fā)布形耗,那么做一個(gè)分支版本
14.提早集成哥桥,頻繁集成
代碼集成是主要的風(fēng)險(xiǎn)來(lái)源,要想規(guī)避這個(gè)風(fēng)險(xiǎn)激涤,只有提早集成拟糕,持續(xù)有規(guī)律地進(jìn)行集成。
平衡的藝術(shù):
- 成功的集成就意味著所有的單元測(cè)試不停地通過(guò)
- 通常每天都要和團(tuán)隊(duì)其他的成員一起集成代碼好幾次倦踢。但是如果每次修改就集成送滞,大部分時(shí)間花在集成而不是寫(xiě)代碼,那么就是集成得太過(guò)頻繁了
- 如果不夠頻繁辱挥,也許發(fā)現(xiàn)每天都在解決代碼集成帶來(lái)的問(wèn)題犁嗅,而不是專(zhuān)心寫(xiě)代碼
15.提早實(shí)現(xiàn)自動(dòng)化部署
一開(kāi)始就實(shí)現(xiàn)自動(dòng)化部署應(yīng)用,使用部署系統(tǒng)安裝你的應(yīng)用晤碘,保證在不同的機(jī)器上用不同的配置文件測(cè)試依賴(lài)的問(wèn)題褂微。系統(tǒng)的安裝或者部署應(yīng)該簡(jiǎn)單、可靠及可重復(fù)园爷。
16.使用演示獲得頻繁反饋
清晰可見(jiàn)的開(kāi)發(fā)宠蚂,在開(kāi)發(fā)的時(shí)候保持應(yīng)用可見(jiàn)(客戶(hù)心中也要了解)。每隔一周或者兩周童社,邀請(qǐng)所有客戶(hù)求厕,演示最新完成的功能,積極獲得他們的反饋
17.使用短迭代扰楼,增量發(fā)布
短迭代讓人感覺(jué)非常專(zhuān)注且具有效率甘改。你能看到一個(gè)實(shí)際確切的目標(biāo)。嚴(yán)格的最終期限迫使你做出一些艱難的決策灭抑,沒(méi)有遺留下長(zhǎng)期懸而未決的問(wèn)題十艾。
平衡的藝術(shù):
- 如果每個(gè)迭代周期不夠用,要么任務(wù)太大腾节,要么迭代周期太短(所以一定要把握自己的節(jié)奏和時(shí)間)
- 如果發(fā)布功能背離用戶(hù)需求忘嫉,多半是因?yàn)榈芷谔L(zhǎng)了
- 增量的發(fā)布時(shí)必須的荤牍,并且能為用戶(hù)提供價(jià)值
18.固定的價(jià)格意味著背叛承諾
基于真實(shí)工作的評(píng)估,讓團(tuán)隊(duì)和客戶(hù)一起庆冕,真正地在當(dāng)前項(xiàng)目中工作康吵,做的具體實(shí)際的評(píng)估,由客戶(hù)控制他們要的功能和預(yù)算访递。
第五章:敏捷反饋
19.守護(hù)天使
使用自動(dòng)化的單元測(cè)試晦嵌,好的單元測(cè)試能夠?yàn)槟愕拇a問(wèn)題提供及時(shí)的警報(bào)。如果沒(méi)有到位的單元測(cè)試拷姿,不要進(jìn)行任何設(shè)計(jì)和代碼修改惭载。
平衡的藝術(shù):
- 人們不編寫(xiě)單元測(cè)試的很多借口都是因?yàn)榇a中的設(shè)計(jì)缺陷。通诚斐玻抗議越強(qiáng)烈描滔,就說(shuō)明設(shè)計(jì)越糟糕
- 不是測(cè)試越多質(zhì)量就越高,測(cè)試必須要有效踪古,如果測(cè)試無(wú)法發(fā)現(xiàn)任何問(wèn)題含长,也許他們就是沒(méi)有測(cè)試對(duì)路
20.先使用它再實(shí)現(xiàn)它
利用測(cè)試驅(qū)動(dòng)開(kāi)發(fā)作為設(shè)計(jì)工具,這樣只有具體理由才開(kāi)始編碼伏穆,可以專(zhuān)注于設(shè)計(jì)接口拘泞,而不會(huì)被很多實(shí)現(xiàn)細(xì)節(jié)干擾
21.不同環(huán)境,就有不同問(wèn)題
使用持續(xù)集成工具枕扫,在每個(gè)支持的平臺(tái)和環(huán)境中運(yùn)行單元測(cè)試陪腌,要積極尋找問(wèn)題,而不是等問(wèn)題來(lái)找你
22.自動(dòng)驗(yàn)收測(cè)試
為核心業(yè)務(wù)邏輯創(chuàng)建測(cè)試铡原,讓你的客戶(hù)單獨(dú)驗(yàn)證這些測(cè)試,要讓它們像一般測(cè)試一樣可以自動(dòng)運(yùn)行商叹。
23.度量真實(shí)地進(jìn)度
使用代辦事項(xiàng)燕刻,使得下一步工作是可見(jiàn)的,有助于進(jìn)度度量剖笙,而不是按照百分比安排。不要用不恰當(dāng)?shù)亩攘縼?lái)欺騙自己或者團(tuán)隊(duì),要評(píng)估那些需要完成的待辦事項(xiàng)菩帝。(每天列清單果然是好習(xí)慣纠吴,再加番茄工作法,用來(lái)計(jì)時(shí))
平衡的藝術(shù):
- 時(shí)間單元不要太細(xì)或者太粗聚至,6分鐘或者一周都不合適(所以番茄工作法的半個(gè)小時(shí)酷勺,一個(gè)小時(shí)是OK的)
- 關(guān)注功能,而不是日程表
- 一周工作40個(gè)小時(shí)扳躬,實(shí)際上編碼時(shí)間不足40個(gè)小時(shí)脆诉,還有會(huì)議甚亭、電話(huà)等時(shí)間
24.傾聽(tīng)用戶(hù)的聲音
每個(gè)用戶(hù)抱怨背后都隱藏了一個(gè)事實(shí),找出真相击胜,修復(fù)真正地問(wèn)題亏狰。
平衡的藝術(shù):
- 沒(méi)有愚蠢的用戶(hù)
- 只有愚蠢自大的開(kāi)發(fā)用戶(hù)
- “它就是這樣的∨妓ぃ”這不是一個(gè)好答案
- 如果代碼問(wèn)題解決不了暇唾,也許可以考慮通過(guò)修改文檔或者培訓(xùn)來(lái)彌補(bǔ)
- 用戶(hù)可能閱讀所有文檔,但是也可能不會(huì)
第六章:敏捷編碼
代碼要清晰表達(dá)意圖辰斋,項(xiàng)目是增量式開(kāi)發(fā)策州,寫(xiě)程序也應(yīng)該增量式編程。
25.代碼要清晰地表達(dá)意圖
要編寫(xiě)清晰地而不是討巧的代碼亡呵,向代碼閱讀者明確表明你的意圖抽活,可讀性差的代碼一點(diǎn)都不聰明(讓自己或者團(tuán)隊(duì)任何人,可以讀懂自己一年前寫(xiě)的代碼锰什,而且只讀一遍就知道它的運(yùn)行機(jī)制)
平衡的藝術(shù):
- 現(xiàn)在對(duì)你顯而易見(jiàn)的事情下硕,對(duì)別人可能并非如此
- 不要明日復(fù)明日,現(xiàn)在不做汁胆,以后你也不會(huì)做
26.代碼溝通
用注釋溝通梭姓,使用細(xì)心選擇的、有意義的命名嫩码。用注釋描述代碼意圖和約束誉尖。注釋不能替代優(yōu)秀的代碼
27.動(dòng)態(tài)評(píng)估取舍
動(dòng)態(tài)評(píng)估權(quán)衡,考慮性能铸题、便利性铡恕、生產(chǎn)力、成本和上市時(shí)間丢间。如果性能夠了探熔,就應(yīng)該把注意力放在其他因素上,不要為了感覺(jué)上的性能提升或者設(shè)計(jì)的優(yōu)雅烘挫,從而將設(shè)計(jì)復(fù)雜化诀艰。
28.增量式編程
在很短的編輯/構(gòu)建/測(cè)試循環(huán)中編寫(xiě)代碼,這要比花費(fèi)長(zhǎng)時(shí)間僅僅做編寫(xiě)代碼的工作好得多饮六,可以創(chuàng)建更加清晰其垄、簡(jiǎn)單、易于維護(hù)的代碼卤橄。
平衡的藝術(shù):
- 如果構(gòu)建和測(cè)試循環(huán)花費(fèi)的時(shí)間過(guò)長(zhǎng)绿满,就不會(huì)希望經(jīng)常運(yùn)行它們。要保證測(cè)試可以快速運(yùn)行
- 在編譯和測(cè)試運(yùn)行中窟扑,停下來(lái)想一想棒口,并暫時(shí)遠(yuǎn)離代碼細(xì)節(jié)寄月,這是保證不會(huì)偏離正確方向的好辦法
- 要休息就好好休息。休息時(shí)遠(yuǎn)離鍵盤(pán)(哈哈哈)
- 要像重構(gòu)代碼一樣无牵,重構(gòu)測(cè)試漾肮,而且要經(jīng)常重構(gòu)測(cè)試
29.保持簡(jiǎn)單
開(kāi)發(fā)可以工作的、最簡(jiǎn)單的解決方案茎毁,除非有不可辯駁的原因克懊,否則不要使用模式、原則和高難度技術(shù)之類(lèi)的東西七蜘。
當(dāng)你覺(jué)得所編寫(xiě)的代碼中沒(méi)有一行多余的谭溉,并且仍能交付全部功能時(shí),這種感覺(jué)就對(duì)了橡卤。這樣的代碼容易理解和改正扮念。
30.編寫(xiě)內(nèi)聚的代碼
讓類(lèi)的功能盡量集中,讓組件盡量小碧库,要避免創(chuàng)建很大的類(lèi)或組件柜与,也不要?jiǎng)?chuàng)建無(wú)所不包的大雜燴類(lèi)。
31.告知嵌灰,不要詢(xún)問(wèn)
不要搶別的對(duì)象或者組件的工作弄匕,告訴它做什么,然后盯著你自己的職責(zé)就好了沽瞭。
32.根據(jù)契約進(jìn)行替換
通過(guò)替換遵循接口契約的類(lèi)迁匠,來(lái)添加并改進(jìn)功能特性,要多使用委托而不是繼承驹溃。
平衡的藝術(shù):
- 相對(duì)繼承來(lái)說(shuō)城丧,委托更加靈活,適應(yīng)力更強(qiáng)
- 如果不確定一個(gè)接口做出來(lái)什么樣的承諾豌鹤,或是有什么樣的需求亡哄,那就很難提供一個(gè)對(duì)其有意義的實(shí)現(xiàn)了
33.記錄問(wèn)題解決日志
對(duì)解決的問(wèn)題可以記錄以下條目:
- 問(wèn)題發(fā)生日期
- 問(wèn)題簡(jiǎn)述
- 解決方案詳細(xì)描述
- 引用文章或者網(wǎng)址
- 任何代碼片段,設(shè)置或?qū)υ?huà)框截圖
34.警告就是錯(cuò)誤
嵌入帶有警告的代碼傍药,就跟嵌入有錯(cuò)誤或者沒(méi)有通過(guò)測(cè)試的代碼一樣磺平,都是極差的做法魂仍。
35.對(duì)問(wèn)題各個(gè)擊破
在解決問(wèn)題時(shí)拐辽,要將問(wèn)題域和周邊隔離開(kāi),特別是大型應(yīng)用中
36.報(bào)告所有的異常
處理或向上傳播所有的異常擦酌,不要講他們壓制不管俱诸,就算是臨時(shí)這樣做也不行,在寫(xiě)代碼時(shí)要估計(jì)到會(huì)發(fā)生的問(wèn)題赊舶。
37.提供有用的錯(cuò)誤信息
提供更易于查找錯(cuò)誤細(xì)節(jié)的方式睁搭,發(fā)生問(wèn)題時(shí)赶诊,要展示出盡量多的支持細(xì)節(jié),不過(guò)別人用戶(hù)陷入其中园骆。
第八章:敏捷協(xié)作
38.定期安排會(huì)面時(shí)間
大家都期盼立會(huì)舔痪,希望彼此了解各自的進(jìn)度和手上的工作,而且不怕把各自遇到的問(wèn)題拿出來(lái)公共討論锌唾。
39.架構(gòu)師必須寫(xiě)代碼
積極的編程可以帶來(lái)深入的理解锄码,不要使用不愿意編程的架構(gòu)師——不知道系統(tǒng)的真是情況,是無(wú)法展開(kāi)設(shè)計(jì)的晌涕。
架構(gòu)滋捶、設(shè)計(jì)、編碼和測(cè)試余黎,這些工作給人的感覺(jué)就像是同一個(gè)活動(dòng)——開(kāi)發(fā)的不同方面重窟。它們彼此之間應(yīng)該是不可分割的。
40.實(shí)行代碼集體所有制
讓開(kāi)發(fā)人員輪換完成系統(tǒng)不同領(lǐng)域中不同模塊的不同任務(wù)惧财。
平衡的藝術(shù):
- 不要無(wú)意間喪失團(tuán)隊(duì)的專(zhuān)家技能巡扇,某些開(kāi)發(fā)人員在某個(gè)領(lǐng)域中極其精通,就讓他駐留此領(lǐng)域當(dāng)專(zhuān)家
- 大型項(xiàng)目中可缚,如果每個(gè)人都隨意改變?nèi)魏未a霎迫,一定會(huì)把項(xiàng)目弄得一團(tuán)糟
- 開(kāi)發(fā)人員不必了解項(xiàng)目每一個(gè)部分的每個(gè)細(xì)節(jié),但是不能因?yàn)橐幚砟硞€(gè)領(lǐng)域的代碼而感到驚恐
- 有些場(chǎng)合是不能采用代碼集體所有制
- 任何人可能出車(chē)禍帘靡,或者被挖知给,這樣就增加了喪失知識(shí)的風(fēng)險(xiǎn)
41.成為指導(dǎo)者
分享自己的知識(shí)很有趣,付出的同時(shí)便有收獲描姚,還可以激勵(lì)別人獲得更好的成果涩赢,而且提升了整個(gè)團(tuán)隊(duì)的實(shí)力
42.允許大家自己想辦法
指給別人正確的方向,而不是直接提供解決方案
43.準(zhǔn)備好后再共享代碼
絕不要提交尚未完成的代碼轩勘,故意嵌入編譯未通過(guò)的或者沒(méi)有通過(guò)單元測(cè)試的代碼筒扒,對(duì)項(xiàng)目來(lái)說(shuō),應(yīng)被視為玩忽職守的犯罪行為
44.做代碼復(fù)查
代碼復(fù)查隨著開(kāi)發(fā)活動(dòng)持續(xù)進(jìn)行绊寻,而且每次針對(duì)的代碼量相對(duì)較少花墩,復(fù)查活動(dòng)就像是項(xiàng)目正在進(jìn)行的一部分,而不是一種令人畏懼的事情
45.及時(shí)通報(bào)進(jìn)展與問(wèn)題
發(fā)布進(jìn)展?fàn)顩r澄步、新的想法和目前正在關(guān)注的主題冰蘑,不要等著別人來(lái)問(wèn)項(xiàng)目狀態(tài)如何
尾聲:走向敏捷
哈哈,感覺(jué)入手敏捷開(kāi)發(fā)吧村缸!