82歲高齡的高德納仍在寫《計算機程序設計藝術》,那是他未完成的人生目標...

本文轉載自:程序員書庫

編譯:猿妹

鏈接:

https://www.quantamagazine.org/computer-scientist-donald-knuth-cant-stop-telling-stories-20200416/

82歲高德納(Donald Knuth)畢生致力於講述計算機程序有關的故事。

高德納對離散數學十分感興趣,於是他將自己的這份愛好融合在自己編撰的鉅著中——《計算機程序設計藝術》

這是他於1962年作爲研究生開始寫的書集,至今尚未完成。他於1968年出版了第1卷,當前版本爲第42版。第2卷在1969年出版,1973年出版第3卷。這時候他是斯坦福大學的計算機科學教授,由於擔心自己的工作會影響他的書籍進度,因此,他在1990年開始請假專注於書籍編寫,直到1993年退休。

按照他的規劃這套書的總共有7卷,現年82歲的他還在努力完成第4卷的B分冊,他預計這本書至少包含A到F部分。

《計算機程序設計藝術》不僅是操作手冊,高德納樂於用講述計算機科學的故事。他說:“一個人和另一個人交流的最佳方式是通過故事。”

這種對溝通的熱情幫助他在計算機科學的故事中扮演了另一個角色,甚至超越了他的代表作。20世紀70年代,出版社給他寄出第二卷第二版的樣書時,高德納對書中數字、符號和文字的排版並不滿意,爲了讓書籍的排版符合自己的審美,他開發了一種計算機排版系統——Tex

他原本以爲他只需要半年時間,在1978年下半年就能完成,但最終他用了八年時間,直到1985年TeX才最終停止修改,TeX可以讓科學論文更加美觀,更易於讀者閱讀和理解。

今年2月,高德納接受了美國科技網站Quanta Magazine的採訪,談到了他創立算法分析的過程,以及《計算機程序設計藝術》4B卷的最新狀態。下面我們一起來看看:

QM:您一直對寫作感興趣麼?

很早之前,我覺得現實世界太難了,並沒有想到自己會發現任何新事物,但是我喜歡用書面的形式表達自己對思想體會。

六年級的時候,我和幾個朋友在一臺複印機上寫了兩頁紙的文章。上中學的時候,我作爲報紙的編輯,每個週一的晚上我都要熬夜才能把報紙趕出來。我在大學裏第一次看到過我的打印稿,是我自己的論文。在大三和大四時,我們開始進行工程和科學評審。例如,我寫了“Th5E4 CH3EmIC2Al2 Ca3P4Er”。每一個字都是一個化學公式。

QM:這些是你開始寫書的原因麼?還是有其他原因?

《計算機程序設計藝術》是一個宣言。它描述了我喜歡做數學的方式和我希望自己曾經可以獲得的教育方式。從第一頁開始,我就開始講算法的故事,當時大多數教科書都沒有探索發現的人文一面。他們只會告訴你“這就是物理/化學原理”,而不告訴你爲什麼。

我講了一個技術故事。我說:“這是行不通的,這裏有解決問題的方法。”因此,我不僅僅是在呈現事實,而是加入一些戲劇化處理,如果你知道科學發現的順序,那麼學習科學就容易得多。而且,我無法抗拒一個好故事,同時,我也不覺得自己是一個先驅者,而是一個記者。

QM:那麼,除了故事之外,《計算機程序設計藝術》是什麼呢?

在寫了兩年的書之後,我認爲它的新穎之處在於從數量上決定了一個程序的好壞。我不只是想說一個程序比另一個更好,我想說的是一個程序比另一個要好13.8%,並說明如何比較它們。

作者A談論算法A,作者B談論它的對立算法B,作者A從未寫過算法B,作者B也從未寫過算法A,作者A和作者B使用不同的計算機。作爲中立的記者,選擇某個角度,解釋這兩個問題——一個算法到底有多好?這是一個有趣的問題,這就是對算法的分析。

QM:“算法分析”是《計算機程序設計藝術》的另一種說法嗎?

1967年,我在工業和應用數學學會的一次會議上,有人問我是幹什麼的。在那些日子裏,計算機科學被劃分爲數值分析、人工智能和編程語言,我才意識到我需要一個名字來描述我所做的事情。

我這本書的新穎之處在於它對算法的嚴格研究,我決定,下次要是有人問我這個問題時,我就會回答他:“算法分析”。不過,這並不是一個很好的定義。

後來,我決定證明這一點。我認爲算法分析是對算法好壞的定量研究。我將其分爲兩部分:其中一部分考慮了某個問題的所有可能算法;另一部分考慮了某個特定問題的特定算法。

算法分析將是我一生的工作。我告訴出版商把我的書名改成《算法分析》,出版商說:“這本書別想賣出去”。後來證明他們的決定是正確的,這本書出版40年後,有五六個版本里算法分析(作爲副標題)出現了,這點我還是很開心的。

