編程就是一種藝術_編程

來源:互聯網
上載者:User

唐納德·克努特認為電腦既是一種科學,更是一種技術,他的一生幾乎都花在了“藝術”上。

有評論認為《電腦程式設計的藝術》(The Art of Computer Programming)的作用與地位可與數學史上歐幾裡得的《幾何學原理》相比。它的作者唐納德·克努特 (Donald Ervin Knuth)因而榮獲1974年度的圖靈獎。

 

藝術與科學

如果回到拉丁的根源,可以找到ars、artis這些詞,表示“技巧”。現在當人們談起“藝術”時,大概首先會想到的是“美術藝術”,例如繪畫和雕塑,但是在20世紀之前,一般來說,這個詞是以十分不同的意義使用的。

中世紀時,成立了一些大學來講授7門所謂的“文科”,即文法、修辭學、邏輯、算術、幾何、音樂和天文學。這和今天的文學院的課程表十分不同,在7門課中至少有3門是電腦科學的重要組成。那時,一門“藝術”是指由人的智力設計出來的某種東西。它是相對於從自然或本性匯出的活動的。在中世紀時,“藝術”本身通常指邏輯,它通常又指對三段論法研究。

在唐納德·克努特看來,電腦程式設計現在既是一門科學,也是一門藝術,而這兩方面彼此很好的相互補充。科學的方法一般是通過邏輯的、系統的、非個人的、冷靜的、理性的這些詞來表徵的,而藝術的方法是通過藝術的、創新的、博愛的、渴望的、非理性的這些詞來表徵的。這兩種看起來互相衝突的方法相對於電腦程式設計來說有很大價值。

唐納德.克努特對《電腦程式設計的藝術》系列的寫作,開始於他念博士期間,計划出七卷,第一卷《基本演算法》於1968年出版,第二卷《半數字化演算法》於1969年出版,第三卷《排序與搜尋》於1973年出版,第四卷《組合演算法》尚在寫作之中。

當唐納德·克努特談及電腦程式設計作為一門藝術時,他主要認為它是一種藝術形式。作為教育家和作者,他的工作的主要目標是協助人們編寫漂亮的程式。“我的感覺是,當我編寫一個程式時,它可能是像寫詩或譜曲一樣。”安德烈·埃夫曾說過,程式設計可以給我們智力和情感上的滿足,因為它是掌握複雜性和建立一個一致的規則系統的實際成就。

有些程式是優雅的,有些是精巧的,有些是才華橫溢的。他的斷言是,有可能來寫莊重的程式、高尚的程式、真正輝煌的程式。

當他同邁克爾·費希爾討論這個問題時,他提議:如同藝術作品那樣,電腦程式員應該開始出售自己的原始程式,給那些收藏家。

《電腦程式設計的藝術》系列以其內容的豐富和深刻而被喻為經典,有人甚至稱之為“電腦的聖經”,它們被譯為俄、日、西、萄、匈牙利、羅馬尼亞等多種文字在世界各國廣泛流傳,其發行量創造了電腦類圖書的最高記錄,直至20世紀80年代中期,都一直保持著月銷售量每卷達2000冊的勢頭,成為Addison-Wesley 出版社成立以來銷路最好的圖書。

 

為了藝術改造排版技術

唐納德·克努特對《電腦程式設計的藝術》系列的撰寫可謂是前緊後松,為什麼到了第四卷就有了長期停頓呢。原來,前三卷書出版以後,克努特覺得當時十分粗糙的排版水平已經影響到《電腦程式設計的藝術》的印刷品質。於是他決心對排版技術進行徹底改造,因此中止了《電腦程式設計的藝術》系列的編寫。

他原本以為他只需要半年時間,在1978年下半年就能完成,但最終他用了8年時間,直到1985年TeX排版軟體才最終停止修改。

