[翻譯]高德納(Knuth)談計算機程式設計藝術(上)
高德納(D. E. Knuth)教授是備受尊崇的系列鉅著《計算機程式設計藝術》(The Art of Computer Programming)和數十篇受到高度讚譽的電腦科學論文的作者。2011年6月,結束了在英國的書籍研討和系列演講的高德納教授,跟BCS編輯Justin Richards暢談了自己的人生和工作。
Elliot 何逸勤 譯
您最廣為人知的成就應該是《計算機程式設計藝術》系列著作了。1999年,這個系列被美國科學家(American Scientist)期刊評選為20世紀最重要的12部理學專著之一。這個系列最初是如何創作出來的?您是如何看待美國科學家期刊的這一評價呢?
這系列書籍大約從1960年代開始創作。那時候,因為沒有合適的資源,所以大家都在重新發明一些已有的東西。我一直都很喜歡寫作,在學校參與報紙和雜誌的工作,認為自己是一個作家。我意識到,需要有人記錄下所有已經發表而我們正在遺忘的優秀思想。
這又要回溯到最初的年代,當時真正研究計算技術的人很可能還不到一千個。我沒有把這看作將要影響世界的事情,但仍然覺得這些很酷的資料是值得認真整理的。
那時候,我就考慮還有什麼人合適寫作這樣的書籍。我能想到的每個人,他們都很可能只會關注自己所研究的那個領域。在我所知道的人當中,只有我自己是沒有發明創造過什麼東西的,因此我設想自己能夠以中立的立場來擔任他們的代言人。坦白說,那就是初始動機,我認為存在那樣的需求。
我寫作這樣的書,還有一個很自然的理由。那就是,我要嘗試將很多人的不同想法結合起來。我會看到,A君以某種方式來分析他的方法A,而B君會以另一種方式來分析與之競爭的方法B。因此,我就要用B君的方式來分析方法A,用A君的方式來分析方法B。
因此,我最終就是以單純分析以上內容的形式來創作書的雛形。很快,我認識到,有些被我捆綁使用的科學方法,在我所受的教育中其實是不允許同時出現的。然而,一次又一次地,我真的看到只有這樣的思維方式才可以正確地闡述問題。
長話短說,很快我也有了自己的不同意見,並且開始發現新東西,這樣就難以繼續中立地寫作了。不過,我仍然嘗試在最大限度內以公允、合理的態度去總結每個人的有價值思想。
至於這本書入選世紀最佳書籍,我還覺得不太好意思。他們把我推到愛因斯坦和費曼的偉大佇列中,而我實際上並不屬於那樣的級別。這可能僅僅是因為他們必須從電腦科學領域選出一個人,而我又沒有太多的競爭者罷了。雖然我也覺得自己在研究領域的努力工作是值得提及的,但這樣把我挑選出來代表電腦科學,總有點關公戰秦瓊的意味了。
是什麼促使您投身電腦科學這個領域的呢?
我天生就是一個電腦科學家——我的頭腦裡有一種組織東西的思維方式,註定讓我成為一個好的程式設計員。我覺得任何人都可以學習使用計算機,但是五十個人裡面大概只有一個人會成為像我這樣的極客。這意味著我們這些人將在這個領域中的不斷創新,並與計算機產生共鳴。我們的思維方式會幫助我們更容易地學習如何製造機器。
您為什麼會認為電腦科學是如此重要呢?
電腦科學之所以重要,是因為它改變了溝通的方式。它還影響了金融業,這是我不太情願提及的。可惜的是,世人是以我和我的同行們對華爾街產生的影響來衡量我們的工作的。在這個意義上,我是很嫉妒天文學家的,因為世人認為天文學家由自己的興趣去研究天文學是值得尊重的。其實,我研究電腦科學也是同樣出於興趣啊。
我對IT這個說法並沒有太大的共鳴,真正打動我的是科學。對我而言,IT是不錯的東西,但並非我所擅長的領域。我的太太就能比我更快地掌握某個圖示的含義、找到要點選什麼地方。但要讓機器完成複雜、細緻的工作,在科學上是有許多難題需要攻克的。我曾經覺得很多問題是無法找到答案的,但事實上我們已經一步步地知道要如何解決它們。對我來說,即便沒有任何金錢上的回報,我也會做這些工作。
所以說您對此充滿激情嗎?
那是,就像每天早上醒來我都會想著今天要好好寫個程式。
您是受到繆斯女神的眷顧了吧?
是啊,有些日子她給予我的靈感要比平常的多。甚至有某個階段,我幾乎認為有個繆斯女神一直在給我口授內容呢。
在您看來,您在電腦科學領域最大的成就是什麼?
我想我的第一個成果是研究編譯器的理論。我曾經研究過代數語言的理論,而在我寫這本書(第10章)的時候,我正試圖描述人們在這個領域的種種發現和成果,然後我突然意識到,可以有一種方法把這些發現和成果都關聯起來。由於這個發現過於新奇,我不知道該怎樣在書裡面闡釋它,於是就把它發表成一篇學術論文。後來,其他的人讀懂了我的意思並開始應用,最終讓這個發現成為了今天所有代數編譯器的分析原理。
不過我覺得我最大的成就是發明了比較演算法優劣的數學方法。為了瞭解一個程式到底好不好,我創造了一種量化的比較方法,例如你可以說一個程式優於另外一個程式2.3倍。這個數學方法叫做演算法分析,是我最引以為豪的學術成就,也是成功應用計算機的關鍵。
當我發明這套數學方法的時候,我跟我的出版商說,不如把這本書改名作“演算法分析”吧。但是他們說不行,這樣的話這書就永遠賣不出去了!但實際上那就是此書的核心內容,它除了綜合總結計算機學者發明的演算法,還幫助我們從量化的角度去評價每個演算法的優劣。
在您的網站上有關於“你為何不用Email”的回覆。“對於那些生活在事務的頂端的人們而言,Email是個美妙的東西。但那不是給我用的,我的角色是在事件的底層。”您是否可以再解釋一下自己對Email的立場,以及“在事件的底層”的含義?
某些人是不能整天聒噪不休的,他們要考慮的事情,需要長時間的專注、對材料進行組織並營造堅實的基礎,而不是僅僅對前沿問題的驚鴻一瞥。將某些內容以精確的形式表達出來,是需要很長時間的。要正確地做好事情,我就必須專注地耗費大量的時間。當我被大家當作權威的時候,世上數不清的人們要來問這問那。因此,用了15年Email之後,我覺得真的足夠了。
之前的一點陣圖靈演講者Grady Booch非常主張程式設計的簡潔性,而您在贏取西班牙“知識邊界獎”的導言中也有相同的論調。您可否解釋一下您為何希望程式保持簡單、緊湊、易懂?
我想我們要先溫習愛因斯坦的名言“要讓它儘可能的簡潔,而又不至於過分簡潔”。事實上並非樣樣事情都存在捷徑,都是簡單易懂的。然而我發現,如果我們有再三思考的機會,幾乎沒有一件事情是不能被簡化的。正因為如此,人們時不時會說:“好吧,基於我們現有的知識,讓我們把舊的東西推到重來吧!”
幾年前在史丹佛有一個名為“清白歷史”的專案,口號是“讓我們找個更好的方法來實現因特網”。當東西被不斷新增進來並且累積一段時間後,你就會發現已經存在太多的垃圾,而這些垃圾現在看來沒有任何理由存在了。
那就像人的闌尾,也許曾經某個時候它是有存在的意義的,但是現在已經不再需要了。我覺得這個專案有潛力,儘管實現的可能性微乎其微,因為整個世界已經離不開現存的因特網了。要一個人跳出來說“讓我們重新設計整個因特網,從把程式匯入計算機開始”,那是非常困難的。這有點像當時Linux的出現,其目的就是嘗試去簡化作業系統。
您跟Grady Booch還擁有另外一個共同點,就是你們都講過你們可以欣賞到程式碼和程式設計中所體現的美,您這樣講的真正含義什麼呢?
我是從幾層不同的含義來看待“藝術”這個詞的。通常,藝術意味著人類創造的某種東西,並非自然的。還有一層含義,那就是賦予美學價值的精緻藝術品。
很多情況下,所謂美感不過是“情人眼裡出西施”。但是,人們會因某個事物本身的優雅和諧調而去創造它,那與評論和欣賞其他人的作品是類似的,我們會覺得自己感受到美。當這個作品達到某種標準的時候,我們會因之而滿足。
對於所謂的“某種標準”,可能Grady跟我的意見是不一樣的,那就如沒有任何兩個人能對哪種音樂是最好的問題達成完全一致的意見。但是,音樂家無疑是清楚自己喜歡和不喜歡什麼音樂的,也很清楚自己什麼時候創造出好音樂。這就很類似我看待程式的方式了。
我想最終都是個人喜好的問題?
的確如此。沒有一個演算法你會在輸入以後問自己:這到底夠不夠漂亮呢?儘管的確有人嘗試去這樣做——美國最偉大的數學家之一George [David] Birkhoff曾經在三十年代寫過一本書,名為“美學衡量”。這本書充斥了形形色色的數學公式,還有一頁滿滿的印著各式各樣的希臘骨灰甕,並在每一個旁邊都給了一個美的評分。
他還給很多不同的設計系統評分。其中比較有趣的是,在他的一百強名單裡面,排行第二還是第三的是萬十字章——他本身是同情納粹的。我想這個圖示的旋轉方向要是反過來,對印度教來說可能有更大的宗教意義。我不認為可以衡量這些東西的美醜,但是他的確這樣做了,而且也有其他人作了同樣的嘗試。
那麼說,還沒有人編出能評判程式的美醜程度的程式囉?
實際上還沒有。有些軟體工程師因評測的需要而嘗試做這樣的事情,我也不是很清楚。大家都知道,像你這樣的記者或作家都有很多題材,你們需要量化數字來充實文字內容。例如,有人在開羅的衝突中喪生,你們就需要弄清楚是300人還是315人,這是新聞報導的必備部分。量化資料可以提升質量。我也在嘗試尋找數字化的方法。不過,實際上軟體工程師試圖衡量的是某個程式設計師的優秀程度。其實他們去問老闆就行了!
我覺得數字的使用是讓人們在心裡面能做個比較,例如20個人在這個事件中喪生,50個人在另外一個事件中喪生,那麼人們通過對比就會覺得後面這個事件更為嚴重。
但這很可能其實是在用蘋果和橙子比較。因為一旦涉及到數字,人們就可能篡改某些資料來扭曲事實。你也可以想象教育學生,總想著學生怎麼樣才能通過考試,然後你就可能會編寫一本關於應試的書,而不是一本關於學習科學的書。
這樣一來一切都是為了在學科考試中獲取高分。然而問題是這些數字評分並不是總能很好的反映事物的本質。當你把一些事情量化了,假如你想的話你總是可以找到作弊的方法,因而也最終忘記了學習的初衷。
您希望直接對話Knuth嗎?請參與我們的活動。
相關文章
- [翻譯]高德納(Knuth)談計算機程式設計藝術(下)計算機程式設計
- 《計算機程式設計藝術》作者高德納計算機程式設計
- 計算機程式設計藝術計算機程式設計
- 最偉大的計算機程式設計師是如何誕生的?——解讀高德納(Donald E.Knuth)計算機程式設計師
- 《計算機程式設計藝術》出版說明計算機程式設計
- 《計算機程式設計藝術》編輯體例計算機程式設計
- 計算機程式設計藝術 第2卷 (轉)計算機程式設計
- 中文版《計算機程式設計藝術》譯者的回憶 (轉)計算機程式設計
- 談UIView Animation程式設計藝術UIView程式設計
- 《計算機程式設計藝術》叢書新成員計算機程式設計
- 收藏了《計算機程式設計藝術》的卷4A計算機程式設計
- 專家審讀——《計算機程式設計藝術,卷1》計算機程式設計
- 最偉大的計算機程式設計師是如何誕生的?—解讀高德納計算機程式設計師
- 《計算機程式設計藝術 卷3》出版進度備忘計算機程式設計
- 《計算機程式設計藝術 卷1》出版進度備忘計算機程式設計
- 《計算機程式設計藝術 卷2》出版進度備忘計算機程式設計
- 《計算機程式設計藝術 卷4A》出版進度備忘計算機程式設計
- 《程式設計師程式設計藝術》程式設計師
- 程式設計=翻譯?程式設計
- Rust 翻譯計劃——網路程式設計 curl 庫 (上)Rust程式設計
- 深入理解併發程式設計藝術之計算機記憶體模型程式設計計算機記憶體模型
- 淺談計算機圖書的翻譯——“增值翻譯”的幾個參考例子 (轉)計算機
- 程式設計藝術家之路程式設計
- 程式設計師和程式藝術家程式設計師
- 圖靈訪談系列之八:對話歸隱的大師——Donald E. Knuth(高德納)圖靈
- Java併發程式設計藝術Java程式設計
- Redux中的程式設計藝術Redux程式設計
- 優秀程式設計的“藝術”程式設計
- R語言程式設計藝術 第2章 向量(上)R語言程式設計
- [翻譯]Brian W. Kernighan談程式設計語言程式設計
- 《計算機程式設計藝術,卷4A:組合演算法(一)(英文版)》前言計算機程式設計演算法
- 【遊戲設計藝術】淺談心流透鏡遊戲設計
- [冷飯新炒]侯捷談“走出計算機書籍翻譯的誤區”計算機
- Michael Feathers:程式設計的藝術程式設計
- Unix哲學(Unix程式設計藝術)程式設計
- Java併發程式設計的藝術Java程式設計
- Unix程式設計藝術,Unix哲學程式設計
- 程式設計也是一門藝術啊程式設計