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