總結
設計原則小結
以下是本書討論的最重要的軟體設計原則:
- 複雜性逐步累積,因此必須認真對待每個小問題(請參閱 第 2.4 節)。
- 能工作的程式碼是不夠的(請參閱 第 3.2 節)。
- 持續進行小額投資以改善系統設計(請參閱 第 3.3 節)。
- 模組應該是深的(請參閱 第 4.4 節)。
- 介面的設計應儘可能簡化其最常見的用法(請參閱 第 4.7 節)。
- 讓模組的介面簡單比讓其實作簡單更為重要(請參閱 第 8 章 和 第 9.7 節)。
- 通用模組是更深的(請參閱 第 6 章)。
- 分開通用程式碼和專用程式碼(請參閱 第 6.6 節 和 第 9.4 節)。
- 不同的層級應具有不同的抽象(請參閱 第 7 章)。
- 下沉複雜性(請參閱 第 8 章)。
- 透過定義來規避錯誤(請參閱 第 10.3 節)。
- 設計兩次(請參閱 第 11 章)。
- 註解應該描述從程式碼中不易看出的資訊(請參閱 第 13 章)。
- 軟體設計應以易於閱讀為目標,而非易於編寫(請參閱 第 18.2 節)。
- 軟體開發的增量應該是抽象而不是功能(請參閱 第 19.2 節)。
- 區分重要的和不重要的事情,並強調重要的事情(請參閱 第 21 章)。
危險訊號小結
以下是本書討論的一些最重要的危險訊號。系統中出現其中任何一種,都提示設計可能存在問題:
- 淺模組:類或方法的介面並不比其實作簡單得多(請參閱 第 4.5 節 和 第 13.5 節)。
- 資訊洩露:設計決策反映在多個模組中(請參閱 第 5.2 節)。
- 時間分解:程式碼結構基於執行操作的順序,而不是基於資訊隱藏的原則(請參閱 第 5.3 節)。
- 過度暴露:API 迫使呼叫者為了使用常用功能,先了解很少使用的功能(請參閱 第 5.7 節)。
- 透傳方法:除了將參數傳給另一個簽名相似的方法,幾乎不做其他事情的方法(請參閱 第 7.1 節)。
- 重複:一段並不簡單的程式碼反覆出現在多個地方(請參閱 第 9.4 節)。
- 通用專用混合體:專用程式碼與通用程式碼沒有清晰地分開(請參閱 第 9.5 節)。
- 連體方法:兩個方法之間存在太多依賴,以至於不理解其中一個的實作,就很難理解另一個的實作(請參閱 第 9.7 節)。
- 註解重複了程式碼:註解中的所有資訊在旁邊的程式碼裡顯而易見(請參閱 第 13.2 節)。
- 實作文件汙染了介面:介面註解描述了其使用者不需要了解的實作細節(請參閱 第 13.5 節)。
- 模糊的名稱:變數或方法的名稱不夠精確,無法傳達多少有用資訊(請參閱 第 14.3 節)。
- 難以選取名稱:很難為一個實體找到精確、直觀的名稱(請參閱 第 14.3 節)。
- 難以描述:必須寫很長的文件,才能把變數或方法描述完整(請參閱 第 15.3 節)。
- 難以理解的程式碼:一段程式碼的行為或含義不容易被理解(請參閱 第 18.2 節)。
關於作者
John Ousterhout 是斯坦福大學的 Bosack Lerner 電腦科學教授。他目前的研究重點是在軟體棧中構建新的層次,讓資料中心應用程式能夠利用微秒級延遲的通訊和儲存技術。Ousterhout 此前在工業界工作了 14 年,其間創辦了 Scriptics 和 Electric Cloud 兩家公司;再往前,他曾在加州大學伯克利分校擔任電腦科學教授,同樣為期 14 年。他是 Tcl 腳本語言的建立者,也以在分散式作業系統和儲存系統領域的工作而聞名。Ousterhout 在耶魯大學獲得物理學學士學位,在卡內基梅隆大學獲得電腦科學博士學位。他是美國國家工程院院士,曾獲多項榮譽,包括美國計算機協會(ACM)軟體系統獎、ACM Grace Murray Hopper 獎、美國國家科學基金會(NSF)總統青年研究獎,以及加州大學伯克利分校(UC Berkeley)傑出教學獎。