課程概覽
斯坦福大學開放課程 CS107: Programming Paradigms 由 Jerry Cain 教授主講,系統介紹主流程式語言背後的計算模型與設計哲學。本筆記整理第一講核心內容。
五大編程範式與代表語言
| 範式 | 代表語言 | 核心特徵 |
| 命令式 / 程序式 | C, Assembly | 函數呼叫鏈、指標操作、手動記憶體管理 |
| 物件導向 | C++ | 封裝、繼承、多型、`this` 指標/引用語意 |
| 並行程式設計 | C/C++ (pthreads, OpenMP) | 執行緒、鎖、事務、交替執行模擬並行 |
| 函數式 | Scheme (LISP 方言) | 無副作用、遞迴、高階函數、惰性求值 |
| 腳本/動態語言 | Python | 解譯執行、動態型別、豐富標準庫、快速原型開發 |
核心觀點筆記
1. C:程序式思維的極致
- 「一切皆函數呼叫」:`main → A → B → C` 形成呼叫堆疊。
- 指標是核心抽象:`&p->i = 7` 等複雜表達式直映射記憶體操作。
- 掌握底層編譯流程(C → Assembly → Object → Executable)是成為資深工程師的關鍵。
2. C++:在 C 基礎上建構物件模型
- 語法糖:`obj->method()` 本質仍是 `method(&obj, ...)`。
- 「C++ 去掉 OO 就是 C」—— 許多資深工程師偏好 C 的簡潔與可控性。
3. 並行 ≠ 真正同時執行
- 單核 CPU 透過時間片輪轉模擬並行,高頻切換產生「同時」假象。
- 核心挑戰:共享資源同步。經典例子:ATM 同時提款,餘額 100 元,必須序列化扣款操作(事務)。
- 應用領域:網路伺服器、高效能運算、GUI 回應性。
4. Scheme:函數式思維的啟蒙
- 「程式即資料,資料即程式」—— S-expression 同構性。
- 無副作用:函數僅依賴輸入產出輸出,天然適合並行與推理。
- 老師原話:「比其他語言都有意思」,強烈建議嘗試。
5. Python:工程實用主義的集大成者
- Google、Facebook 大量採用於後端服務、資料處理、機器學習。
- 「電池內含」:標準庫覆蓋網路、檔案、資料庫、文字處理等。
- 課程大作業:從零打造 HTTP 伺服器,解析 XML/HTML、模板引擎、動態頁面生成。
- 支援多範式:OO、函數式(`map`/`filter`/`lambda`)、程序式自由切換。
課程安排與心法
- 前半段:深入 C/C++ 編譯鏈、指標算術、記憶體佈局、呼叫慣例——「讓你知道崩潰時為什麼崩潰」。
- 後半段:Scheme 函數式核心、Python 實戰專案、其他範式巡禮。
- 老師豪語:「你們未來 15 年會遇到的範式,我都見過。」
給讀者的建議
- 親手追蹤一個 C 程式從原始碼到二進位的完整編譯過程(`gcc -S`、`objdump`)。
- 用 Scheme 寫一個遞迴解譯器,體會「代碼即資料」。
- 用 Python 實作一個簡易 Web 框架,理解 WSGI、路由、中間件機制。
- 不盲目追捧設計模式,**先理解底層機制**,模式自然浮現。
結語
CS107 不只是教語法,更是重塑「如何思考計算」。從指標算術到 Lambda 演算,從手動 `malloc` 到垃圾回收,跨越範式的旅程,正是從碼農到工程師的蛻變之路。