TeX的第一版是用SAIL程式設計語言寫成的,運行於PDP-10型電腦,作業系統是斯坦福大學的WAITS作業系統。在之後的TeX版本中,克努特發明了所謂的“文學編程”(literate programming),它是一種從同一源檔案自動產生可編譯的原始碼和高品質的文檔的編程方法。這種語言被稱為WEB,它所產生的原始碼是使用Pascal程式設計語言。

TeX的版本號碼也十分有趣。從TeX第三版開始,之後的升級是在小數點後加入一個新數位,使之越來越接近圓周率/pi的值。TeX目前的版本是3.141592。這顯示了TeX已經十分穩定,任何的升級都十分細微。克努特曾表示“‘(於我過世後的)絕對最後改變’為把版本數改為/pi,那時任何餘下的漏洞都成程式的點綴了。”

TeX是非常穩定的程式,克努特懸賞獎勵任何能夠在TeX中發現程式漏洞(bug)的人。

每一個漏洞的獎勵金額從1美分開始,並每年翻倍,直到目前的327.68美元封頂。然而克努特從未因此而損失大筆金錢,因為TeX中的漏洞少之又少,而真正發現漏洞的人在獲得支票後,寧願將其裱起來留作紀念也不願拿去兌現。TeX的最後一個bug已經被克努特自己發現了。

在設計TeX的同時,克努特 還設計了一個字型產生程式MetaFont。MetaFont是獨立於TeX之外的,但又與TeX有著非常密切的聯絡。MetaFont產生的只是位元影像字型,當對字型進行縮放時的效果不佳。

TEX排版軟體和METAFONT字型設計軟體花費了克努特整整9年的時間和精力。它們對整個西文印刷行業帶來了革命性變革。但是這兩個軟體並沒有為克努特和斯坦福大學賺過一分錢:克努特把它們作為自由軟體無償提供給使用者。“我寫這兩個程式是出於對書籍的熱愛,也想給這個領域以必要的推動。我已經有些名氣了,我的書賣得也不錯。所以我不需要為我出於熱愛而做的事保留專賣權。此外,數學家通常是不為他們發現的定理擷取報酬的”。

3卷本的《電腦程式設計的藝術》

唐納德·克努特介紹

唐納德·克努特是演算法和程式設計技術的先驅者,是電腦排版系統TEX和METAFONT的發明者。他是斯坦福大學電腦程式設計藝術的榮譽退休教授。唐納德.克努特獲得了許多獎項和榮譽,包括美國電腦協會圖靈獎(ACM Turing Award),美國前總統卡特授予的科學金獎(Medal of Science),美國數學學會斯蒂爾獎(AMS Steele Prize),以及1996年11月由於發明先進技術榮獲的極受尊重的京都獎(KyotoPrize)。

克努特的著作很多,除了已由Addison-Wesley出版社出版的三卷The Art of Computer Programming(由管紀文、蘇運霖等譯成中文,國防工業出版社出版),介紹TEX和METAFONT的五卷《電腦與排版》(Computers and Typesetting)早已流傳於世外,還有以下一些主要著作:

《超現實數》(Surreal Numbers,Addison-Wesley,1974);

《實用數學》(Concrete Mathematics,Addison-Wesley,1989);

《數學論著集》(Mathematical Writings, MAA,1989);

《用於演算法分析的數學》(Mathematics for the Analysis of Algorithms,Birkhauser,1990,第三版);

《作文式程式設計》(Literate Programming,CSLI,1992);

《公理與外殼》(Axioms and Hulls,Springer,1992);

《斯坦福的GraphBase:組合計算用的平台》(The Stanford GraphBase: a Platform for Combinatorial Computing,ACM pr.,1993)。

其中,《超現實數》一書介紹了劍橋大學的康韋(J. H. Conway)所發明的一種新的數制,是克努特聽了康韋向他作的介紹後,用了一周時間寫成的小說體裁的作品。有評論家指出,這是曆史上第一次一個重大的數學發現以小說的形式向公眾進行介紹。由此可見,克努特的藝術才華同樣是非凡的,要不是電腦深深吸引了他,克努特很可能會成為出色的小說家或音樂家。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.