第五章 軟件構(gòu)建中的設(shè)計(jì)
-
設(shè)計(jì)是一個(gè)險(xiǎn)惡(wicked)的問(wèn)題(不可控部分)
險(xiǎn)惡的問(wèn)題就是那些只有通過(guò)解決或部分解決才能被明確的問(wèn)題蓬推。
你必須首先把這個(gè)問(wèn)題「解決」一遍才能明確的定義這個(gè)問(wèn)題奕谭。
書(shū)中有一個(gè)大橋被風(fēng)吹垮的例子一個(gè)很著名的工程師造好了一座大橋,這座橋經(jīng)常被一股風(fēng)吹刮,原本這個(gè)問(wèn)題沒(méi)什么大不了的,問(wèn)題在于這座橋的風(fēng)角度很怪,長(zhǎng)年累月最終這座橋崩塌了,踩了這個(gè)坑,這個(gè)著名工程師才意識(shí)到,這座大橋的技術(shù)難點(diǎn)原來(lái)在于風(fēng)的角度問(wèn)題上
也就是說(shuō)做一個(gè)項(xiàng)目的時(shí)候,很多坑都是不可預(yù)知的,不是說(shuō)準(zhǔn)備得多充分就可以避免的
//一個(gè)項(xiàng)目預(yù)計(jì)一周完成,你就算知道這是一個(gè)樂(lè)觀的估計(jì),在此基礎(chǔ)上乘于二,14天,可實(shí)際上工期還是遠(yuǎn)超于這個(gè)數(shù) -
軟件的首要技術(shù)使命:管理復(fù)雜度(我們能做什么)
//用vue做一個(gè)項(xiàng)目,結(jié)果失敗了,是vue有問(wèn)題嗎?肯定不是,項(xiàng)目的成敗與技術(shù)無(wú)關(guān)
如果一個(gè)項(xiàng)目真的因?yàn)榧夹g(shù)而失敗垒探,通常的原因就是技術(shù)太復(fù)雜導(dǎo)致失控纳猪。
將大系統(tǒng)分解成小系統(tǒng),保持函數(shù)短小等喻奥。 -
高代價(jià)汉买、低效率的設(shè)計(jì)源于:
- 用復(fù)雜的方法解決簡(jiǎn)單的問(wèn)題
- 用簡(jiǎn)單但錯(cuò)誤的方法解決復(fù)雜的問(wèn)題
- 用不恰當(dāng)?shù)膹?fù)雜方法解決復(fù)雜的問(wèn)題
//如果做一個(gè)項(xiàng)目之前首先要做的就是降低復(fù)雜度
第25章 代碼調(diào)整策略
- 一些無(wú)稽之談
代碼行數(shù)越少滋将,性能越高——錯(cuò)誤
//性能問(wèn)題具體問(wèn)題要具體分析
特定運(yùn)算可能比其他的快邻悬,性能更好——錯(cuò)誤!
//沒(méi)有什么「可能」随闽,你應(yīng)該測(cè)量
開(kāi)發(fā)者應(yīng)該不斷的優(yōu)化代碼——錯(cuò)誤父丰!
//優(yōu)化著重點(diǎn)在于整個(gè)程序,而不是拘泥于某個(gè)函數(shù)的修改
程序的運(yùn)行速度同其正確性一樣重要——錯(cuò)誤! - 編譯器的優(yōu)化可能比你寫得代碼更好
這一章主要說(shuō)的是:測(cè)試過(guò)程序之后,再去優(yōu)化你的代碼
第26章 代碼調(diào)整技巧
邏輯
在知道答案后停止判斷
按照出現(xiàn)頻率來(lái)調(diào)整判斷順序
要做性能測(cè)試掘宪,不要盲目相信結(jié)論
用表代替復(fù)雜分支
惰性求值
循環(huán)
將不需要重復(fù)計(jì)算的邏輯外提
使用哨兵值加速循環(huán)
把最忙(循環(huán)次數(shù)多)的循環(huán)放在最內(nèi)層
其他
削弱運(yùn)算強(qiáng)度:用移位運(yùn)算代替乘2或除2
將一些值初始化:如一天是 86400 秒
對(duì)每一次改進(jìn)進(jìn)行量化
第27章 程序規(guī)模對(duì)構(gòu)建的影響
程序員的交流路徑與程序員數(shù)量的關(guān)系
采用文檔交流
第28張 管理構(gòu)建
鼓勵(lì)良好的編碼實(shí)踐
設(shè)定標(biāo)準(zhǔn)(編碼規(guī)范蛾扇、文檔規(guī)范、checklist 等)
每個(gè)項(xiàng)目?jī)蓚€(gè)人(結(jié)對(duì)魏滚、師徒屁桑、支援)
Code Review
提供最佳實(shí)踐給人參考
強(qiáng)調(diào)代碼是共有財(cái)產(chǎn)
需求變更和設(shè)計(jì)變更
不要馬上變更,累積一些再變更
成立變更委員會(huì)栏赴,系統(tǒng)化地控制變更
警惕官僚主義
備份所有東西:源碼、工具靖秩、需求须眷、變更、設(shè)計(jì)沟突、文檔……
如果進(jìn)度落后了怎么辦:
期待后期趕上——不可能
增加人手——火上澆油
砍需求——最靠譜
把程序員當(dāng)人看
程序員不是機(jī)器
要有舒適的環(huán)境花颗、要休息
個(gè)體差異
團(tuán)隊(duì)差異
信仰問(wèn)題
管理/教育你的管理者
第32章 自說(shuō)明代碼
注釋的種類
復(fù)述代碼——無(wú)聊
解釋代碼——改進(jìn)代碼
標(biāo)記——可能用的到
概述代碼——有用
代碼意圖說(shuō)明——指出要解決的問(wèn)題
傳達(dá)代碼無(wú)法表述的信息——非常重要