Computer Science算不算Science?

Posted by Mr. Saturday

前一陣子跟一位老前輩聊天,談論到computer science這個年輕卻充滿活力的學門。老前輩提到電腦科學這種東西,其實不能真正算是一個科學。為什麼呢?因為科學是追求永恆不變的真理的,這些真理的永恆價值不會隨著時間而改變,無論經過一百年或是一千年。反觀computer science,常常一些技術的出現和發展是短暫的,往往幾年之內會被更新或是淘汰。老前輩說道,要是Google沒有在當時發展出Pagerank,搞到現在才推出搜尋技術的話,那麼根本是枉然,也不會有今天的Google。所以他覺得電腦科學不算是在追求真理的「科學」。

聽到這番話,我覺得很有意思,心中馬上跳出一個想法:「這番話給那些電腦科學家聽到,第一個跳出來反對的一定就是Knuth了。」其實對於電腦科學是否真的是一門科學的爭論,在Knuth之前就已經開始了,早期大家一般認為搞電腦的人,頂多可以把自己研究的學問稱之為「電腦工程」,而不應該稱為電腦科學,因為早期的電腦工程師給人的感覺不過是寫寫程式,搞些電腦的架構罷了,比起科學的追求真理,似乎是八竿子打不著邊。不過在Knuth出現之後,大家認為是他真正把電腦科學變成了一門科學,主要的原因還是在於他為演算法的研究建立了一套基礎相當穩固且紮實的數學理論,Knuth不僅僅是傑出的programmer,同時也是世界聞名的數學家和演算法的專家。他的經典巨著The Art of Computer Programming裡頭寫的是他畢生研究演算法和程式設計的精華,電腦科學家的書架上一定都要買一套來擺在書架上當作聖經膜拜一番。

Knuth早在1968年,也就是他不過30歲時就已經把這套書籍的第一本寫完,如今又過了將近40年,Knuth已經完成了三本,第四本於近幾年也即將推出。Knuth幾十年的精力全數灌注於這幾本書之上,四十多年來只寫了三本,其寫作之嚴謹及講究程度,可見一斑。這套書籍也在1999年被American Scientist評選為世紀十二大科學書籍之一,與愛因斯坦的相對論齊名。可以說,這一套書籍讓電腦科學從此以後真正變成了一門科學。當然,這套書籍的高難度也是世間少有,Bill Gates甚至在這套書籍作了推薦:「如果你能讀懂這本書裡頭所有的東西,立刻把履歷表寄給我!」

以我個人的觀點來看,其實電腦科學早就已經是一門科學,演算法的研究本身不僅牽涉到嚴謹的數學理論,TuringGödel對於計算理論和數學完備性的研究,其實都是電腦科學的基石。一般人對於電腦科學常常有所誤解,其實電腦科學不僅僅只是寫程式而已,只寫程式充其量只能夠稱為computer engineering。現在的computer science其實已經演變成一個跨學門的領域,而且其中的各個子領域也整合了相當多不同的數學進來。簡單舉例來說,Robotics中談到的mechanics部分都是在討論幾何轉換的數學還有力學;Computer Graphics的部分則是相當倚重於矩陣運算;Computer Vision則是把訊號處理的數學應用得相當廣泛。其他領域的數學更是不勝枚舉。至少,學習這些東西的難度,比起學習純粹的物理和化學等純粹科學,似乎一點都沒有比較簡單!

我想我只有一個簡單的結論,就是電腦科學本身是相當重視實踐的一門科學,就像是物理和化學需要做實驗一樣,電腦科學也需要寫程式來做為另一種形式的實驗。兩者的研究精神其實都是相類似的,從這些研究衍生出來的新技術,在一般創業家眼中,在市場上有所謂的時效性,但是演算法本身,也絕對是不會因為時間的流動而喪失其價值的。大家認為呢?

喜歡這篇文章嗎? 分享出去給作者一點鼓勵吧!