1. 程式人生 > >《計算機程式設計藝術》作者高德納

《計算機程式設計藝術》作者高德納

原文作者:Siobhan Roberts

譯者:UC 國際研發 Jothy

寫在最前:歡迎你來到“UC國際技術”公眾號,我們將為大家提供與客戶端、服務端、演算法、測試、資料、前端等相關的高質量技術文章,不限於原創與翻譯。

編者按:英文原文發表於時代週刊,並非完全計算機領域內容,由於譯者水平有限,所以有很多地方理解不當之處,還請指正。


提起演算法大師高德納(Donald Knuth),不得不提他這 50 年來的鴻篇鉅製——《計算機程式設計藝術》。

半個世紀以來,斯坦福大學電腦科學高德納已然成為演算法領域的精神指南,他與 Yoda(譯者注:《星戰》中的尤達大師)略有相似之處 - 雖然他身高 6 英尺 4 英寸,戴著眼鏡。

他是“計算機程式設計藝術”的作者,這是一部連續四卷的作品,是他一生的成就。第一卷於 1968 年首次亮相,全卷(以盒裝價格約 $250 出售)被 《美國科學家》雜誌(American Scientist)2013 版 列入「塑造上個世紀科學的書單」 - 與之比肩而立的是《查爾斯達爾文自傳》的特別版,湯姆沃爾夫的《The Right Stuff》,雷切爾卡森的《寂靜的春天》和愛因斯坦,馮諾伊曼和理查德費曼等人的著作。

《計算機程式設計藝術》發行超過一百萬冊,被稱為計算機領域的聖經。“就像一本真實的聖經,它漫長而又全面; 沒有任何書能如此全面,“谷歌研究院主管彼得諾維格說。652 頁之後,第一卷封底以比爾蓋茨的評介結束:“如果你能讀完此書,你絕對得給我發份簡歷。”

該捲開篇摘錄自《麥考爾的烹飪書》:

這是應你們的數千封信要求而出版的書。我們為其傾注了多年的心血,檢查再重新檢查無數次,只求為您帶來最好、最有趣、最完美的食譜。

書籍內部是演算法,它們可以滿足數字時代的需求 - 儘管正如高德納博士所說,演算法也可以在 3800 年前的巴比倫片上找到。他是一位備受尊敬的演算法主義者,他的名字伴隨該領域最重要的作品出現,例如 Knuth-Morris-Pratt 字串搜尋演算法。該演算法於 1970 年設計,能在文字中找到所有出現的給定單詞或字母模式 - 例如,當你按下 Command+F 搜尋文件中的關鍵字時。

高德納博士現年 80 歲,他總是打扮得像個年輕的極客,正如他踏上漫長探索之旅時一樣:上身穿著長袖 T 恤內搭短袖 T 恤,下身搭配牛仔褲,至少在每年的這個時候。早些年,他還使用計算機工作,寫著“原始的”程式碼,玩轉著 0 和 1。

“Knuth 明確表示,實際上計算機系統(內部)一直到機器碼級別都是可被理解的,”Norvig 博士說。當然,現在隨著演算法對它的策劃(及破壞),普通程式設計師不再有時間操縱二進位制程式碼,而是使用抽象層次結構,逐層往上的程式碼結構 - 並且通常使用程式碼庫中的程式碼鏈。即便是精英級的工程師偶爾也會深陷其中。

“在谷歌,有時候我們做的,只是把東西放在一起,”Norvig 博士在加利福尼亞州山景城舉行的 Google Trips 團隊會議上說。“但其他時候,如果你為數十億使用者提供服務,那麼高效就顯得非常重要。 10% 的效率提升能帶來數十億美元的效益,為了達到最終的效率,你必須明白其中到底發生了什麼。”

1963 年,高德納博士在加州理工學院獲得博士學位 | Jill Knuth

或者,正如 Andrei Broder(谷歌傑出科學家,高德納博士的前研究生)在會上所說:“我們希望為我們正在做的事情提供一些理論依據。我們要的不是輕浮草率甚至二流的演算法。我們不想聽見其他演算法專家說'你們太蠢了'“。

創建於 2016 年的 Google Trips 應用使用了“定向越野演算法(orienteering algorithm)”,它可以推薦出適合某天的旅遊活動。該團隊正致力於“最大限度地提高最糟糕的一天的質量” - 例如,避免將使用者送回同一社群,而是讓他檢視不同的地點。他們從 300 年前瑞士數學家萊昂哈德·尤拉(Leonhard Euler)發明的演算法中汲取靈感,尤拉希望繪製一條通過普魯士城柯尼斯堡(Königsberg)的路線,並滿足一次性穿過城中的七座橋。高德納博士在他論文的第一卷中論述了尤拉的經典問題。(他曾經用尤拉的方法編碼了一臺由電腦控制的縫紉機。)

