本文授權自《紐約時報》,由《數位時代》編譯。
高德納是《電腦程式設計藝術》的作者,這四卷巨著是他的畢生之作。第一卷出版於1968年,全卷(盒裝出售,約250美元)2013年被科學雜誌《American Scientist》收錄進「塑造上世紀科學」的書本名單之中,與《查爾斯.達爾文自傳》特別版、湯姆.沃爾夫《真材實料》、瑞秋.卡森《寂靜的春天》,以及阿爾伯特.愛因斯坦、約翰.馮.諾伊曼、理查.費曼的著作並列。
《電腦程式設計藝術》暢銷超過一百萬本,可說是電腦領域的聖經。「如同真正的聖經,它內容很長,也非常詳盡,沒有其他書籍能和它一樣全面。」Google研究總監彼德.諾米格說。翻過第652頁,第一卷結束,黑色封底上寫著比爾蓋茲的推薦語「如果你能看懂全部內容,一定要寄封履歷給我。」
《電腦程式設計藝術》的開頭節錄自《McCall's CookBook》:
**這就是你們寫了上千封信,要求我們出版的那本書。我們花了很多年反覆檢查數不盡的食譜,只為帶給你們最棒、最有趣、最完美的內容。 **
本書內文主要講演算法,這一數位時代的食譜──雖然高德納總愛指出,3,800年前的巴比倫石板上,也能找到演算法。高德納是位備受敬重的演算法學者,他的名字出現在領域內一些最重要的演算法上,例如Knuth-Morris-Pratt字串尋找演算法。這個演算法是在1970年代構想的,它可以找出所有在文本中出現的給定文字,舉例來說,當你在文件中使用Ctrl+F搜尋關鍵字時,就是應用了這種演算法。
如同他往年的打扮,現年80歲的高德納,時常穿得像個年輕的極客(geek):長袖T恤外面再套著件短袖T恤,以及一件牛仔褲,至少每年的這個時刻,他總是這樣的打扮。早年的日子裡,他終日與機器為伍,寫些原始的程式,鼓搗著零與一。
諾米格提到,「高德納證明了系統可以被解析到機器語言的等級。」然而演算法成為了當今主流,使得一般工程師不再去理會那些二進位垃圾,轉而專注在一層又一層的抽象層程式碼,且經常使用從函式庫找來的一連串程式碼。不過,頂尖工程師偶爾仍會做較為深入的研究。
「在Google,有時我們只是把程式堆砌在一起。」在加州山景城舉辦的一場Google Trip會議上,諾米格說,「但其他時候,如果你是為數十億使用者服務的話,那麼效率便很重要。效率提升10%,就可以創造數十億美元的價值。為了達到該有的效率水準,你必須理解程式的全部脈絡。」
或者就如高德納以前的一位研究生:Google頂尖科學家安德雷.布羅德在會議中解釋的,「我希望為我們所做的研究提供些理論基礎。我們不需要粗淺、漏洞百出或者二流的演算法。我們不希望其他演算法學家說『你們這些傢伙是白痴。』」
創建於2016年的Google Trip應用程式,採用「定向演算法」排定一天中值得推薦的旅遊行程。開發團隊著眼於「最佳化最糟日子的旅遊品質」──好比說,避免將使用者引導回同個地區,只為欣賞不同的景點。他們從瑞士數學家李昂哈德.歐拉300年前提出的演算法中得到靈感,這位數學家想要繪製一條穿越普魯士柯尼斯堡7座橋樑各一次的路線。高德納博士在他的第一卷著作中,闡述了歐拉的古典問題。(他曾將歐拉的方法應用在一台由電腦控制的紡織機上)
依循高德納的教誨,可以避免成為「堆砌程式碼的笨蛋」。眾所周知,他曾提出「文學程式設計」的概念,強調對於人類以及電腦而言,程式碼的易讀性非常重要──這個概念現在看來近乎矯情。高德納甚至認為部分程式碼足以比肩伊莉莎白.畢曉普的詩章,以及菲利普.羅斯的《美國牧歌》,獲得普立茲獎也不為過。
高德納同時是個眾人皆知的完美主義者。網路漫畫《xkcd》、《萬物解釋者》作者蘭德爾.門羅初次得知高德納,還是因為有人說如果能從他的書中找到任何錯誤,就可以獲得獎金。門羅回憶道,「他們說得到高德納的獎金就如同獲得電腦科學的諾貝爾獎。」
高德納自我要求嚴格、文藝等諸多個人特質,或許可以解釋為什麼他這本著作離完成之時看似遙遙無期。高德納和Google共同創辦人謝爾蓋.布林打賭,看布林能否在他完成著作前,獲得博士學位。
演算法初光乍現
19歲時,高德納在《抓狂雜誌》上發表了他的第一篇技術論文《The Potrzebie System of Weights and Measures》。他在電腦科學成為一門學問前,就已經是位電腦科學家,他在位於克里夫蘭,現在稱為凱斯西儲大學的學校攻讀數學。他查看了校內IBM 650的示範程式,這是一部十進位制的大型電腦,並從中發掘了一些缺陷,便重新編寫了軟體與教科書。在一項附屬計畫中,他編寫電腦程式替籃球隊跑統計數據,幫助他們拿下聯賽冠軍,更贏得「電子教練」的稱號。
暑假期間,高德納編寫編譯器所得的收入,比教授一整年的薪水還要多。編譯器就像個翻譯機,能將高級程式語言轉換成低階程式語言,並於過程中進行改良。在電腦科學領域裡,「最佳化」著實是門藝術,高德納有一句格言,「草率的最佳化實屬萬惡根源。」
最終,高德納自己成為了「編譯器」,並無意間開拓出一門他稱之為「演算法分析」的新領域。有間出版社雇用他撰寫一本關於編譯器的書,但最後卻演變成收錄他所有編寫電腦程式知識的書籍── 一本關於演算法的書。
「文藝復興時期,人們開始好奇演算法這個詞的起源。」高德納說,「早期的語言學家透過組合algiros(痛苦)及arithmos(數字)等字詞,試圖推導出它的由來。」高德納繼續說道,「事實上,九世紀波斯教科書作者阿布.阿卜杜拉.穆罕默德.伊本.穆薩.花拉子米的著作中,曾出現這個詞的拉丁語版本『Algorithmi』。」1979年時,高德納曾親自前往烏茲別克,朝聖花拉子米的故鄉。
剛開始寫作時,高德納其實只想寫成一本書。沒過多久,電腦科學遇上爆炸性的發展,所以他重新構想了這部作品,決定重著成7卷的長篇巨著。現在他將每一卷編纂成多個分冊。接下來要出版的是「第四卷的第五冊」,涵蓋「回溯法」、「舞蹈鏈」演算法,原訂2018年聖誕節推出,不過後來推延到2019年4月,因為他挖掘出越來越多有趣的問題,希望能一併收錄進書中。
為了盡早完成這本著作,高德納非常重視時間安排。他55歲退休,極少參與公眾活動,甚至刪除了公開信箱。安德雷.布羅德回憶道,即便在1980年代早期,高德納也十分注重時間管理。
高德納一般在周五上午與學生會面,接著他會到人工智慧概念創立者約翰.麥卡錫的實驗室度過夜晚時光,他可以使用那裡閒置的電腦。當數位出版問世,他看見心愛的著作在螢幕上呈現的樣貌時,簡直嚇壞了,而決定擔負起開發TeX電腦排版系統的重責大任,現在這套系統仍是所有科學刊物的黃金標準。有人認為這是高德納對世界最偉大的貢獻,更是自古騰堡以來,印刷術史上最大的貢獻。
快樂是主要目標
這條長達十年的曲折過程,發生在電腦需要與他人共享,在夜晚跑得更快的那個年代。高德納決定顛倒日夜行程,並將與學生的會面改成晚上8點至午夜。安德雷.布羅德憶起當時,「我告訴女朋友因為周五晚上10點必須和教授碰面,所以沒辦法在一起時,她覺得『這件事簡直蠢到家了。』」
當高德納現身時,他一定會全心全意投入在眼前的事情上。「在他身邊就會讓你感到很愉快。」微軟研究院董事總經理珍妮佛.蔡司提到,「他是團體裡最出色的。如果有人既溫暖又有深度,那個人就是高德納。」
高德納居住在史丹佛,他接受客人於周日來訪。他空出一整天是非常難得的一件事──他通常只有下午1點至4點間,稱為「模除午睡時間」(modulo nap time)的時段有空閒。這天,高德納會很早起床,前往帕羅奧圖第一路德教堂講授周日課程,並在開車回程途中,對數學進行哲學上的思考。
「我永遠不可能知道所有事。」高德納說,「如果我無所不知,或者一無所知,我的生活品質都會比現在糟糕許多。」接著他帶我參觀了他那棟「加州現代風格」的屋子。這棟房屋是他和妻子高精蘭於1970年時建造。他的辦公室亂七八糟地堆放著大量隨身碟,還裝飾著由身為平面設計師的妻子製作的情人節心型藝術品。最令我印象深刻的是音樂房,環繞著他訂製的812根音管的管風琴。最後我們還開了拼圖派對、喝了點啤酒,為這天收尾。
拼圖與遊戲──動筆撰寫一本關於超現實數的中篇小說、譜寫一部90分鐘的管風琴多媒體作品《幻想啟示錄》(Fantasia Apocalyptica)──都是高德納的興趣。他的書中有一段名為「拼圖與現實世界」,他把這段內容寄給了麻省理工學院的一對父子檔,藝術家馬丁.德梅以及電腦科學家艾瑞克.德梅,因為高德納使用了他們的「演算法拼圖字體」。
「我非常激動。」艾瑞克.德梅說,「能出現在這本書裡是我的榮幸。」他提到一句高德納的名言,同時也是「和演算法同樂」雙年會的座右銘,「快樂也許是一直以來的主要目標。」
演算法的「反撲」
不過接著,德梅表示,這個領域開始追求實用了,工程師、科學家和藝術家正攜手合作,他們使用德梅父子為摺紙與彎曲連接桿設計的數學摺紙方法,解決現實問題,例如蛋白質折疊、機器人、安全氣囊等。
當然,繁瑣的演算法也會造成現實問題。人類編寫的演算法能夠解決的問題越來越困難,但同時也創造出有著Bug與偏見的程式碼,這些已經夠麻煩了。更令人擔憂的,或許是那些並非出自人手,而是機器學習後編寫的程式碼。
工程師們依舊訓練著機器,提供它們數據。(數據是偏見與Bug的新領域,而且這裡的Bug與偏見更難被發現與修復)然而,就如麻省理工學院媒體實驗室研究人員凱文.斯拉文所說,「我們現在編寫的演算法連自己都無法理解,這形成了一個非常獨特的時代,我們服從於那些源自人類,但我們卻不理解的概念、行動與成果。」正如斯拉文經常提到的,「如果你是演算法,那麼未來一片光明。」
如果你深諳高德納知識的演算法,未來就更加光明。「今天,工程師使用高德納和其他專家的成果,作為他們演算法的部分內容,接著將所有他們需要的其他東西整合在一起。」Google研究總監彼德.諾米格說。
「AI也是如此,只是整合的過程會基於數據自動化完成,而非經由工程師之手。你想讓AI能夠透過數據,整合一切得到最佳答案,但你必須決定這些內容是什麼,很有可能發生全部內容出自高德納著作其中一頁或一個章節的情況,因為這是完成某些任務的最好辦法。」
幸運的是,高德納堅持完成著作。他估算還得再花25年才能完成《電腦程式設計藝術》,儘管這個數字從1980年起就沒變過了。編寫演算法的演算法,會在書中占據一頁或一個篇章嗎?「絕對不會。」高德納說。
「我擔心演算法會在世界上變得太過重要。」他補充,「起初電腦科學家擔憂沒人肯聽他們的話。現在我則憂心聽我們話的人太多了。」