本章主軸#
本章介紹 Christopher Alexander 的設計哲學,並把它對映到軟體開發。Alexander 主張:在做任何細節決策前,必須先理解問題的整體脈絡(context)——以模式描述各實體之間的關係。
從「合成」到「分化」的設計觀#
傳統觀念:把零件組起來變成整體#
設計常被視為一種合成過程:把零件組合在一起。先有零件,再有整體。
這幾乎是大多數軟體開發者的反射動作:先列出類別,再想它們如何串起來。回想第 4 章 CAD/CAM 的初版解法——先想 slot、hole、cutout,再為每個搭配 V1、V2 版本,最後才看整體。
Alexander 的反駁#
不可能用預先成形的零件,組裝出具有「自然」品格的東西。
Alexander 所謂的「modular」是指建築業中可互換的標準預製件,而不是軟體裡的「模組」。
重點是:先做出零件再拼裝,幾乎不可能滿足整體所需的特殊性。
「Alive」的設計來自整體脈絡#
唯有當每個零件因其在整體中的位置而被調整時,才能造就一個 alive 的場所。
對軟體而言,「alive」可譯成「robust 且 flexible」。Alexander 用兩個建築對照:
- 瑞士村莊:每棟農舍各自微調,貼合地形與屋主需求,整體和諧
- 美國郊區的 cookie-cutter 住宅:完全相同、忽視環境,呈現去個性化的死板感
設計目標:讓每個類別、物件,在它真正所處的情境中長成最合適的形狀。
設計即「複雜化(complexification)」#
在這個分化過程中,整體生出它的零件;整體與零件同時誕生。整個過程像胚胎發育。
「複雜化」聽起來反直覺,其實就是:
- 從問題最簡單的描述(概念層次)出發
- 持續注入資訊(distinctions),讓設計逐步具體
- 不是把零件加起來,而是「把整體往內細分」
例:要佈置一場 40 人講座,先說「30×30 呎的房間」,再說「40 張椅子排成劇院式 4×8」,再說「前方擺講桌」——資訊一步步加入,整體愈來愈精細。
Pattern 是「分化空間的運算子」#
每個模式都是一個將空間分化的運算子——在原本沒有區別的地方創造區別。
整套語言(pattern language)是一連串運算子的依序套用,每一步以前一步的成果為基礎,使整體逐漸成形。每個成品都是「通用(與同類共享模式)+ 獨特(依其情境而異)」。
Alexander 的設計步驟#
| 步驟 | 說明 |
|---|---|
| 識別模式 | 找出問題中存在的模式;模式定義實體之間的關係 |
| 從脈絡模式開始 | 先處理那些為其他模式建立脈絡的模式 |
| 由脈絡向內推進 | 每應用一個模式,再從剩餘模式中找下一個能定義新脈絡者 |
| 細化設計 | 細化時始終記得已套用模式所建立的脈絡 |
| 實作 | 實作時納入模式所要求的細節 |
對軟體設計者的啟示#
作者誠實分享:他剛開始把 Alexander 字面照搬,假設「軟體模式也有預先決定的順序」——後來發現並非如此。
Bridge 有時為 Composite 建立脈絡,有時剛好相反。身為數學人,他需要的只是一個反例。
如今他不再死守 Alexander 字面,而是取其原則:
- 從整體入手、用情境決定細節
- 一次套一個模式,並把它建立的脈絡帶入下一步思考
- 如果沒有現成模式可套,就以共通/差異分析(CVA)作為通用工具
本章要記住的事#
- 設計不是把零件組起來,而是從整體往內細分
- 「alive」的設計來自零件對整體脈絡的回應
- 模式是分化整體的「運算子」,建立後續模式可以倚賴的脈絡
- Alexander 的方法並非總能直接套到軟體,但其精神是普遍的
- 在沒有現成模式可用時,靠共通/差異分析延續同樣的思路(下一章會示範)