QM:但是對你來說,編程不僅僅是關於功能,例如,當你設計TeX時,你是希望找到連接某些點的更好的途徑,想要更好的編程麼?

我的程序必須以一種逆向工程的方式將各個點連接起來,比如字母“S”的曲率從正變到負,然後可能會保持一段時間的穩定。字母的設計者遵循一定的邏輯將線條做成字母的形狀。我想要捕捉的不僅僅是設計的結果,還有它背後的智慧。這就像編寫計算機程序一樣。

我同設計師交談,瞭解他們想要達到的目的,數學是用來量化設計的。在數學上,我給每樣東西都標上刻度盤,我可以說字母“A”有這個點、這個寬度、這個角度、在那裏變細、底部有確定的襯線長度。

我從來沒想過要取代設計師,我只是想爲子孫後代準確地記錄下我們當時在做什麼,使用TeX,讓設計變成可複製。

QM:您有沒有想到TeX在全世界被接受?

TeX一開始只屬於我和我的祕書,Astrid Benson Winkler是一位的出色的祕書,能讀懂我的筆跡,並把它寫的很漂亮。20世紀70年代印刷技術正在走下坡路,幾乎每篇發表的數學論文看起來都很糟糕,在《美國數學月刊》中,下標的字體與主線文本不同。我知道計算機編程可以使書本的排版變得更好看。

我在1978年4月完成了TeX試用版的測試,同年5月份,有了10個用戶,6月份,有了100個用戶,到了7月份,已經有1000個用戶了。五年後,我發佈了我們現在擁有的TeX。Tex最初爲美國人設計的,然後歐洲人也開始使用它。到了1980年代,世界上各種語言的人都在使用它。

QM:聽起來好像發現一直都是你過程的一部分,至今依然如此嗎?

我平均每週5個新程序,詩人必須寫詩,我必須寫電腦程序。檢驗我是否理解的最終標準是我是否能向電腦解釋。我對你說了些什麼,你會點頭,但我不確定我是否解釋清楚了。但是計算機不會點頭,我告訴它,它就重複什麼。在生活的大部分時間裏,你可以虛張聲勢,但不能用電腦。

QM:你每天都在寫作,但你也有其他的興趣,你是如何度過每一天的?

傑克·倫敦每天都要寫1000字纔會和別人交談,而我不是,我的日程安排原則是,在待辦事項清單上先做自己最討厭的事情。到週末,我就會很開心。

QM:您也有許多與計算機科學無關的項目,例如您的音樂作品《幻想曲世界》,您甚至在兩層高的管風琴周圍建造房子。這些事情是否也使您感到快樂?

我寫了幾本書,其中包括一些計算機科學很少談及的關於神學的東西,它是你無法證明的東西,不像數學或計算機科學。如果我的生活都是老生常談的,我不瞭解的神祕事物讓我謙遜,有些事情超出了我的理解。

在數學中,我知道什麼時候定理是正確的,我很喜歡這樣,但如果一切都是可行的,我的生活就不會有太大意義,這些知識不會使我失望,相反,它讓我不會墨守成規。

QM:完成《計算機程序設計藝術》對你來說很重要麼?

計算機科學將繼續生存和發展下去。有一種情況是,所有人都停止使用我們現有的計算機。他們都將學習機器學習並使用量子計算機。然後我就可以結束非量子計算機的故事了。當我能說:“故事結束了。”的時候,這是我完成這本書最快的方式。

你知道“項狄”的故事嗎?勞倫斯·斯特恩在18世紀後期寫了一本自傳體小說《項狄傳》,以分冊方式出版。關於主人公出生的第一週大約有100頁,作者希望主角人生故事完整,但是他沒有做到。斯特恩一直在寫項狄的故事,直到他不能再寫了。

我想用我所知道的最好的方式繼續寫下去,並涵蓋那些我原創的部分,我會盡我所能去做,而不是說我必須在某個期限內完成,我很幸運,出生在這樣一個特殊的時代,現在我已經實現了我所有的人生目標,除了《計算機程序設計藝術》,我現在的想法就是,不管我找到什麼故事,我都會繼續把它講下去。

程序員的聖經——計算機程序設計藝術

作者:Donald E. Knuth

譯者:李伯民,範明,蔣愛軍 

譯者:巫斌,範明

譯者:賈洪峯 

譯者:李伯民,賈洪峯 

當代最偉大的程序員之一高德納著作。高德納老先生從 1963 年開始寫作,至今已經跨越半個世紀。這套書原計劃出版7卷,已經出版《計算機程序設計藝術 卷1:基本算法》《計算機程序設計藝術 卷2:半數值算法》《計算機程序設計藝術 卷3:排序與查找》《計算機程序設計藝術,卷4A:組合算法》《計算機程序設計藝術:MMIX的增補》。

☟ 5折購買程序員的聖經

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章