《計算機程序設計藝術》做者高德納

原文做者:Siobhan Robertshtml

譯者: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國際技術」致力於與你共享高質量的技術文章

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

相關文章
相關標籤/搜索