Sora
唐納德·克努特
尤達(dá)大師是著名科幻影片《星球大戰(zhàn)》里的角色。他身材矮小,壽命極長,喜歡用飽含哲理的倒裝句給人忠告。更重要的是,他是絕地武士里“元老中的元老”,更是地位崇高的導(dǎo)師型人物。
半個世紀(jì)以來,斯坦福大學(xué)中與尤達(dá)略相似的計算機科學(xué)家唐納德·克努特,已經(jīng)成為了算法領(lǐng)域的精神向?qū)?,盡管他身高6英尺4英寸,且戴著眼鏡。
克努特是長達(dá)四卷的《計算機程序設(shè)計藝術(shù)》一書的作者,這也是他畢生的心血。第一卷于1968年首次出版,而合集(盒裝價格約250美元)則于2013年被美國科學(xué)家列入“塑造20世紀(jì)科學(xué)”的書籍清單中—與特別版的《查爾斯·達(dá)爾文自傳》、蕾切爾·卡森的《寂靜的春天》以及阿爾伯特·愛因斯坦、約翰·馮諾伊曼和理查德·費曼的著作放在一起。
該書印刷超過100萬冊,是算法領(lǐng)域的《圣經(jīng)》?!熬拖褚槐菊鎸嵉摹妒ソ?jīng)》一樣,它是漫長而全面的;沒有其他書能如此面面俱到。”谷歌研究主管彼得·諾維格說。652頁之后,第一卷以封底上的比爾·蓋茨寫的一句話作為結(jié)尾:“如果你能閱讀消化完整本書,你一定要給我發(fā)一份簡歷?!?/p>
書中的內(nèi)容是算法—滿足數(shù)字時代的需求的食譜,盡管克努特喜歡指出,算法其實在3800年前的巴比倫泥板上就能找到。他是一位受人尊敬的算法大師;他的名字附在該領(lǐng)域最重要的一些成果上,例如克努特-莫里斯-普拉特字符串搜索算法。這項1970年完成的發(fā)明,用于在文本中找到所有出現(xiàn)的給定單詞或字母組合—例如,現(xiàn)在你就可以一起按下Command和F兩個按鍵,來搜索文檔中的關(guān)鍵字。
現(xiàn)年80歲的克努特,通常穿著還是像個年輕極客:至少每年的這個時候,他都用短袖T恤套在長袖T恤外面,搭配牛仔褲。早年間,他的工作與機器息息相關(guān),寫著“原生代碼”,用0和1到處修修補補。
克努特與字體設(shè)計師H e r ma n nZapf討論字體。許多人認(rèn)為克努特在TeX計算機排版系統(tǒng)上的工作是自古騰堡以來對排版的最大貢獻(xiàn)
19歲時,克努特在《Mad》雜志上發(fā)表了他的第一篇技術(shù)論文——《Potrzebie度量衡系統(tǒng)》。在計算機科學(xué)這一學(xué)科存在之前,他就已經(jīng)成為了一名計算機科學(xué)家,并且在現(xiàn)在的克利夫蘭凱斯西儲大學(xué)學(xué)習(xí)數(shù)學(xué)。
他查看了學(xué)校的十進(jìn)制IBM650大型計算機上面的示例程序,并注意到了一些不足之處,于是就重寫了這些軟件,以及課堂上所使用的教科書。同時,他還把為籃球隊進(jìn)行統(tǒng)計數(shù)據(jù)作為業(yè)余項目,編寫了一個幫助他們贏得聯(lián)賽的計算機程序——沃爾特·科隆凱特將其稱為“電子教練”。
暑假期間,克努特通過撰寫編譯器賺取的錢,比教授們一年的收入都多。編譯器就像一個翻譯器,將高級編程語言(類似代數(shù))轉(zhuǎn)換為低級編程語言(有時是神秘的二進(jìn)制),理想情況下,還能在此過程中對代碼進(jìn)行優(yōu)化。
在計算機科學(xué)中,“優(yōu)化”確實是一門藝術(shù)。這在一句克努特的口頭禪中有所闡述:“不成熟的優(yōu)化是萬惡之源?!?/p>
最終,克努特自己也變成了編譯器,他在不經(jīng)意間創(chuàng)造了一個“算法分析”的全新領(lǐng)域。一位出版商聘請他寫一本關(guān)于編譯器的書,但這本書演變成了一本集合了他所知道的關(guān)于如何為計算機編程的知識的書——一本算法書。
“在文藝復(fù)興時期,對算法(algorithm)這個詞的起源是有疑問的。早期的語言學(xué)家試圖通過做出像algiros(痛苦)+arithmos(算術(shù))這樣的組合,來推測它是如何被推導(dǎo)出來的?!笔聦嵣希伺乩^續(xù)說,“這個命名起源于9世紀(jì)的波斯教科書作者,其姓名拉丁語化為Algorithmi?!苯^不半途而廢的克努特,于1979年前往烏茲別克斯坦,特地去Algorithmi的家鄉(xiāng)進(jìn)行了“朝圣”。
克努特開始寫作時,他只打算寫一篇文章。不久之后,計算機科學(xué)經(jīng)歷了大爆炸式發(fā)展,因此,他重新進(jìn)行了構(gòu)想,并將書的長度定為七卷。
為了提高寫完這套鴻篇巨制的概率,克努特一直十分珍惜時間。他在55歲時退休,盡可能不參加公開活動,并停止使用電子郵件(至少官方宣稱是這樣)。安德烈·布羅德回憶說,即使在20世紀(jì)80年代早期,時間管理也是這位教授最具代表性的特征。
克努特通常在周五早上與預(yù)約過的學(xué)生會面,這會持續(xù)到他開始在人工智能創(chuàng)始人約翰·麥卡錫的實驗室度過漫漫長夜,以便使用閑下來的計算機。隨著數(shù)字出版業(yè)務(wù)的出現(xiàn),克努特開始考慮他所鐘愛的書籍看起來會變成什么樣的問題。
于是,他又開始創(chuàng)建TeX計算機排版系統(tǒng)。該系統(tǒng)為所有形式的科學(xué)傳播和出版物,提供了一個極高的標(biāo)準(zhǔn)。有人認(rèn)為,這是克努特對世界的最大貢獻(xiàn),也是自古登堡以來,人類對排版方面的最大貢獻(xiàn)。
而且,那還是計算機在大多數(shù)人進(jìn)入夢鄉(xiāng)后的夜晚跑得更快的年代。所以克努特晝夜顛倒,將他的日程安排調(diào)整了12個小時,把學(xué)生預(yù)約挪到周五晚上8點開始,直到午夜。
布羅德博士回憶說:“當(dāng)我告訴女朋友,咱們星期五晚上不能約會,因為我必須在晚上10點去見導(dǎo)師時,她說‘這太蠢了?!?/p>
當(dāng)克努特選擇在場時,他一定是百分之百投入的。微軟研究院董事總經(jīng)理詹妮弗·夏雷斯說:“你在他身邊時會感到很榮幸。他是專業(yè)領(lǐng)域中的佼佼者?!?/p>
克努特住在斯坦福,并允許自己有一名周日訪客。能讓他花掉整整一天是非常特別的—通常他有空的時候是在“模數(shù)午睡時間”,這是從下午1點開始,到下午4點結(jié)束的神圣日常儀式。
他起得很早,然后會在帕洛阿爾托的第一路德教會,為一屋子人提供一堂星期日學(xué)校課程。之后他開車回家,路上他會從哲學(xué)角度思考數(shù)學(xué)。
“我永遠(yuǎn)不會知道一切,”他說,“如果沒有什么我知道的答案,也沒有什么我不知道的答案,我的生活肯定會糟糕得多?!比缓?,他展示了他和他的妻子吉爾于1970年建造的“加州現(xiàn)代”房子。而這一天也會在啤酒與謎題派對中結(jié)束。
他的書中,有一個模塊的標(biāo)題為“謎題與真實世界”。他通過電子郵件,將摘錄發(fā)送給了麻省理工學(xué)院的藝術(shù)家馬丁·迪馬內(nèi)和計算機科學(xué)家埃里克·迪馬內(nèi)這一父子團(tuán)隊,因為克努特使用了他們的“算法拼圖字體”。
所有的算法都會導(dǎo)致現(xiàn)實問題。人類所編寫的算法—用來嘗試解決越來越復(fù)雜的問題,但同時也會產(chǎn)生嵌入錯誤和偏差的代碼?;蛟S更令人擔(dān)憂的,不是人類編寫的算法,而是機器開始學(xué)習(xí),并編寫“自己”的算法。
克努特工作臺上的筆記
程序員仍然在訓(xùn)練機器,至關(guān)重要的是,為機器提供數(shù)據(jù)。然而,正如MIT媒體實驗室研究附屬機構(gòu)的凱文·斯拉文所說:“我們現(xiàn)在正在編寫我們無法閱讀的算法。這成為了歷史上的一個獨特時刻,因為我們受到一系列物理學(xué)思想、行動和努力的影響,這些都源于人類但沒有被人類理解。”
“現(xiàn)在,程序員都在使用克努特和其他人所做的成果,作為他們自己算法的組件,然后將它們與所需的其他東西結(jié)合起來?!惫雀璧闹Z維格博士說。
“對于人工智能,我們做了同樣的事情。只是組合在一起,這一部分會根據(jù)數(shù)據(jù)自動完成,而不需要程序員的工作。你想讓人工智能基于數(shù)據(jù)來組合組件以獲得良好的結(jié)果,但是你必須決定需要哪些組件。可能每個組件都來源于克努特所寫的書中某一頁或某一章節(jié),因為這是完成某項任務(wù)的最佳方式。”
幸運的是,克努特一直在堅持不懈地鉆研算法。他認(rèn)為完成《計算機程序設(shè)計藝術(shù)》還需要25年,盡管自1980年以來,這個時間框架就沒再變化過。
“我擔(dān)心算法突然變得太重要了,”他補充說,“最初計算機科學(xué)家擔(dān)心沒有人聽我們說話?,F(xiàn)在我擔(dān)心的是,聽的人太多了。”