對計算機科學先驅高德納(Donald Knuth)來說,良好的編程就相當于美好的表達。現年 82 歲高齡的高德納老爺子至今仍堅持寫作已經持續幾十年的計算機科學巨著《計算機程序設計藝術》(The Art of Computer Programming)。近日,《量子雜志》采訪了這位孜孜不倦講述計算機科學故事的計算機科學家,也讓我們看到了這位計算機科學先驅的另一面。
高德納老爺子一生都在用計算機程序講述計算機程序的故事。圖源:Vivian Cromwell
一場糖果名稱組詞比賽讓高德納認清了自己的才能 高德納是一位計算機科學家,他的年齡差不多就和他投身領域誕生的時間一樣長。在上世紀中葉計算機編程剛剛誕生的那些年,當地一家名為 Ziegler 的糖果公司舉辦了一場比賽,這讓當時僅 13 歲的高德納看清了自己的才能。這場比賽是讓孩子們確定能用一種糖果名稱(即 Giant Bar)的字母組成多少個單詞,這是一個界定清晰明確的問題,也正是他所喜歡的那類問題。 「我有一種強迫癥,而它讓我產生了對數字離散問題的興趣。并且,我也很熱愛鉆研大量信息。」高德納說。 在他家的地下室中,高德納系統性地翻閱了他家那本 2000 頁厚的 Funk&Wagnalls 無刪節版詞典。他甚至說服了父母,讓相信自己生病了,這樣兩周時間都沒去上學,而是把時間投入到了這個問題上。基于這種糖果名稱的字母,他標注了以 Aa、Ab 和 Ba 等可能在單詞前面的字母串,并將它們做成了索引卡片。之后,他開始檢索詞典中滿足條件的條目。他發現詞典中有些部分可以完全跳過,比如以字母 C 或 BU 開頭的單詞部分。 賽事官方預計最后的勝者能找到大約 2000 個單詞,而高德納整整找到了 4700 多個。他為他的班級贏得了在電視上露臉以及巧克力獎勵。 在那以后,他還將繼續為自己贏得更多「巧克力」,包括第一屆 ACM 格蕾絲·穆雷·赫柏(Grace Murray Hopper)獎以及美國國家科學獎章和 1974 年圖靈獎。 孜孜不倦編撰計算機科學巨著《計算機程序設計藝術》 高德納甚至將自己對離散數字問題和大量信息的熱愛融入到了他的皇皇巨著《計算機程序設計藝術》中,這套書從 1962 年他還是一個研究生時就已經開始寫了,但到現在還未完成。 1968 年他出版了該書的第 1 卷,目前該卷已經印了 27 版。第 2 和 3 卷分別出版于 1969 和 1973 年。那時候他已經是斯坦福大學的一位計算機科學教授了,但他也擔心教職工作會妨礙自己寫完這套書。因此他在 1990 年告假,接著在 1993 年退休,打算余生都用來完成這套七卷巨著。 現在,他已經 82 歲了,仍在努力撰寫第 4 卷的 B 部分,他預計這一卷至少有 A 到 F 共 6 部分。
高德納正努力撰寫《計算機程序設計的藝術》第 4 卷 B 部分。他預計這一卷至少還有 4 部分,而整套書還有 5、6、7 三卷要完成。照片來自高德納的妻子高精蘭(Jill Knuth)。 高德納訪談實錄:一個不一樣的高德納老爺子 高德納接受了《量子雜志》的采訪,并就提出的問題一一進行了回答。從這些采訪中可以瞥見高德納老爺子的科研理念和人生態度。 您一直都對寫作有興趣嗎? 之前,有人告訴我說現實世界對我而言太難了。我并沒有想要發現任何新東西的想法,但我熱愛通過寫作來表達我享受這些思想的喜悅。
高德納總是講述帶有科學內容轉折的故事。上大學時他寫了一篇短篇小說,里面的每個詞都是一個化學式。照片來自高德納的妻子高精蘭(Jill Knuth) 上六年級時,我和幾個朋友在一臺油印機上寫了兩頁的文章,不過內容全是笑話。上高中時,作為新聞報編輯,我每周一晚上都要通宵達旦趕稿子。上大學時,我作為校刊編輯寫了自己的第一行文字。在大學三四年級時,我們開始寫工程和科學評論。舉個例子,我寫了《Th_5E_4 CH_3EmIC_2Al_2Ca_3P_4Er》,其中每個詞都是一個化學式。 這是您撰寫這部巨著的原因嗎?您是否將其視為又一個故事? 《計算機程序設計藝術》是一個宣言。它講述了我多么喜歡數學以及我希望的學習方式。從第 1 頁開始,我開始講關于算法的故事。那時候大多數教科書都沒有探索科學發現中人的一面。它們只是說「這是化學的工作方式」或「那是物理學的工作方式」。 我也講了一個關于技術的故事。我說:「有些東西是沒有效果的,這里有一種可以解決問題的方法。我不只是單純地陳述事實,我還增加了戲劇性。」如果你知道發現的先后順序,那么科學學習來就變得容易多了。另外,我也沒法拒絕一個好故事。我沒把自己視為一個先驅,而是將自己看作是一個記錄者。 那么除了故事之外,《計算機程序設計藝術》還講了什么? 在我寫了兩年書之后,我意識到這套書的新穎之處在于它可以定量地確定一個程序的優劣程度。我不只是想說一個程序比另一個程序更好。我想說的是一個程序比另一個程序好 13.8%,并且對這種比較結果做出了解釋。 作者 A 會談論算法 A,作者 B 會談論他的競爭算法 B。并且,作者 A 從來不寫關于算法 B 的東西,作者 B 也從來不寫有關算法 A 的東西。另外,作者 A 和 B 使用的計算機也不一樣。那么,作為一個中立的記錄者,我會從這樣一個角度解釋這兩個算法,即「一個算法究竟有多好?」。提出這樣的問題是很有意思的,這就是算法分析。 「算法分析」只是「計算機程序設計藝術」的另一種說法嗎? 1967 年,我在參加工業與應用數學學會會議(Industrial and Applied Mathematics conference)時,有人問我做了些什么。那時候,計算機科學被劃分成了數值分析、人工智能和編程語言幾個領域。我意識到我需要為我的工作起個名字。 我的書的新穎性在于對算法的優劣程度展開了嚴格的探究。所以我決定下次有人問我這個問題時,我會回答自己在做「算法分析」。我的定義是:如果我對此感興趣,那這就是算法分析。這不是一個非常好的定義。 但對您而言,程序設計關乎的不僅僅是功能。比如說,當您在設計 TeX 時,您想要找到連接特定點的「最賞心悅目的曲線」。您當時想把美編寫成程序嗎? 我的程序連接點的方式就像是對優秀書法家的工作進行反向工程(reverse-engineered)。比如字母 S 中有一個點是曲率由正變負的點,然后會穩定一段時間。這個字母的設計者遵循了一些邏輯來讓該線條變成字母的形狀。我不僅希望體驗這種設計結果,還想理解其背后的智力過程。這就像編寫一個計算機程序。
1980 年,高德納與字體設計師 Herman Zapf 在他的斯坦福大學辦公室,這時候高德納的排版程序 TeX 剛發布僅幾年時間。圖片來自:Chuck Painter / Stanford News Service 我與設計師進行了交談,希望理解他們想要實現什么。這里涉及到的數學是希望能以量化的方式來理解這些設計。借助數學,我在所有東西上都放上了一個小刻度盤。比如對于字母 A,我可以說它的粗細程度、這里的角度是多少、那里逐漸變細、底部有個凸起以及有特定的襯線長度等等。 我從沒想過取代設計師。我只是想讓后代了解我們當時是怎樣做的。使用 TeX,我們可以將設計重現出來。 當時您是否預見到 TeX 會被全世界接納或者它的泛化能力? 當時 TeX 只是為了給我的秘書和我自己用。Phyllis(Astrid Benson Winkler)是一位出色的秘書。她能讀懂我的手寫內容并讓它們以更美麗的方式呈現出來。打印技術日漸式微,因為這種方法雖然經過驗證,但成本卻過于高昂。1970 年代發表的幾乎所有數學著作看起來都非常丑陋。在《美國數學月刊(American Mathematical Monthly)》上,下標字體與正文主體字體都不一樣。我知道計算機編程能讓這些書也變得好看。 1973 年 4 月,我完成了 TeX 一個試驗版本的調試。5 月份,我有了 10 個用戶。6 月份,我有了 100 個用戶。7 月份,我有了 1000 個。每個新的用戶群都會說:「TeX 必須具有這樣那樣的功能」。五年之后,我發布了基本上就是現在這樣的 TeX。這個軟件最早是為美國人設計的,然后歐洲人也開始使用它。所以在 20 世紀 80 年代,我為 TeX 添加了世界語言支持。 聽起來您的開發過程一直伴隨著新的發現。到如今依然如此嗎? 我平均每周寫 5 個新程序。詩人必須寫詩,而我必須寫計算機程序。 對于我是否理解某些東西,終極測試就是看我能否向計算機解釋這個東西。我可以向你解釋說明,你可能會點頭表示理解,但我不能確定我是否解釋清楚了。但計算機「不會點頭」,它只會精準地重復我讓它去做的事。在生活中的很多時候,你可以虛張聲勢,但這對計算機不起作用。
「人類之間溝通的最好方法是故事」高德納說。這種方法讓他可以更嚴格更中立地分析算法。圖片來自 Vivian Cromwell 您夜日繼日地寫作,您還有其它愛好嗎?您怎樣度過日常的每一天? 杰克·倫敦每天都要寫作 1000 詞之后才會與人談話。他完全就是「在我完成 1000 詞之前不要打擾我」,然后他剩下的時間就是喝酒或校對。但我不同,我的日程安排原則是優先做我最厭惡的事情。到周末時,我會非常開心。 真的嗎?怎么做您討厭的事會讓您開心? 在我看來,這樣說很簡單:「讓我做個天才吧,永遠不用清理廁所。」但即使清理廁所也是可以做的。我的妻子 Jill 和我有能放 409 清潔劑插槽的制服。你去廁所打掃然后噴水,清理廁所的感覺非常好。 決定一個人生活成功的因素是要有一個較高的最小值,而不是較高的最大值。如果你能很好地做成一些事情,其它事情又會失敗,那么后者就拖累了你。但如果你幾乎能把每件事都做得不錯,那么你就有一個好的人生。所以我盡力去學習其他人可能覺得做起來不愉快的事情。
2020 年,高德納在自己家中。1993 年他退休了,以便完成自己的巨著《計算機程序設計藝術》。照片來自高德納的妻子高精蘭(Jill Knuth) 您也有很多與計算機科學無關的項目,比如您的音樂作品《Fantasia Apocalyptica》。您的房子甚至都是您繞著一組兩層樓高的管風琴建造的。這樣的活動也讓您感到快樂嗎? 我寫了好幾本關于神學的書,包括《計算機科學家很少談論的事情(Things a Computer Scientist Rarely Talks About)》,里面的東西與數學或計算機科學不一樣,你沒法證明它們。如果我的生活都是分析和厘清事物,那么就會不完整。我不理解的神秘事物給我了謙卑。有一些事情超出了我的理解。 在數學領域,我知道定理何時是正確的。我喜歡那樣。但如果一切都可做可行,那么生活就毫無意思。這樣的知識不會讓我絕望。相反,它能確保我的生活不一成不變。 您覺得順利完成《計算機程序設計藝術》是不是非常重要? 哦,我知道計算機科學還會繼續長存并發展下去。有一種情況是所有人都不再研究現在的計算機了。他們全都跑去研究機器學習和量子計算機。那么我可以走到非量子計算機的終點。如果我可以說「這就是故事的終點」,我當然很高興。這是想象我自己會完成的最簡單的方法。但我不會回答你的問題。 你知道特里斯特拉姆·項狄(Tristram Shandy)嗎?18 世紀后期,勞倫斯·斯特恩(Lawrence Sterne)寫了一本自傳性的書《紳士特里斯特拉姆·項狄的人生和觀點》(The Life and Opinions of Tristram Shandy, Gentleman),并以分冊或分期的形式發表了它。其中寫了他人生第一周的大約 100 頁的故事。他想要完成這個人生故事,但當然他最后完不成。斯特恩一直在寫特里斯特拉姆·項狄的故事,直到他再也寫不動了。 我想要以我知道的最好的方式繼續寫優質內容,介紹那些我有一些原創性看法的事情。我會盡可能地去做,而不會說我要在某個截止日期前完成些什么。我一直都非常幸運,正好趕上了時代的浪潮,出生在了我可以做特別適合我做的事情的時代。現在除了《計算機程序設計藝術》,我已經完成了我所有的人生目標。在現在這種情況下,我還將繼續講述我可以找到的各種故事,并將它們傳遞下去。
-
算法
+關注
關注
23文章
4615瀏覽量
92991 -
計算機科學
+關注
關注
1文章
144瀏覽量
11372
原文標題:高德納:講故事停不下來的計算機科學先驅
文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論