Literate programming 不是單純的寫程式,而是寫一部可讀的作品

更新 發佈閱讀 5 分鐘

當我們在寫程式設計文件時,通常會有兩種做法:

  • 一般技術寫作(Technical Writing):描述演算法、流程,搭配一些程式碼。
  • Knuth 的 Literate Programming:把程式與解釋交織在一起,像寫一本書一樣,完整呈現設計思路。

這兩者看似相似,但差異其實非常大。以下我從幾個層面來比較。



1. 「說明什麼」 vs. 「說明為什麼」

  • 一般技術文件 重點在於「功能怎麼實作」。例如: 先檢查每個單詞,超過寬度就換行,最後輸出結果。
  • Knuth 的 literate doc 他不只告訴你「怎麼做」,而是從「問題動機」開始: 如果我們太早或太晚換行,段落的排版就會很醜。 我們需要一個衡量「醜」的數學函數。假設理想長度是 L,實際長度是 A,那麼 badness = 100 × (|A-L|/L)³。 這樣我們就能用動態規劃,找到最美觀的斷行。

在 Knuth 的筆下,每個程式背後都有故事。

2. 「程式碼附帶註解」 vs. 「程式碼是書的一部分」

Knuth的文稿像一本「帶程式的數學教科書」:

  • 先講原理
  • 再推導公式
  • 然後慢慢展開程式碼

讀者讀完不只是理解程式,還會學到背後的理論。

  • 一般寫作:程式碼是主角,文件只是附屬註解。
  • Knuth:敘述是主角,程式碼只是證據。

3. 數學的角色

Knuth 的 literate programming 常常帶入數學:

  • 公式 定義嚴格標準,例如 badness 函數。
  • 演算法分析,計算複雜度、證明正確性。
  • 抽象模型,把實際問題轉化為數學最佳化問題。

這和一般 technical writing 最大的不同是: 一般寫作只想「程式能動」,Knuth 的寫作追求「程式與數學一致」。

4. 可維護性 vs. 可傳世性

  • 一般技術文件: 目的是讓團隊能維護程式。通常寫給「下一個工程師」。
  • Knuth 的 literate doc: 目的是讓程式成為「人類知識的一部分」。 他把《TeX: The Program》寫得像經典教材,讀者不只是工程師,也可能是數學家、科學家、學生。

這就是為什麼 Knuth 的程式碼 40 年後仍被研究。

5. 範例比較

普通寫法(斷行演算法簡版)

// 檢查單詞,若超過寬度就換行。
procedure break_lines(words, max_width);
begin
current_width := 0;
for each word in words do
if current_width + width(word) > max_width then
begin
new_line;
current_width := 0;
end;
print(word);
current_width := current_width + width(word);
end;

Knuth 式寫法

// 排版的美觀不能只靠貪心演算法。為了衡量「不好看」的程度,
// 我們定義 badness = 100 × (|A-L| / L)³。
// 問題轉化為:在所有換行方式中,找到最小化 badness 總和的方案。
// 這是一個典型的動態規劃問題。
procedure break_paragraph;
begin
compute_badness_table;
for each feasible breakpoint do
compute_least_demerits;
choose_breaks_with_minimum_demerits;
end;

這個例子清楚展現:Knuth 不是單純寫程式,而是在寫「程式的哲學」。

總結:Knuth 的境界

Donald Knuth 的 literate programming 有幾個核心特點:

  1. 程式碼是敘事的一部分,不是獨立的塊。
  2. 數學推導與程式緊密結合,程式變得更精確。
  3. 重視「為什麼」,讓程式成為知識,而不是黑箱。
  4. 追求美學:排版美、程式美、解釋美。

他把程式設計從「工程技術」提升到「人文藝術」。

所以有人說:

Literate programming 不是單純的寫程式,而是寫一部可讀的作品。

如果你正在學習 literate programming,可以試著:

  • 選一個小問題(例如計算字頻、排序演算法),
  • 不要急著寫程式,先用文字解釋「動機、原理、數學」,
  • 然後再逐步引入程式碼。

這樣的訓練,就是向 Knuth 靠近的一步。


