課程簡介
斯坦福 CS107《編程範式》由 Jerry Cain 教授講授,涵蓋 C、C++、並行編程、Scheme、Python 等多種語言與範式,深入講解編譯、內存模型、指標運算、協程/執行緒、函數式編程、動態語言特性等核心主題。本筆記記錄 Lesson 1 重點。
主要編程範式與代表語言
| 範式 | 代表語言 | 核心特徵 |
| 命令式/過程式 | C, Assembly | 函數調用函數,強調執行步驟序列 |
| 物件導向 | C++ | 封裝、繼承、多態,透過 ./-> 訪問成員 |
| 並行編程 | C/C++ (pthreads, OpenMP) | 邏輯並行,實際分時交替,核心同步機制 |
| 函數式 | Scheme (LISP 方言) | 無副作用、函數為一等公民、遞迴為主 |
| 動態/腳本 | Python | 解釋執行、動態類型、豐富庫、適合快速開發 |
C 與 C++ 的本質區別
- C:面向過程。核心單元是函數,
main 調用 A,A 調用 B……形成調用鏈。指標是核心抽象,手動管理內存。
- C++:面向物件。核心單元是物件(類實例),透過
obj.method() 或 ptr->method() 發送訊息。C++ 去除 OO 特性後本質是 C,底層編譯產物(二進制)高度相似。
編譯流程深度剖析(課程重點)
- 原始碼 → 預處理:展開宏、包含頭文件、條件編譯。
- → 編譯器:語法分析、語義分析、生成中間表示(IR)、優化、輸出組合語言(.s)。
- → 組譯器:組合語言 → 機器碼(.o 目標檔),含符號表、重定位表。
- → 連結器:合併多個 .o、解析符號引用、鏈接庫、生成可執行檔(ELF/PE)。
課程將詳細講解 C/C++ 如何編譯為組合語言、指標運算的底層實現、obj 檔結構、連結過程。理解這些能讓你在程式崩潰時從機器碼層面診斷根因,而非盲目猜測。
並行編程本質
- 單核 CPU 透過時間片輪轉實現「邏輯並行」,極高切換頻率讓用戶感知為同時執行。
- 核心挑戰:共享資源同步(鎖、信號量、條件變數)、臨界區保護、死鎖避免。
- 典型場景:網路伺服器並發連線處理、GUI 事件迴圈與後台任務分離、資料庫事務隔離(ATM 轉帳例)。
Scheme:函數式編程入門
- 源自 LISP,純函數式:無可變狀態、函數無副作用、遞迴替代迴圈。
- 優勢:並行天然安全、推理簡單、高階函數靈活組合。
- 課程評價:「比其他語言都要有意思」,適合拓寬程式思維。
Python:現代動態語言代表
- 年輕(~16 年歷史),Google/Facebook 大量採用。
- 特性:解釋執行、REPL 互動、動態類型、垃圾回收、豐富標準庫/三方包(
requests, Django, NumPy)。
- 適用:網路爬蟲、Web 後端、資料科學、自動化腳本、教學。
- 課程大作業:從零寫一個 HTTP 伺服器,支援解析 XML/HTML、動態生成頁面、後端資料庫交互。
課程節奏與預期收穫
- 第一講 ~17 分鐘,概覽全景。
- 後續將發放大量講義,布置 C/C++ 指標底層原理研究報告。
- 目標:成為「高級 C/C++ 工程師」,具備跨範式解決問題的能力。
- 教師自信:「你們未來 15 年遇到的編程範式,我都見過。」
結語
Lesson 1 為全課程奠定了「多語言、多範式、深底層」的基調。C/C++ 編譯模型與指標運算是核心難點亦是核心價值;Scheme 拓寬函數式視野;Python 展示現代生產力工具。建議配合講義與作業,動手實作編譯器前端片段、簡易執行緒庫、Scheme 解釋器、迷你 Web 框架,方能真正內化知識。