《計算機程式的構造與解釋》讀後感:C 程式設計師的視角
SICP 被譽為「巫師書」,但對資深 C 開發者,其價值在於確認既有認知與建立跨語言抽象框架,而非學習新語法。
第一章:建構過程抽象 — 快速略過即可
- 核心三問:語言原型系統、如何組合、如何提供高層抽象
- 遞歸 vs 迭代:C 中尾呼叫優化不保證,迭代更安全
- 高階函數:C 用函數指標模擬,語法囉嗦但可行
- 閉包:C 需手工構造
struct { void* ctx; void* func; }
- 結論:1-2 小時掃過,對實戰開發幫助有限
第二章:建構資料抽象 — 理論派風格濃厚
- 配對、列表、樹表示資料:Lisp 原生,C 需手工定義結構體
- 符號系統:C 無原生支援,需實作符號表/字串驻留
- 分層抽象:書中強調但未給出判斷標準 — 實戰中「如何判斷抽象是否合理」才是核心
- 觀點:Perl 的陣列/雜湊/列表三大內建更貼近實用
第三章:模組化、物件與狀態 — 流與序列化
- 序列化/流技術:C 專案大量使用 (協定、持久化)
- 管道/訊息佇列:Unix 哲學核心,比「流」更實用
- 並發模型:Actor 模型 vs 共享記憶體,C 多用 pthread + mutex
第四章:元語言抽象 — 解析器與編譯器
- 自上而下遞歸下降解析器:將遞歸發揮到極致
- 遺憾:未見詞法分析 (有限狀態機/正則)、無效能分析
- 想做編譯器,龍書 (Compilers: Principles, Techniques, and Tools) 才是正途
第五章:計算模型 — 寄存器機器模擬器
- 理解計算機本質有幫助,但工程價值有限
- C 轉 Lisp 者需深入 3-6 個月攻克 4-5 章
總結:C 開發者的 SICP 讀書策略
| 章節 | 建議投入 | 核心收穫 |
| Ch 1 | 1-2 hrs 掃過 | 三大抽象問題、遞歸/迭代、函數指標對應 |
| Ch 2 | 略過 | 資料抽象在 C 中即結構體設計 |
| Ch 3 | 重點看流/序列化 | 管道/訊息佇列 = 序列化+流 |
| Ch 4 | 選讀解析器部分 | 遞歸下降實作、對比龍書不足 |
| Ch 5 | 選讀 | 計算模型本質理解 |
給 C 開發者的建議
- 不要為了讀 SICP 而學 Lisp/Scheme,除非要轉型
- 將書中概念映射到 C 實作:閉包→結構體+函數指標、流→檔案/管道、符號→字串驻留表
- 關注「抽象判斷標準」:單一職責、介面穩定、可測試、可擴展
- 編譯器興趣者:直接啃龍書 + LLVM 教學
- 實戰經驗 > 理論推導:書本習題全對,真實專案設計仍可能是渣渣