2007/05/05

音樂與程式

古典樂與流行樂雖然同樣帶給人快樂,但前者的元素豐富、組織精巧,而成其為經典。一般流行樂相較之下結構單純,雖然能讓聽者不花什麼力氣就能享受,卻也無法流傳太久。

程式亦如是。Knuth 曾說:

Some programs are elegant, some are exquisite, some are sparkling. My claim is that it is possible to write grand programs, noble programs, truly magnificent ones!

我相信 TeX typesetting system 就是這樣的程式。程式乃演算法之具體表述,是抽象的計算理論與實體計算機架構交會之處。真正優雅精緻、堂皇高貴壯麗的程式,是將涉及的演算法化為迎合實體機器效率需求的具體實作,並以有條不紊、充滿美感的方式組織成一個整體。當然,理論上無法確保一個程式全無臭蟲,所以測試仍是必要的,然而在那之前若能以邏輯推演證明程式(i.e. underlying algorithm)正確,那會使人對這個程式更加有信心。曾有人問 Knuth "what distinguishes a computer scientist and a computer programmer",Knuth 的前半段回答是

The difference between a computer programmer and a computer scientist is a job-title thing. ... To me, "computer programmer" is an honorable term, but to some people a computer programmer is somebody who just follows instructions without understanding what he’s doing, one who just knows how to get through the idiosyncrasies of some language. ...

我想,要成為一位 "real" programmer,必要條件就是 CS 任督二脈通行無礙。我所說的任脈就是當代電腦的發展脈絡,督脈則是計算理論及衍生而出的演算法設計與分析。一般程式員寫的一般程式雖然有其實用價值,但無法成為經典,情況和古典樂 vs. 流行樂差不多。

Knuth 下面這句充滿霸氣的話就很有「得道程式員」的風範,我很希望哪天也能信心滿滿地說出這種話 XD:

Beware of bugs in the above code; I have only proved it correct, not tried it.

In some way,「資訊系就是學寫程式」這個述句被證成了,不過箇中道理實非外人所想的那麼單純,情況或許和畢派教義「萬事萬物皆可共度」被量子物理證成有類似之處。

--
我記得 Dijkstra 好像也有此類論述,不過我目前的焦點都放在 Knuth 身上,暫時顧不到 Dijkstra XD。

Labels:

Blogger Fall5/06/2007 12:48 am 說:

Knuth最後那句真是豪邁XD
一般人想到「證明」,大概就放棄了

 
Blogger Sophia Chen4/15/2009 12:36 pm 說:

like this post! :D

 

<< 回到主頁