1 事物的本質(zhì)復(fù)雜性和附屬?gòu)?fù)雜性:本質(zhì)復(fù)雜性是只要被解決之問(wèn)題的核心,由軟件中的難點(diǎn)問(wèn)題組成。大多數(shù)軟件的問(wèn)題都包含一些復(fù)雜性。附屬?gòu)?fù)雜性是指跟解決方案沒(méi)有必要直接關(guān)聯(lián)的那些東西。但無(wú)論如何我們?nèi)匀灰鉀Q他們。
2 每人希望在附屬?gòu)?fù)雜性上花費(fèi)比本質(zhì)復(fù)雜性更多的時(shí)間,但隨著它的街壘,很多組織最終在附屬?gòu)?fù)雜性上要花費(fèi)比本質(zhì)復(fù)雜性更多的時(shí)間。
3 識(shí)別問(wèn)題是擺脫附屬?gòu)?fù)雜性的第一步。思考一下你所使用的過(guò)程、策略以及正在處理的技術(shù)難題。認(rèn)識(shí)清楚怎樣的改進(jìn)可能從根本上讓你拋棄一些對(duì)整個(gè)問(wèn)題貢獻(xiàn)不多卻增加麻煩的東西。
4 80-10-10準(zhǔn)則:
80%的客戶(hù)需求可以很快完成;下一個(gè)10%需要花費(fèi)很大的努力才能完成,最后的10%卻幾乎不可能完成。
YAGNI
1 YAGNI是“You ain`t Gonna Need it ”你不會(huì)需要它的縮寫(xiě),也是敏捷開(kāi)發(fā)對(duì)預(yù)想開(kāi)發(fā)的戰(zhàn)斗宣言。預(yù)想開(kāi)發(fā)(speculative Development)的例子可謂俯拾即是。程序員們對(duì)自己說(shuō):“我肯定以后會(huì)需要這項(xiàng)額外的功能,所以現(xiàn)在就提前把它實(shí)現(xiàn)了吧。”這是滑向深淵的第一步。更好的方式是:只開(kāi)發(fā)當(dāng)下需要的東西。
2 預(yù)想開(kāi)發(fā)是一個(gè)不易改變的習(xí)慣:當(dāng)你正在行頭上時(shí),真的很難用客觀的眼光來(lái)看待自己剛相處的絕妙想法---它究竟是會(huì)讓代碼變得更好,還是僅僅增加復(fù)雜度?說(shuō)起來(lái),這正是結(jié)對(duì)編程的好處之一:旁邊有人能對(duì)你的妙主意提點(diǎn)客觀的意見(jiàn),這價(jià)值是無(wú)限的,因?yàn)槌绦騿T們總是很難客觀地看待自己的想法,特別是在這個(gè)想法剛冒出來(lái)的時(shí)候。
3 軟件開(kāi)發(fā),首先是一場(chǎng)溝通博弈!
4 只做當(dāng)下需要的,一開(kāi)始這會(huì)很難,但最終你會(huì)得到一個(gè)更好的代碼庫(kù)。