遵循高德納博士的學說有助於保持睿智。他以引入“文學程式設計”的概念而聞名,強調編寫人類和計算機可讀程式碼的重要性 - 這一概念現在看起來幾乎是天方夜譚。高德納博士甚至認為,有些計算機程式就像伊麗莎白·畢曉普的詩和菲利普羅斯的《美國牧歌》一樣,是可以評得上普利策獎的文學作品。

他也是臭名昭著的完美主義者。xkcd 漫畫家兼《Thing Explainer》作者蘭德爾 · 門羅(Randall Munroe)第一次聽說高德納博士是從一群電腦科學領域的學者口中,據稱高德納博士會為發現書中勘誤的人支付獎金。正如門羅先生所回憶的,“大家將這樣的一個錯誤檢查視為電腦科學界的諾貝爾獎。”

高德納博士的嚴格標準,文學和其他方面的成就,足以解釋為什麼他的人生並不止於此。他和谷歌的聯合創始人謝爾蓋 · 布林(Sergey Brin)以及以前的學生(姑且這麼稱呼)打了個賭:布林能否在高德納博士完成他的著作之前完成他的博士學位。

演算法的曙光

在 19 歲那年,高德納博士在 Mad 雜誌上發表了他的第一篇技術論文《The Potrzebie of Weights and Measures》。在電腦科學這個學科存在之前,他先成為了一名電腦科學家,並在現在的克利夫蘭凱斯西儲大學研究數學。他查看了學校的 IBM 650 大型機——一臺十進位制計算機上的示例程式,發現了程式漏洞,重寫了軟體以及教科書。他還做了一個為籃球隊統計資料的小專案,編寫了一個助力籃球隊贏得聯賽的程式 - 由此獲得了 Walter Cronkite 授予的“電子教練”稱號。

暑假期間,高德納博士通過開發編譯器賺的錢比當教授一年的收入還多。編譯器就像翻譯器,將高階程式語言(類似代數)轉換為低階程式語言(有時是神祕的二進位制),並在理想情況下提升效能。在電腦科學中,“優化”著實是一門藝術,克諾斯諺語中也有言曰:“過早優化是萬惡之源。”

最終高德納博士自己成了編譯器,他不經意間建立了一個新的領域,並稱之為“演算法分析”。一位出版商聘請他寫一本關於編譯器的書,但最終成書涵蓋了博士掌握的所有計算機程式設計知識 - 一本關於演算法的書。

1981 年,高德納博士正在閱讀 1957 年的 Mad 雜誌,該雜誌出版了他的第一篇技術文章。 彼時他才 19 歲。| Jill Knuth

《計算機程式設計藝術》第 1-4 卷。 “如果你能讀完整篇文章,請給我一份簡歷,”比爾蓋茨寫道 | 紐約時報 Brian Flaherty

