重點摘要#
- 軟體開發者最初透過指令、函數和演算法來理解軟體,但這種以指令為中心的觀點在建構大型系統時反而成為阻礙
- 電腦本質上只是幫助你存取和操作資料堆的工具,理解資料結構才是管理複雜系統的關鍵
- 資料導向的視角可以將最複雜的系統簡化為可理解的資訊結構集合
- 大多數系統的核心問題不在於功能本身,而在於如何在正確的時間將正確的資料送入系統
詳細內容#
從指令到資料的觀點轉換#
作為軟體開發者,我們最初學會用指令的角度來理解軟體。但當系統規模成長時,這種觀點開始束縛我們。退一步看,數百萬行指令在本質上是複雜的,但底層其實可以歸結為一組較小的基本資料結構。
以 UNIX 作業系統為例:逐行閱讀原始碼不太可能幫助你理解它,但如果你閱讀一本描述 processes 和 filesystem 等核心資料結構的書,你會更容易理解 UNIX 的運作方式。
資料導向的系統觀#
當程式執行時,底層資料的狀態不斷在變化。從抽象的角度來看,任何演算法都只是將資料從一個版本轉換到另一個版本的過程。所有功能都是一組定義明確的轉換,將資料推進到不同的版本。
這種以資料為中心的視角 – 完全透過底層資訊結構來看待系統 – 可以將最複雜的系統簡化為一組可以觸摸的細節集合。
資料是問題的核心#
- 業務領域問題透過資料滲入程式碼
- 大多數關鍵演算法是被充分理解的,真正頻繁變化的是資料的結構和關係
- 運維問題如果影響到資料就會變得困難得多 – 改程式碼只需發佈新版本,但修改資料結構可能需要巨大的遷移成本
- 軟體架構的許多基本問題都圍繞著資料:系統是否在正確時間收集了正確的資料?誰應該能看到或修改它?
設計的本質#
從設計角度來看,大多數系統的關鍵議題是在正確的時間將正確的資料送入系統。之後,對資料套用不同的轉換、執行功能、儲存結果,都是相對直接的事。
功能性是我們最先看到的東西,但資料才是每個系統的核心。大多數系統底層不需要特別複雜,它們只需要不斷累積越來越多的資料。
— By Paul W. Homer