概述#
這本書的目標是幫助你透過程式碼傳達意圖。全書架構如下:
| 章節 | 內容 |
|---|---|
| 第 2-4 章 | 程式設計與模式(Pattern)的概觀 |
| 第 5-8 章 | 一系列短文,探討如何運用 Java 的特性撰寫可讀的程式碼 |
| 最後一章 | 針對框架(Framework)開發的調整建議 |
全書始終聚焦於提升溝通效果的程式設計技巧。
透過程式碼溝通的三個步驟#
作者描述了學會透過程式碼溝通的三個關鍵步驟:
- 有意識地編程:停止假裝自己是憑直覺寫程式,放慢速度去察覺自己在想什麼。作者在寫了多年程式後才驚訝地發現,雖然程式決策對他來說很順暢,但他無法解釋為何一個方法該叫某個名字、或某段邏輯該放在某個物件裡。
- 重視他人:程式設計幾乎從來不是一個人與一台機器的獨自交流。在撰寫有溝通力的程式碼之前,必須相信其他人和自己同等重要。關心他人是一個有意識的決定,也需要練習。
- 在實踐中體現:運用實作模式(Implementation Pattern)來有意識地為他人(也為自己)編程。
閱讀建議#
本書可以從不同角度來閱讀:
- 純技術角度:直接翻閱模式章節,獲取有用的技巧與解釋
- 即時學習法(Just-in-Time):直接跳到第 5 章快速瀏覽到結尾,然後在編程時將本書放在手邊。使用過許多模式後,再回頭閱讀前幾章的哲學背景
- 完整閱讀:從頭到尾直接讀完,但各章節篇幅較長,需要專注力
模式的本質#
程式設計中的大多數決策都與之前的決策相似:
- 你的職業生涯中可能會命名一百萬個變數,但不會每次都用全新的方式
- 命名的通用約束始終相同:傳達用途、型別、生命週期,且名稱要易讀、易寫、易排版
- 這就是模式(Pattern)的範例:決策和約束反覆出現,即使每次產生的結果不同
本書包含 77 個明確命名的模式,每個都涵蓋撰寫可讀程式碼的某個面向。此外還有許多較小的模式或變體散見於各處。
模式的呈現方式不拘一格——有時是論述文章、有時是圖表、有時是教學故事、有時是範例——依照最適合該模式的方式來描述。
本書的定位#
本書介於 Design Patterns 和 Java 語言手冊之間:
| 書籍 | 定位 |
|---|---|
| Design Patterns | 談的是每天可能做幾次的決策,通常是規範物件之間互動的決策 |
| Implementation Patterns | 每隔幾秒鐘就會用到的模式 |
| 語言手冊 | 擅長描述 Java「能做什麼」,但不太談「為什麼」要使用某種語法結構,或讀者可能從中得出什麼結論 |
本書不涵蓋的範圍#
| 主題 | 說明 |
|---|---|
| 並行處理(Concurrency) | 作者的策略是盡量隔離應用程式的並行部分,推薦參考《Java Concurrency in Practice》 |
| 軟體流程(Software Process) | 本書的建議適用於任何流程,無論是長週期開發還是在失敗測試後立即編寫的程式碼 |
| Java 的邊緣特性 | 作者傾向保守的技術選擇,書中呈現的是 Java 的常用子集 |
導覽指南(Tour Guide)#
本書分為七大部分:
| 部分 | 英文 | 說明 |
|---|---|---|
| 導論 | Introduction | 描述透過程式碼溝通的重要性與價值,以及模式背後的哲學 |
| 類別 | Class | 描述如何及為何建立類別,以及類別如何編碼邏輯 |
| 狀態 | State | 儲存與擷取狀態的模式 |
| 行為 | Behavior | 表達邏輯(特別是替代路徑)的模式 |
| 方法 | Method | 撰寫方法的模式,提醒你讀者會從方法分解與命名中得出什麼結論 |
| 集合 | Collections | 選擇與使用集合的模式 |
| 演進中的框架 | Evolving Frameworks | 在建構框架而非應用程式時,對前述模式的變體 |

Figure 1.1: Book overview
接下來#
如果你想直接瀏覽模式本身,可以從第 5 章開始。祝你實作愉快!