“文藝復興時期,這個詞(Algorithm)的起源比較令人疑惑,”博士表示。“早期的語言學家試圖通過製造像 algiros[痛苦] + arithmos[數字]這樣的組合來推測它的產生。”事實上,高德納博士繼續說,該詞最早發現於 9 世紀的波斯教科書(作者 Abū'AbdAllāhMuhammadibn Mūsāal-Khwārizmī),拉丁語譯為 Algorithmi。高德納博士從未半途而廢,他於 1979 年前往烏茲別克 al-Khwārizmī 的祖先家園進行朝聖。

最初高德納博士只打算簡單寫一篇文章。但不久之後,電腦科學迎來了大爆炸,因此他重新構想,並將該專案重鑄為七卷,每個子卷稱為分冊。下一個部分“第 4 卷,第 5 冊”,包括“回溯(backtracking)”和“舞蹈鏈(dancing links)”,原計劃於聖誕節釋出。後來推遲到明年 4 月,因為他不斷尋求呈現越來越多不可抗的問題。

為了最優化達成目的,高德納博士始終嚴格規劃他的時間。他 55 歲時退休,嚴格限制自己的公開活動並不再使用電子郵件(至少是官方的)。安德烈 · 布羅德回憶說,即使在 1980s,時間管理也是他作為教授的鮮明特徵。

高德納博士通常在週五早上約見學生,然後在約翰 · 麥卡錫( John McCarthy,人工智慧創始人)的實驗室度過他的夜晚,以便自由訪問計算機。隨著數字出版業務的發展,高德納博士心愛的書在頁面上的效果令人震驚,他已經完成了建立 TeX 計算機排版系統的使命,該系統仍然是所有形式的科學傳播和出版的黃金標準。有人把它當成高德納博士對世界的最大貢獻,以及自古騰堡(Gutenberg)以來對排版的最傑出貢獻。

這個長達十年的繞道發生在人人擁有計算機的時代,並且每天晚上加速運作,而彼時大多數人都在睡覺。高德納博士的生活是日夜顛倒的,他將自己的日程安排調整了 12 個小時,並將學生預約調整為從週五晚上 8 點至午夜結束。布羅德博士回憶說:“當我告訴我的女朋友我們週五晚上不能做其他事情,因為星期五晚上 10 點我必須見到我的導師時,她表示,'這真的太太太愚蠢了吧。(This is something that is so stupid it must be true.)' ”

然而,一旦高德納決定親臨現場,他必定百分百投入。“呆在他身邊實在振奮人心,”微軟研究院董事總經理詹妮弗 · 夏雷斯(Jennifer Chayes)說: “他是社群中的佼佼者。如果有一種優化功能兼有溫暖與深度,那麼非他莫屬。”

高德納博士與字型設計師 Hermann Zapf 討論字型。 許多人認為高德納博士在 TeX 計算機排版系統上的工作是自古騰堡以來對排版的最傑出貢獻 | Bettmann,來自 Getty Images

與演算法學家共處的週日

高德納博士住在斯坦福,會在週日接待一位“訪客”。他的這一天過得非常特別 - 一般他的空閒時間是“模除午睡時間(modulo nap time)”,即下午 1-4 點的神聖日常儀式。他很早就出發去 Palo Alto’s First Lutheran Church,為一群站立式聽眾提供週日課程。在開車回家的路上,他也會進行數學相關的哲學思考。

“我不可能無所不知,”他說。“如果我一無所知或者無所不知,那我的生活會更糟。”接著,他帶我們遊覽了他的“加州現代”房子,該房子由他和他的妻子吉爾於 1970 年建成。他的辦公室裡堆滿了 U 盤以及來自平面設計師 Jill 的情人節心形藝術裝飾。最令人印象深刻的是音樂室,環繞著他自制的 812 管道管風琴。拼圖派對上的啤酒宣告了這一天的結束。

謎題和遊戲 - 寫一部關於研究之美的小說,譜寫一段 90 分鐘的多媒體音樂幻想,“Fantasia Apocalyptica” - 是真正讓他技癢的事情。他的書有一節題為“拼圖與真實世界(Puzzles Versus the Real World)”。由於引用了藝術家 Martin Demaine 的團隊和 Erik Demaine(二者皆為麻省理工學院的電腦科學家)的“演算法拼圖字型”,因此博士還將摘錄 email 給了他們。

“我很激動,”Erik Demaine 說。“能夠出現在書中是我的榮幸。”他引用了高德納的另一名言,同時也是兩年一度的“FUN with Algorithms”會議鼓舞人心的座右銘:“快樂也許始終是主要目標。”

不過,Demaine 博士說,這個領域變得實用了。工程師,科學家和藝術家正在聯手解決現實世界的問題 - 蛋白質摺疊,機器人技術,安全氣囊 - 使用 Demaines 的數學摺紙設計,如何將紙張和連結摺疊成不同的形狀。

當然,所有的演算法都會與現實相關聯。人類編寫的演算法是為了解決越來越難的問題,但編寫帶有 bug 和 bias 的程式碼 - 十分令人不安。或許更令人擔憂的是,不是人類編寫的演算法,而是機器學習人類編寫的演算法。

程式設計師仍然訓練機器,並且至關重要的是,它提供了資料來源。(資料是 bias 和 bug 的新領域,且這些 bias 和 bug 更難找難修復)。然而,正如 M.I.T. 媒體實驗室研究附屬機構的 Kevin Slavin 所說:“我們正寫著人類難以閱讀的演算法。這是歷史上一個獨特的時刻,我們受到一系列物理學的思想、行動和努力的影響,這些物理學源於人類但卻難被人類理解。”正如斯拉文經常所說的,“如果你是一個演算法學家,那麼你的前途一片光明。”

1999年,高德納博士在家中的辦公桌 | Jill Knuth

幾點說明 | 紐約時報 Brian Flaherty

如果你精通高德納的演算法,那就更是如此。“今天,程式設計師使用高德納和其他人開發的演算法元件,然後將它們與所需的所有其他東西結合起來,”Google 的 Norvig 博士說。

“對於 A.I. 也是如此。相組合的部分會根據資料自動組合在一起,而不由程式設計師完成。你希望 A.I. 能基於資料組合元件以得到結果。但是你必須明確該使用哪些元件。可能每個元件都是高德納的論文或書中所提到的,因為這是最佳解決方案。”

幸運的是,高德納博士始終堅持不懈。他認為還需要 25 年才能完成《計算機程式設計藝術》,儘管自 1980 年左右以來這個時間一直不變。可能某些章節只是某種演算法的變換,或者作為某個結尾頁面? “絕對不會!”高德納博士說道。

“我擔心演算法在世界上變得過於突出,”他補充說。“最初電腦科學家擔心無人傾聽,而現在我擔心有太多人在聽。”


英文原文:

www.nytimes.com/2018/12/17/…


好文推薦:

《JavaScript DOM程式設計藝術》作者談:原型程式碼與生產程式碼之間的矛盾

“UC國際技術”致力於與你共享高質量的技術文章

歡迎關注我們的公眾號、將文章分享給你的好友