重點摘要#
- 真實世界的程式設計不是解決別人給你的問題,而是定義問題邊界
- 最好的架構師不是解決困難問題,而是將問題拆分成穩定且自包含的區塊
- 穩定的問題能產出穩定的設計,穩定的設計讓你能專注於提升實作品質
- 問題區塊應具備內部內聚性(概念統一)和外部分離性(與其他區塊少重疊)
詳細內容#
在學校裡,你必須解決老師給你的二元排序問題。但在真實世界中,最好的架構師不是解決困難問題——而是繞過困難問題工作。關鍵技能在於圍繞模糊且多樣的軟體問題劃定邊界,使它們變得穩定且自包含。
問題區塊的特性#
架構師應該能夠檢視一大堆概念、資料和流程,將它們拆分成更小的區塊。這些問題區塊應該是:
- 內部內聚:區塊在概念上是統一的,所有任務、資料和功能都是相關的
- 外部分離:區塊之間在概念上是正規化的,彼此之間少有或沒有重疊
穩定問題的力量#
如果問題是穩定的,那麼當它被解決時,就是永久解決的。五年、五十年後,你可能會在上面加一個新介面,但核心系統不需要改變。
系統之所以耐久,是因為問題是耐久的。 例如關聯式資料庫管理系統有非常清晰的系統邊界——它管理任何可以序列化為位元組流的資料,並能組織、搜尋和檢索這些資料。問題簡單且穩定,所以解決方案持久。
穩定帶來品質#
當問題穩定時,程式碼可以很整潔——因為沒有特殊情況。整潔的程式碼容易測試、容易審查,這意味著實作品質可以非常高。你可以專注於效能優化、可靠訊息傳遞、分散式交易等進階功能,因為問題本身不會改變。
— By Sam Gardiner