EP 2192021-09-092:21:27 ROUND 2
程式之美、玩笑與自由意志
Donald Knuth
電腦科學大師 Donald Knuth 從人生第一支程式聊到寫程式的美學,也談他自認證明過最難的數學問題與人生的意義。
Donald Knuth: Programming, Algorithms, Hard Problems & the Game of Life | Lex Fridman Podcast #219在 YouTube 看 ↗
重點6 條
- 從打洞卡除錯到圈叉遊戲學習:Knuth 大學一年級在 IBM 650 上寫出人生第一支程式(質因數分解),靠逐一按開關看執行過程來除錯;第三支程式是圈叉遊戲,其中一版靠兩個「什麼都不懂」的玩家互相對弈,六百局後學會不要輸,是他最早接觸的機器學習經驗。
- 程式該寫給人讀:他從閱讀別人程式能看出作者換手、風格高下的經驗,發展成 literate programming——把程式碼與英文說明交織在一起的寫法,也是他心目中「美的程式」的核心信念。
- 對自動補完程式碼有期待也有警覺:談到 OpenAI Codex/GitHub Copilot 這類工具,他認為好處是讓人專注在真正需要天才的部分,壞處是責任會被一層層自動化蓋掉,最後沒有人真的理解系統在做什麼,尤其一旦牽涉到人命。
- 他自認證明過最難的問題:隨機圖從空邊長到滿邊演化的過程中,會在某個瞬間突然冒出一個遠大於其他分量的「巨型分量」,他花了很長時間才證明這個現象發生的確切機率,過程中還意外向來訪的 Bill Gates 講起這個發現。
- 與 John Conway 的交情:兩人 1967 年在牛津初識,後來 Knuth 只花一週就把 Conway 在餐巾紙上寫下的數論改寫成《Surreal Numbers》,也提到 Conway 曾懷疑關掉正跑到精彩處的生命遊戲是不是不道德的。
- 為什麼把 TeX 開源:他解釋自己的收入早就過了「夠用」的門檻,也看過各家排版系統因為專有語言互不相容而拖累整個產業,所以堅持不為 TeX 申請專有權利。
時間軸20 段
大學新生在 IBM 650 上寫出人生第一支程式(質因數分解),逐一按開關看執行過程來除錯。
三個版本的圈叉遊戲程式,其中一版靠兩個什麼都不懂的玩家互相對弈,六百局後學會不要輸。
從閱讀別人程式能看出作者換手、風格高下的經驗,帶出他心目中「程式該寫給人讀」的核心信念。
談在著作裡放幽默的分寸,並提到《The Art of Computer Programming》第二卷藏了一組還沒有人破解的密文玩笑。
討論 OpenAI Codex/GitHub Copilot,認為好處是讓人專注在真正需要天才的部分,壞處是責任會被一層層自動化蓋掉。
解釋「optimization」一詞原本的意思,並用 Fortran 編譯器八成時間都花在讀註解卡的例子說明直覺常常是錯的。
談 Roger Penrose 的計算極限主張,認為意識與自由意志這類問題目前「超越知識所及」,還無法回答。
談 Conway 的生命遊戲,認為它最重要的意義是讓「決定論」與「自由意志」之間的張力變得清楚可見。
回憶 1967 年在牛津第一次見到 Conway,五年後兩人在加拿大 Calgary 巧遇,午餐時在餐巾紙上聽到數論構想,後來只花一週寫成《Surreal Numbers》。
說自己是因為追 Jill 的室友才認識她的,結婚一甲子的秘訣是願意妥協,不是追求毫無摩擦的關係。
回憶在 Caltech 與 Feynman 互相旁聽對方的課,也提到 Feynman 在巴西當面拆穿一本教科書教法有問題的故事。
說明自己從物理系轉念數學的原因:物理考題他答得出來卻想不出來,數學題他懂出題者在想什麼。
解釋 up-arrow notation 如何表示超大數字,也提到 Feynman 曾追問箭頭數量能不能推廣到複數。
講述 Knuth–Morris–Pratt 演算法的由來:三人各自獨立發現,後來才知道摸到的是同一頭大象的不同部位。
他自認證明過最難的問題:隨機圖從空邊到滿邊演化時,會在某個瞬間冒出一個遠大於其他分量的巨型分量。
解釋為何把 TeX 免費公開而不申請專有權利,並以當年 Fortran 開放給各家廠商翻譯的先例類比。
從最喜歡的符號 π 談到設計 Masyu 解謎題,再到美國 49 州的優雅圖形標號問題,最後發現答案裡藏著 π 的數字。
說明自己從母親那裡學到的排程哲學:先做清單上最不想做的事,而不是像機器人規劃那樣預先安排好一切。
建議年輕人做自己真心覺得被召喚去做的事,並認為「無聊」是一種還沒學會的技能,不是外在事物的問題。
談相信神存在但不知道那代表什麼,並用一戰前夕的歷史小說說明領導者常常得在無法確定對錯時做出攸關人命的決定。