2018-03-01 《簡約之美 軟件設計之道》

作者:[美] Max Kanat-Alexander
翻譯:余晟
https://book.douban.com/subject/20445258/


第一章 引言

1.1 計算機出了什么問題?

計算機為什么這么容易出問題?原因是:編程寫得太糟糕。
程序太復雜了,需要 化繁為簡

1.2 程序究竟是什么?

要想改進結果,提高代碼質量最為關鍵。
所以我們最需要掌握的是,提高代碼質量的科學方法。

第二章 缺失的科學

軟件設計的科學就是為軟件做計劃、制定決策的科學,它幫助大家做出這類決定:

  • 程序的代碼應當采用什么結構?
  • 程序的速度重要,還是代碼容易閱讀重要?
  • 為滿足需求,應該選擇哪種編程語言?

軟件系統中任何與架構相關的技術決策,以及在開發系統中所做的技術決策,
都可以歸到“軟件設計”的范疇里。

2.1 程序員也是設計師

  • 每個寫代碼的人都是設計師

身為設計師,必須時時愿意聆聽建議和反饋,之后,任何決策都必須由單獨的個人而不是一群人來做出。
而如果你是資深開發人員或首席程序員,你在推翻下屬設計時,應當說明新決策為什么比原來的好。不過即便如此,軟件設計的責任也應當落實在真正寫代碼的人身上。

2.2 軟件設計的科學

書中列出了關于軟件開發的若干定義(Definition)、事實(Fact)、條例(Rule)、規則(Law)。
其中規則最為重要。它是永遠為真的事實,涵蓋了很多領域的只是。它們幫助我們發現其他重要的真理以及幫助我們預測未來要發生的事情。
這些定義、事實、條例、規則的時候,很多都是顯而易見的,但是我們需要問問自己:

  • 我是否知道,某些特定的說法是否經過了證實?
  • 我是否清楚它的重要性?
  • 我是否可以向其他人清楚講解,讓對方徹底明白?
  • 我是否明白,在軟件開發領域中,它與其他部分知識的關系如何?

2.3 為什么不存在軟件設計科學

歷史原因造成缺失“軟件管理科學”和“軟件設計科學”。
而軟件復雜性的主要根源就在于缺乏科學。

第三章 軟件設計的推動力

明確一個原則

軟件的目的是為了幫助人,為了解決問題的。
明確目標后,要針對每一條功能問自己:這個功能是怎樣幫助人去做某件事的呢?
好處是:

  • 剔除沒用的功能
  • 幫助澄清該功能的描述或實現方式中的模糊之處
  • 確認功能的價值
  • 安排優先級
  • 刪減價值不大的功能

軟件設計科學的目標

  • 確保軟件能提供盡可能多的幫助
  • 確保軟件能持續提供盡可能多的幫助
  • 設計程序員盡可能容易得開發和維護軟件系統

第四章 未來

設計軟件時,應該做怎樣的決定?

4.1 軟件設計的方程式

D = (Vn + Vf) / (Ei + Em)
D表示這個變化的合意程度(可取程度,也就是說此項工作值不值得做下去)。
Vn表示當前價值
Vf表示未來價值
Ei表示實現成本
Em表示維護成本
規則:

  1. 理想的解決方案:維護成本降到零
  2. 理想的實際情況:未來收益高于維護成本
  3. 通常來說:相比降低實現成本,降低維護成功更加重要

4.2 設計的質量

設計的質量好壞,正比于該系統在未來能持續幫人他人時間的長度。
使用的時間越長,越需要慎重的設計。

4.3 不可預測的結果

未來的某些事情,是我們不知道的。
程序員犯的最常見、最嚴重的錯誤,就是在其實不知道未來的時候去預測未來。

第五章 變化

程序存在的時間越久,它的某個部分需要變化的可能性就越高。
三個誤區:編寫不必要的代碼;代碼難以修改;過分追求通用。
刪除不必要的代碼,未來的需求未來再寫。
根據當前的需求,而不是未來的需求。
漸進式開發及設計

第六章 缺陷與設計

在程序中新增缺陷的可能性與代碼修改量成正比。 - 改的越多,越可能出Bug
最好的設計,就是能適應外界盡可能多的變化,而軟件自身變化盡可能的少。
永遠不要“修正”任何東西,除非真的是bug,而且有證據表面問題確實存在。 - 不要手賤
避免重復

第七章 簡潔

軟件的維護難度,反比于其簡潔程度。
要簡單到傻子都能懂。
保持一致、命名、注釋都需要注意。

第八章 復雜性

新增功能、擴展軟件用途、新增程序員、做無謂的改變、困于糟糕的技術、理解錯誤、糟糕的設計、沒有設計、重新發明輪子都會增加軟件的復雜性。

8.5 應對復雜性

  • 把某個部分變簡單
  • 不可解決的復雜性:包裝一層以屏蔽復雜性,讓其他程序員更容易使用和理解。

8.6 推倒重來

前提是:

  • 完成了準確評估,新系統比現有系統效率更高
  • 有足夠時間
  • 設計更好(要么是你自己變牛逼了,要么是更牛逼的人來設計)
  • 設計好階段性成果,能夠獲得積極反饋
  • 有足夠資源,不光是時間,還要考慮維護兩套系統

第九章 測試

你對軟件行為的了解程度,等于你真正測試它的程度

讀后感

  1. 化繁為簡、提高代碼質量
  2. 不僅要明確軟件設計中的規則,能夠應用到實際軟件開發中,還要能夠給其他人清楚講解,要能夠扛得住別人的challenge,要能夠說服別人!
  3. 在軟件設計時就要考慮維護成本,降低維護成本比降低實現成本更重要。
  4. 維護成本正比于系統的復雜程度。
  5. 避免編寫不必要的代碼,要保證代碼容易修改,避免過分通用。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,462評論 2 378

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,719評論 25 708
  • 2018年就這樣無聲無息的來了,想想2008年北京奧運會的那一幕還在昨天一樣,眨眼間已經整整過去十年了,十年前我們...
    暢睿凡閱讀 916評論 0 0
  • 11.4 減肥日記第3天 晨重:49kg 早餐:2個雞蛋 中餐:1 兩青菜,1 兩牛肉,1兩雞肉 晚餐:2個番茄...
    草木_9601閱讀 258評論 0 0
  • 有一陣子,女兒思迪有一個好朋友叫娜娜,同班。娜娜已經請思迪去她家玩過了,我找了一天,回請娜娜來家玩。 那天,盧中瀚...
    盧璐說閱讀 3,495評論 25 197
  • 1. PChartPChart是一個令人印象深刻的PHP庫,可以以一種可視化圖表的形式生成文本數據。數據可以展示為...
    Gundy_閱讀 1,295評論 0 2