留言
avatar-img
Will 進步本
10會員
284內容數
歡迎來到「Will 進步本」!我們將探索計算機科學、商用英文和生成式AI。從基礎到前沿,共同學習和交流,拓展知識視野,啟發創新思維
Will 進步本的其他內容
2025/06/20
Knuth教授的巨著 The Art of Computer Programming (TAOCP)深刻地反映了他對演算法、複雜度和知識傳播的獨特見解與理念。
Thumbnail
2025/06/20
Knuth教授的巨著 The Art of Computer Programming (TAOCP)深刻地反映了他對演算法、複雜度和知識傳播的獨特見解與理念。
Thumbnail
2025/06/20
source: Donald E. Knuth: All Questions Answered Knuth教授對多個技術和程式設計議題發表了見解。
Thumbnail
2025/06/20
source: Donald E. Knuth: All Questions Answered Knuth教授對多個技術和程式設計議題發表了見解。
Thumbnail
2024/07/10
青春期少年的心理可以分成兩個系統——一個是「動力系統」,另一個是「控制系統」。用汽車打比方,動力系統就好像是油門,控制系統則好像是方向盤和煞車。
Thumbnail
2024/07/10
青春期少年的心理可以分成兩個系統——一個是「動力系統」,另一個是「控制系統」。用汽車打比方,動力系統就好像是油門,控制系統則好像是方向盤和煞車。
Thumbnail
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
如果你也是從事軟體相關工作的人,一定會遭遇突然需要你去學習一套你不熟悉的程式語言狀況吧,此時你會怎麼做呢? 是趕快去買書來看嗎? 還是趕快找一門程式課來上? 又或者乾脆去找會的同事來教學?
Thumbnail
如果你也是從事軟體相關工作的人,一定會遭遇突然需要你去學習一套你不熟悉的程式語言狀況吧,此時你會怎麼做呢? 是趕快去買書來看嗎? 還是趕快找一門程式課來上? 又或者乾脆去找會的同事來教學?
Thumbnail
高中數學主題練習—根式化簡
Thumbnail
高中數學主題練習—根式化簡
Thumbnail
高中數學主題練習—根式化簡
Thumbnail
高中數學主題練習—根式化簡
Thumbnail
註解 & Print & 變數型態
Thumbnail
註解 & Print & 變數型態
Thumbnail
世上沒有天才,卻有成功方程式。 想學習新技能、達成目標或成就,作者透過自身的學習經驗,搭配閱讀書籍,分享成功方程式,幫你體驗生活。
Thumbnail
世上沒有天才,卻有成功方程式。 想學習新技能、達成目標或成就,作者透過自身的學習經驗,搭配閱讀書籍,分享成功方程式,幫你體驗生活。
Thumbnail
關於程式語言的學習,只要掌握住幾個基本特性要熟悉幾種程式語言也不困難,這三個基本特性就是…
Thumbnail
關於程式語言的學習,只要掌握住幾個基本特性要熟悉幾種程式語言也不困難,這三個基本特性就是…
Thumbnail
我们在熟练地使用另一种“写”的能力,可以理解成打字的能力,在屏幕上绘制并辨识的能力,并且真的创造出巨量的模拟物。
Thumbnail
我们在熟练地使用另一种“写”的能力,可以理解成打字的能力,在屏幕上绘制并辨识的能力,并且真的创造出巨量的模拟物。
Thumbnail
解決電腦上遇到的問題、證明正確性、探討效率 並且很著重溝通,說服別人你做的事是正確且有效率的。 內容: 計算模型、資料結構介紹、演算法介紹、時間複雜度介紹。
Thumbnail
解決電腦上遇到的問題、證明正確性、探討效率 並且很著重溝通,說服別人你做的事是正確且有效率的。 內容: 計算模型、資料結構介紹、演算法介紹、時間複雜度介紹。
Thumbnail
編輯的基本功,是對文字的敏感度。
Thumbnail
編輯的基本功,是對文字的敏感度。
Thumbnail
專案分享-計算機 邏輯思維:首先,要建立幾個變數與函式,方便我們作業。接下來針對每一個函式進行解釋。 讓大家可以自己動手做一個簡易的計算機
Thumbnail
專案分享-計算機 邏輯思維:首先,要建立幾個變數與函式,方便我們作業。接下來針對每一個函式進行解釋。 讓大家可以自己動手做一個簡易的計算機
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News