比爾·蓋茨曾說:“讀完這套書的人,可以直接給我遞簡歷!”
有人坦言:“我可能一輩子都看不懂它。”
也有人戲稱:“只要這書砸下去,Bug 都不敢響一聲。”
有人把它供在案頭,當作珍寶;有人把它壓在枕下,伴夢入眠。
別被這套“神書”的名聲嚇退,它背后藏著一位傳奇大佬的故事——
寫書寫了近 60 年,拿過圖靈獎,還親手設計了最牛的排版系統 TeX。
這部被譽為“算法圣經”的巨著——《計算機程序設計藝術》,終于迎來了卷 4B 中文版!
今天,就讓我們一探這位用半個世紀書寫算法傳奇的大佬,到底有多牛!
少年的字典大作戰
![]()
在上世紀中葉,計算機編程剛剛興起的年代,一家糖果公司舉辦了一場比賽,題目是:用“Ziegler’s Giant Bar”這幾個字母能盡量多地拼出英文單詞。
“我從小就有點強迫癥,特別喜歡那種數字化的、離散型的問題。而且我還特別愛鉆研海量的信息。”高德納回憶說。
于是,他跑回家里地下室,翻起那本厚達 2000 頁的《Funk & Wagnalls 未刪節詞典》,一頁頁地找。為了完成比賽,他還騙過爸媽請了病假,整整在家待了兩周,全心投入地解題。
他用卡片整理詞匯,把可能開頭的字母組合,比如“Aa”、“Ab”、“Ba”等做成標簽,然后一列列瀏覽詞典,找到能用糖果名字字母拼出的詞。他很快發現,有些頁完全可以跳過,比如所有以 C 開頭的詞,或以 “Bu” 開頭的詞,根本湊不出。
比賽主辦方原本估計會有約 2000 個有效詞,但高德納竟找出了 4700 多個!最后他不僅上了電視,還為全班贏得了巧克力獎品。
卷4B中文版終上線
![]()
高德納被譽為“現代計算機科學的鼻祖”,是計算機界的傳奇人物。他 36 歲便榮獲圖靈獎,成為當時最年輕的獲獎者。
他將對離散數學的熱愛與對信息結構的執著,傾注于一生的代表作——《計算機程序設計藝術》。這套書自他 1962 年攻讀研究生時動筆,至今仍在持續創作中。
盡管尚未完結,《計算機程序設計藝術》已被Scientific?American選入“塑造科學世紀的 100 本書”之一,并與愛因斯坦的《相對論》、狄拉克的《量子力學》、費曼的《量子電動力學》等物理經典齊名 。
這部巨著的第一卷 1968 年出版,到現在已經印刷了 42 次。第二卷是 1969 年,第三卷是 1973 年出版,那時他已是斯坦福的計算機教授了,但他擔心教學工作會讓他寫不完這套書。于是 1990 年他請了長假,專心寫作。1993 年他干脆退休,打算把余生都用來完成這套計劃中的七卷書。
2025 年,87 歲的高德納為這部程序員圣經再添新作,《計算機程序設計藝術卷 4B 》中文版,終于出版了!英文版也同步上市!
![]()
#3
一種理想的教學方式
![]()
對高德納來說,這不僅是一部巨著,更像是一份宣言。書中展現了他理想中的數學思維,也體現了他少年時代對知識的渴望——希望能被那樣啟發和教導。
當時,大多數教材只會告訴學生“這是化學公式”“這是物理定律”,很少有人講清這些結論是怎么一步步得出的。高德納不想寫這種書。他希望筆下的技術知識帶著過程和情境,有“戲劇性”。他常寫:“你看,這樣不行,那該怎么辦?”他關心的不只是答案,更在乎問題是怎么被解開的。
他說自己不是開創者,更像技術記者。他想寫那種讀者愿意一路跟隨、愿意一起思考的書。
他還有個程序員界流傳多年的梗:只要有人在書里發現錯誤,就能收到他親手簽發的支票一張。這張支票雖然只有幾美元,卻被全球程序員視作榮譽勛章,很多人寧愿裝裱收藏也不去兌現。
算法分析概念的誕生
![]()
那么,《計算機程序設計藝術》這套書的真正核心是什么呢?
高德納曾說:“寫到第二年,我才意識到,我的真正突破,是用量化的方法分析程序優劣。我不想只說這個程序更好,我要說它比另一個快 13.8%,并說明為什么。”
當時,不同作者各寫各的算法,幾乎沒人橫向比較,更沒有統一評價標準。高德納則嘗試以“中立記者”的視角,把不同算法放在一個框架下比較。他覺得這太有意思了:“到底什么算法更好?”這也自然引出了他后來的方向——算法分析。
1967 年,一次 SIAM 會議上,有人問他:你是做什么的?當時計算機科學只有數值分析、人工智能和編程語言三個分支,他突然意識到,自己做的事似乎都不屬于其中任何一類。
于是,他給自己研究的方向起了個新名字——算法分析。這命名很高德納式“只要是我感興趣的,都叫算法分析。”不過后來他也說,這個定義可能不太嚴謹。
他認為,算法分析就是研究“一個算法到底有多好”。它既包括找出所有可能的算法解法,也包括深入分析某個具體算法的效率。
他甚至一度想把書名從《計算機程序設計藝術》改為《算法分析》。但出版社堅決否決了,說這個名字肯定賣不出去。
現在回頭看,高德納承認對方判斷得對。但他也欣慰地看到,幾十年后“算法分析”已成為業界共識,還有五六本書干脆直接用了這個名字。對他來說,那也是一種遲來的認可。
一次設計,永久復現
![]()
1980 年,高德納和字體設計師 Herman Zapf 一起在斯坦福的辦公室中,那時正值他發布排版程序 TeX 的幾年之后。
1970 年代,他在給第二卷修訂版做審稿時,出版社寄來了清樣。但他一看就犯難了,頁面上數字、符號和文字的排版怎么看都別扭,完全無法忍。為此他專門飛了一趟洛杉磯,去考察一臺能做出高質量雜志排版效果的數字印刷機,想找點排版美學的靈感。結果一問價格,貴得那叫一個離譜。
雖然這趟考察沒解決排版問題,卻點燃了他一個大膽的想法——自己動手,寫個排版系統。
對高德納來說,編程從來不只是技術活。比如在設計 TeX 時,他提出要找出“最令人愉悅的曲線”——程序要連接一些點,而這條路徑,得能還原優秀書法家的手感。
像“S”這個字母,曲率從正到負,要平滑過渡。每個字母背后,都有一套設計邏輯。他的目標不是還原線條,而是還原“那只看不見的手”。
為此,他請教了許多字體設計師,試圖把他們腦中的視覺感受轉化成數學公式——字母在哪變彎、厚度怎么變、角度、曲線、襯線,全都能精確控制。
他并不是要替代設計師,而是想為后人保留當時的美學邏輯。一旦設計完成,就能永久復現——這就是 TeX。
起初,TeX 只是他和秘書 Phyllis 使用的排版工具。但當時印刷業已走下坡路,1970 年代出版的數學書排版尤其慘不忍睹。高德納意識到,TeX,可以讓書重新變得美觀。
1978 年 4 月,TeX 的試用版調試成功。5 月,10 個用戶;6 月,100 個;7 月,1,000 個。用戶不斷提出建議。五年后,TeX 變成了今天我們熟悉的樣子。后來隨著歐洲用戶加入,他又開發了多語言版本。
你永遠騙不過代碼
![]()
如今,他仍然堅持每周寫 5 個新程序。他說,詩人要寫詩,自己就必須寫程序。
他有一個判斷自己是否理解某事的標準:是否能把這件事講清楚給一臺電腦聽。“人可以點頭表示理解,但他并不確定對方是否真正明白,而電腦不會點頭,它只會照人說的去執行。如果人表達不清楚,程序就會直接報錯。”
在生活里,人們有時可以蒙混過關,但在寫程序這件事上,電腦根本不會給你面子。
未知的事,更值得去做
![]()
高德納的生活里從不只有計算機。他甚至圍繞一臺兩層樓高的管風琴設計了自己的房子。他創作音樂《末世幻想曲 Fantasia Apocalyptica》,也寫宗教隨筆《一個計算機科學家不常談論的事》——那些“無法證明”的事物。數學世界讓他知道什么是確定的,但不可知的東西卻讓他保持謙卑。
“生活不會只追求能完成的事情,那樣太單調。正是那些神秘和無法完成的東西,讓我的人生不落俗套。”
一直寫到不能寫為止
![]()
那《計算機程序設計藝術》會不會最終完成?
高德納也給出了自己的說法:“計算機科學終將繼續發展下去,也許未來大家都去研究量子計算了,而我剛好可以把非量子時代的程序故事寫到句號。”
但他也坦言,不會給自己設定 deadline,他想寫自己覺得重要、值得講的內容,一直到不能寫為止。
他還說自己這輩子的夢想,除了《計算機程序設計藝術》這套書,其余的全都都實現了。他將會繼續寫下去,繼續講那些值得留下的故事。
《計算機程序設計藝術》全系列圖書
![]()
《計算機程序設計藝術 卷4B:組合算法(二)》
高德納 | 著
楊熊鑫,胡光,李錫涵,柳飛 | 譯
《 計算機程序設計藝術》系列被公認為計算機科學領域的權威之作,深入闡述 了程序設計理論,對計算機領域的發展有著極為深遠的影響。本書是該系列的卷 4B,以 7.2.2 節開篇,討論回溯編程,內容包括舞蹈鏈、精確覆蓋問題、算法謎題、可滿足性問題等。
![]()
《計算機程序設計藝術 卷1:基本算法(第3版)》
高德納|著
李伯民,范明,蔣愛軍|譯
卷 1 講解基本算法,其中包含了其他各卷都需用到的基本內容。本卷從基本概念開始,然后講述信息結構,并輔以大量的習題及答案。
![]()
《計算機程序設計藝術 卷2:半數值算法(第3版)》
高德納|著
巫斌,范明|譯
卷 2 全面講解了半數值算法,分“隨機數”和“算術”兩章。書中總結了主要算法范例及這些算法的基本理論,廣泛剖析了計算機程序設計與數值分析間的相互聯系。
![]()
《計算機程序設計藝術 卷3:排序與查找(第2版)》
高德納|著
賈洪峰|譯
卷 3 擴展了卷1 中信息結構的內容,主要講排序和查找。書中對排序和查找算法進行了詳細的介紹并對各 種算法的效率做了大量的分析。
![]()
《計算機程序設計藝術 卷4A:組合算法(一)》
高德納|著
李伯民 賈洪峰|譯
4A卷(一)主要介紹了組合算法,內容涉及布爾函數、按位操作技巧、元組和排列、組合和分區以及所有的樹等。
![]()
《計算機程序設計藝術:MMIX增補》
高德納 馬丁·魯克特|著
江志強 黃志斌|譯
本書由兩本小冊子合并而成,第一部分描述了 MMIX 的內存、寄存器、指令、加載與存儲等基礎概念,并介紹了關于 MMIX 的一些基本編程技術;第二部分使用該語言重新實現了 TAOCP 前 3 卷中的所有算法。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.