2006/08/22

先睹為快

《視計算機編程為一門藝術》(譯自《Computer Programming as an Art》)目前進度約 57%,摘錄一些有趣句子,供各位先睹為快 XD:

  • 單獨一門藝術的地基,常需要數門科學方能形成。這是人類事務的複雜性 ─ 欲使一件事情得以完成(done),常常需要理解(know)很多事情的本質和特性 … 一般而言,藝術由科學的事實組成,這些事實以「對於實踐最為方便的次序」安排,而非依照「對於思考最為方便的次序」。科學群聚並安排其事實,以讓我們從一個角度儘可能察看宇宙的一般秩序。藝術…結合科學領域中彼此最為疏遠的部份,以及關於「the production of the different and heterogeneous conditions necessary to each effect which the exigencies of practical life require」的事實。
  • 科學的優勢在於它使我們不需要透徹思考每個獨立案例;我們可以將思考轉向較高層次的概念。如 John Ruskin 在 1853 年所寫 [32]:「科學的工作是以事實替代表象,以論證替代印象。」
  • 在我看來,如果我所讀過的作者在當今寫作,他們會同意以下的特性描述:科學是我們透徹理解的知識,透徹到我們能將之教導給電腦;而如果我們未完全了解某件事,處理它便是門藝術。既然演算法或電腦程式的概念提供我們一個極為有用的測試,檢測我們對於任何給定主題的知識深度,從藝術到科學的過程就代表我們學會如何令某件事自動化(how to automate something)。
  • 我們所學關於編程的任何事情都將幫助我們增進本身的藝術技巧。在這層意義上,我們應該持續努力將每一門藝術轉型為科學:過程當中,我們也使藝術進展。
  • 我們的討論指出編程目前既是科學也是藝術,而且兩個面向巧妙地補足彼此。顯然大部分審視此問題的作者都得到同一個結論,他們的科目既是科學也是藝術,無論他們的科目為何(cf. [25])。
  • 然後我發現一本可愛的小書名為 The Gentle Art of Mathematics [31],這讓我有點傷心,因為我不能誠實地描述計算機編程為 "gentle art"(高貴的藝術)。
  • 在我提及的所有書籍中,Mueller 的書最接近於表述我今日談話想提出的中心主題,根據我們現今理解這個字的意義 ─ 真正的藝術技巧 ─ 詮釋此字。他觀察到:「一度人們認為藝術家的觀點對於科學家是致命之物。而科學的邏輯看似抹殺所有可能的藝術幻想力之飛馳。」他接著繼續探討科學和藝術的合成實際上所導出的優勢。
  • 當我談論「視計算機編程為一門藝術」時,我主要是將之視為一種藝術形式(art form),以美學的觀點視之。身為教育者和作者,我的書籍的主要目標是幫助人們學習如何撰寫優美的程式。正因為這個理由,我得知最近我的書籍真的出現在康乃爾大學的美術圖書館時 [32],感到特別高興。(然而,那三集顯然整潔地擺放在書架上而全無使用痕跡,所以我擔心圖書館員可能犯了錯誤,照字面意義詮釋書名。)
  • 我的感覺是,我們準備一個程式時,就如同創作詩篇或樂章;如 Andrei Ershov 所說 [9],編程能給予我們智慧上和感情上的滿足感,因為那是「駕馭複雜性」和「建立具有一致規則的系統」的真正成就。
  • 更甚者,當我們閱讀他人的程式,我們可以認出其中一些是真正的藝術創作(genuine works of art)。我仍記得 1958 年閱讀 Stan Poley 的 SOAP II 組合語言程式時的那股巨大興奮感;你或許認為我瘋了,而且自那時到現在風格也確實改變了很多,但當時那對我意義非凡,讓我見到一個系統程式能夠有多麼優雅(elegant),特別是和同時期我所研讀的其他拙劣程式碼相比。寫出優美程式的可能性(即使用的是組合語言)正是最先讓我一頭栽入編程的理由。
  • 有些程式優雅,有些精緻,有些閃耀著光芒。我的主張是,堂皇的程式、高貴的程式、真正壯麗的程式,都可以寫得出來!
  • 我的目的是傳達編程的良好品味和風格的重要性,(但)所呈現的特定風格要素只是用來展示一般能從「風格」獲得什麼好處。在這方面,我覺得類似於音樂學院裡教導創作的老師:他並非教導他的學生如何創作一部特定的交響曲,而必須幫助他的學生找到他們自己的風格,並向他們解釋那代表什麼。(一直是這個類比促使我談論「編程藝術」。)

以上全是未定稿,subject to change :P。

--
譯不出來的部份還請提供意見 XD。