[翻譯]高德納(Knuth)談計算機程式設計藝術(下)
高德納(D. E. Knuth)教授是備受尊崇的系列鉅著《計算機程式設計藝術》(The Art of Computer Programming)和數十篇受到高度讚譽的電腦科學論文的作者。2011年6月,結束了在英國的書籍研討和系列演講的高德納教授,跟BCS編輯Justin Richards暢談了自己的人生和工作。
Elliot 何逸勤 譯
您曾經說過,您的工作從根本上是“關於如何辨別能夠(在電腦科學領域)產生持續影響而非很快改變的東西”。這裡的具體含義是什麼呢?
我每天大約都會收到一份期刊,沒有ITNOW啦(笑),但會有The Computer Journal。我的郵筒每週大約收到8份這樣的期刊,那裡面就是數量龐大的資料,其中就有些好內容。那麼,我怎樣決定哪些要寫進去《計算機程式設計藝術》的呢?
我會盡力避開那些很快就會過時的內容,專注在將會有大範圍應用的內容上。我要找出那些不是很難上手、能夠成為多數人的常用工具的那些實際內容。什麼是下一代的每個程式設計師都需要牢記的?我不會假裝自己在每一件事情上都是正確的,但會努力辨別出那些能夠吸引我的注意力的、令人無法忽視的、我們的下一代必須記住的知識。
那麼我想您的作品中所選用的材料都是構建電腦科學的基石,而不是那些具時效性的枝節?
不錯,但也有一些枝節的東西是可以在兩三個段落中描述清楚並且容易理解的。那些需要花十頁紙來才說得清的問題是很難被我選入書裡的。我更傾向於選取那些通常只需要三頁就可以闡釋清楚、本質上有很高的實用性、並能很好地和書裡面的其他內容熔鍊在一起的演算法。
就以我們從小學習的加法為例,假如你認真去想一想,你就會發現其應用之廣泛是如此的不可思議。我們會在各種各樣的場合中使用加法,而且日復一日從不間斷。然而我們掌握的是加法的本質概念。我的書裡面有許許多多類似的小概念,而對於這種我所需要的題材,我相信還有很多有待人們去研究發現。
即使是加法和算術,現在還有所謂的“無進位加法”或者叫“尼姆數加法”——那是大概一百年前在英國被發明的。一開始那只是計算機所擅長的一個遊戲,而且它能和普通的加法結合使用;後來我們發現這種加法其實非常實用,因此我的新書中會解釋為什麼我們也許應該讓小孩子們從五年級就開始學習它。當然這並不是說我們真正需要學習的都已經在幼兒園就學會了。事實遠非如此簡單,學習需要經過漫長的累積,才能像滴水穿石那樣,在某天達到飛躍。
1999年,MIT邀請您就“信仰與科學的關係”這一普遍性主題做了六場公開演講。十多年過去了,您對科學與精神性的關係的看法是否有什麼改變呢?
我很高興看到人們認為生命中存在某些超出人類理解能力的東西。做那些演講的時候,我只是從壁櫥中跳出來說:“電腦科學很美妙,但那不是一切。請不要期待我能夠真正回答你的疑問。我要解釋的是:我為什麼會覺得仍舊存在神祕的事物是件好事。”
伴隨著科學上不斷推進的成就而來的是一種傾向,我們傾向認為自己可以認知所有的事物。然而,我感覺到,當我們愈加深入地思考,就越會認為自己不過剛剛開始。我們正以令人難以置信的速度在改變著許多事物,但我仍認為未來100年還將有更多需要探索的東西。
因此,人類還有很大的學習空間,而我們所已經學到的浩瀚知識,仍值得我們自豪。
收到MIT的邀請時,我想:如果我的一生中是需要至少一次機會去深究這個問題的,那恰恰就是此時此地了。我不會假裝成這方面的專家,僅僅是覺得大家並沒有真正花時間去思考這個問題。能在這麼多人身上產生反響,我深感慶幸。
那個系列講座有很好的上座率嗎?
的確很好,幾乎連站的位置都沒有了!而且那還是一個相當大的講堂。那個系列一共是六個講座,第一個之後就放在了Dr. Dobbs的遠端網路上面釋出,而在接下來的五六年間被下載的次數也是令人吃驚之多。
所以說這個系列講座必定是滿足了某種需求。我其實並沒有提供答案,而只是提出了一些問題。我認為那些都是我們生活中不可或缺的部分,為何不在公眾場合中共同探討呢?事實上我為前來參與的人數感到相當驚喜。
幾年前我在Google給了一個關於相同主題的演講,那是又一次座無虛席。而那次演講更接近於我在圖靈系列講座中的“提問-回答”。與其什麼都事先規劃好,我更喜歡這種即席回應人們提問的形式。
我正想請教您怎樣應對類似的挑戰呢。對很多人來說,不知道自己即將需要回答哪些問題,是非常可怕的……
哈哈,沒那麼艱鉅啊。即便我說錯了什麼,那也沒啥大不了。壓力也不是那麼大啦,尤其是要跟首相回答記者問題相比較的話。我覺得奧巴馬總統會覺得這種事情有壓力,但小布什總統大概不會這樣想。
我想小布什也會有他所擅長的……
我想大概是吧,不過我真不願意捲入政治討論,我還沒有研究出一套關於政治的演算法呢!
1975年,您出版過一本《婚姻的穩定性》(Marriages Stables)的手冊,那是對演算法分析的入門介紹?
那只是個小噱頭,但那本書其實又是我在蒙特利爾做的一系列六個演講的內容。那系列演講的主題就不是“信仰和科學”了,而是集中在演算法分析。我是以“穩定的婚姻”這一數學問題來展開討論的。這個問題也可以看作男孩和女孩之間的遊戲:他們各自去展現本身的狀態,每個男孩都會對女孩做排名,反之亦然。我們會問自己:“我們要怎樣運用一系列準則來將他們配對,使他們之間的關係是有穩定性的?”當有些人更多地欣賞對方而非自己的現有配偶時,關係就是不穩定的。我們總能找到方法以穩定的方式來配對這些男孩和女孩。
我們可以從數學上證明這是可行的。不過,這樣的方法不止一種,因此我就可以引入演算法分析來解釋為什麼某個方法比其他的更好。回到前面的觀點,我最希望聽眾記住的是如何去領會這些演算法的工作方式。因此,通過具體數學解決問題的方法,我們可以解決類似男孩女孩配對這樣的趣味性問題。
如此說來,這個類比是幫助人們在腦海裡對您的理論形象化?
是的。因此我可以得出一個普通的男孩將要進行一定次數的求愛,而不需要多久我們就能統計出每個結果的概率。你可以通過設計許多問題來讓女孩們或男孩們得到最好的選擇。在試圖解決這個問題的過程中我們就能體會數學的各種美好。
我在那裡通過六個講座來討論了這樣一個問題,並與聽眾們進行了互動。儘管我當時使用的是英語而且我不通法語,但他們仍決定把整個講座都翻譯成法語,並最終以法語出版了那次講座的書。而這本書二十年之後才又以英語再版。因而我也有了用我並不懂的語言出書的經歷了。
看來您確實很喜歡挑戰,六場演講的系列講座,一次還不過癮,非要兩次……
那是啊,每20年,我都會面臨一次這樣的挑戰!那種感覺跟在家裡埋頭創作《計算機程式設計藝術》是很不一樣的。我一直為這系列書籍蒐集資料,已經幾乎有50年啦。
今年您被邀請來做圖靈系列講座,請問對此您有什麼特別感想嗎?
我現在正在人生的一個轉折點,慶祝我的兩個經時數年的大專案進入收尾階段。因此也是給這個系列講座的最佳時間。事實上兩年前我就曾經告訴他們,從那時算起兩年之後會是一個合適的時間——到那時候我會放鬆下來,然後重新調整一下去迎接新的挑戰。
我完成了我引以為豪的《計算機程式設計藝術》卷4A的寫作,並在不到兩週前剛剛收到第一本樣書。此外我也完成了我累積的論文專著的第八卷。我把多年來我所寫的所有的學術論文都出版成書。例如有一卷是關於印刷術的,因為我曾經研究過能使書籍變得更美觀的軟體。有一卷則收集了我所有關於演算法分析的論文。還有一卷收集的是我針對非專業計算機讀者寫的較為通俗的論文。
最後這第八卷是關於趣味遊戲的,我把它們當作甜品一樣留到最後。因為這些論文純粹是因為我喜歡而寫的,寫作過程也是最快樂的。我就是非常熱愛這本關於趣味遊戲的書,雖然我也不是很確定原因是什麼。
我在同一天完成了這本書和《計算機程式設計藝術》卷4A的寫作,並把它們分別寄給了各自的出版商。而也在同一個星期內收到了這兩本書的樣書,這確實讓我心花怒放。我非常慶幸在完成它們的過程中我沒有生病,也沒有發生世界大戰。我也很高興它們終於圓滿完成了,我再也不用為它們操心了。
我們BCS一直致力於提高IT行業的專業性。請問您在這方面的意見,是IT行業僅僅需要自我監管,還是需要進一步的引導呢?
我是編寫程式的人,並沒有合適的資格來評論這一點。英國的同業協會和共濟會有著悠久的傳統,在我所知道的範圍內,它們能將行業引導到優良的質量標準。不過,對某些行業而言,它們做得有點過度了。行會的人能夠判定成員是否值得僱用、是否能提供有價值的服務,這不太好。實際上,當今的通訊手段已經大幅改善,很難再用所謂的“浮報僱傭”的做法來掩蓋不夠好的做法。
您覺得IT行業是否揹負了充斥著極客和書呆子的壞名聲?
這還真是挺有趣的,因為其實有個英國作家曾經有一個大致名為“每週極客”的部落格,而我還因為曾被他評上一次而感到光榮。我想不起那個作家的名字了,這件事大概是發生在兩年前的。現在還有人談論“極客風格”——極客這個詞變得更為普羅大眾所接受,人們也不再羞於承認自己是個極客了。書呆子就有點不同。
我的感覺是現在人們會自詡為極客,大家也理解這個名稱在當今時代已經有著不同的內涵,這跟幾年前相比肯定是不同的。
即使是文字工作者,有時候也很難解釋為什麼有些詞語會受到追捧,而有些則會日漸被遺棄,但很明顯極客這個名稱正處在它的上升期。我也不一定是正確的,但是在我那本關於趣味遊戲的書裡面有一章名為“極客藝術品”,我覺得這個題目很恰當,因為它所涵蓋的恰恰就是那些我希望在自己家裡收藏的藝術品。
對您而言,在過去的五六年間,電腦科學的競技場中哪些是最重要的成就呢?
我認為那是千千萬萬的人們可以協同工作這一事實。如果在每年年底要問哪一項才是當年最大突破的成果,那可能真的想不到什麼。不過,五年之後,整個領域卻已天翻地覆。究其原因,正在於每一個分支都在不斷進步。
偶爾,會出現一些其後被視作重大進步的成果,例如Web的誕生,但它們實際發生的時候,卻是沒有人能準確認識到其重要性的。這種情況跟中國當年建造長城很類似,每個工匠都去添磚加瓦,多如恆河沙數的人們最終成就了這一非凡的團隊作品。大家都在自我挑戰並相互學習,這是我理解的所謂成就。
您覺得電腦科學在現在或者不久的將來將面對的最大的問題或是挑戰會是什麼呢?
最大的挑戰就是面對將來那麼多有待攻克的未知,我們每天晚上如何安枕!作為一個美國人我非常崇拜(也有些許嫉妒)我所瞭解到的(我的孫子在這裡出生)英國的醫療保障系統。但是我覺得仍有許多可以地方可以通過計算機的協助來改善,例如更好地儲存醫療檔案,更好地描述和視像化綜合的症狀,更好地組合運用統計和視像化的方法,等等,這些都會大大的幫助醫生們迅速而清晰地理解情況。
更不用說計算機能幫助生物學家設計更好的藥物。你所見到的每一個可以改善的地方都需要一個好的程式設計師的協助。我們從來都不會缺乏挑戰性的問題,而且未來也不見得會。
我在前面說過大概50個人裡面會有一個像我這樣的極客,但是我擔心在未來的數年極客會越發的供不應求。我也可能是錯的——也可能下一代會有十分之一的極客,但是我對此表示懷疑。為了讓計算機去完成那些任務,我們非常需要這些身負奇才的人來設計和執行程式。
您覺得,人工智慧上的那個老掉牙的說法是否能最終解決?
我認為我們距離這一怪圈還不是很近,但人類和機器最終仍會一起面臨這個問題。
必須指出,我的同事、史丹佛大學校長John Hennessy曾經說過,五年之內將出現計算機的大崩潰,就像金融海嘯那樣。原因是人們已經變得如此依賴計算機,簡直是沒有它們就活不了了。人類鐵定有一天會忘記了如何做事,而原因正是對機器的過度依賴。我們不記得沒有這些機器的時候是怎樣做事的,這將導致大崩潰。
您曾經說過“今天所有關於計算機的一切都讓我驚喜,沒有一樣東西我是能在三十年前就預測到的”。如果你是一個科幻小說作者,你會對未來五十年做怎麼樣的預測呢?
我真高興你找到了我說的那句話。無論如何,事實就是如此!
悲觀地看,我覺得我們無法解決能源困境,除非有一天出現了能很好處理廢材的增殖反應堆。在十九世紀英國有人提出過一個Jevons悖論。我想他的名字應該是Stanley Jevons。
有人發現瞭如何讓鐵路系統省十倍的煤,結果是鐵路系統因此消耗了一百倍更多的煤。原因是這個改進讓更多的人使用鐵路來運輸貨物。換句話說當你提高了某樣事物的效率,必然導致它吸引來更多的使用者。
你不會說我們需要X那麼多石油來完成我們要做的事情,因為事實上我們如果有更多的石油我們就會去做更多的事情。事實上就是我們的胃口是永遠無法滿足的。因此我覺得我們的能源困境也會持續下去。
樂觀的情形就是因此每個人都將愛上了演算法分析和設計美妙的程式——那不就是一個很好的將來嗎?!
(全文完)
您希望直接對話Knuth嗎?請參與我們的活動。
相關文章
- [翻譯]高德納(Knuth)談計算機程式設計藝術(上)計算機程式設計
- 《計算機程式設計藝術》作者高德納計算機程式設計
- 計算機程式設計藝術計算機程式設計
- 最偉大的計算機程式設計師是如何誕生的?——解讀高德納(Donald E.Knuth)計算機程式設計師
- 《計算機程式設計藝術》出版說明計算機程式設計
- 《計算機程式設計藝術》編輯體例計算機程式設計
- 計算機程式設計藝術 第2卷 (轉)計算機程式設計
- 中文版《計算機程式設計藝術》譯者的回憶 (轉)計算機程式設計
- 談UIView Animation程式設計藝術UIView程式設計
- 《計算機程式設計藝術》叢書新成員計算機程式設計
- 收藏了《計算機程式設計藝術》的卷4A計算機程式設計
- 專家審讀——《計算機程式設計藝術,卷1》計算機程式設計
- 最偉大的計算機程式設計師是如何誕生的?—解讀高德納計算機程式設計師
- 《計算機程式設計藝術 卷3》出版進度備忘計算機程式設計
- 《計算機程式設計藝術 卷1》出版進度備忘計算機程式設計
- 《計算機程式設計藝術 卷2》出版進度備忘計算機程式設計
- 《計算機程式設計藝術 卷4A》出版進度備忘計算機程式設計
- 《程式設計師程式設計藝術》程式設計師
- 程式設計=翻譯?程式設計
- 深入理解併發程式設計藝術之計算機記憶體模型程式設計計算機記憶體模型
- 淺談計算機圖書的翻譯——“增值翻譯”的幾個參考例子 (轉)計算機
- 程式設計藝術家之路程式設計
- 程式設計師和程式藝術家程式設計師
- 圖靈訪談系列之八:對話歸隱的大師——Donald E. Knuth(高德納)圖靈
- Java併發程式設計藝術Java程式設計
- Redux中的程式設計藝術Redux程式設計
- 優秀程式設計的“藝術”程式設計
- [翻譯]Brian W. Kernighan談程式設計語言程式設計
- 《計算機程式設計藝術,卷4A:組合演算法(一)(英文版)》前言計算機程式設計演算法
- 【遊戲設計藝術】淺談心流透鏡遊戲設計
- [冷飯新炒]侯捷談“走出計算機書籍翻譯的誤區”計算機
- Michael Feathers:程式設計的藝術程式設計
- Unix哲學(Unix程式設計藝術)程式設計
- Java併發程式設計的藝術Java程式設計
- Unix程式設計藝術,Unix哲學程式設計
- 程式設計也是一門藝術啊程式設計
- oracle程式設計藝術筆記-1Oracle程式設計筆記
- oracle程式設計藝術筆記-2Oracle程式設計筆記