2007/02/02

大二上回顧

大二上成績剩下公民教育和離散數學還沒出爐。前者預估最佳 7x,被當也不是不可能 XD,至於後者應該沒什麼問題。一邊等成績出來,一邊把本學期回顧寫一寫。有些科目的感想已經在以前說過了,就不詳述。

大一的定位算是尋找方向,大二(到大三,甚至到大四)的目標就是奠定基礎了。奠定基礎不只要貫通 Computer Science 既有的脈,邏輯推理、哲學思考、正確而堅強的人生觀等後勤思維都要準備好。就這些項目而言,高等微積分實在惠我良多。高等微積分聰明預告是「數學系的招牌課」,金次開門見山說「要點通數學的脈」,原因無他:高等微積分的內容是近代數學相當耀眼的成就,不僅是微積分的深度探索,更是數學思維模式的經典主題。猶如 Taylor theorem 由一點窺全局一般,高等微積分如果念好了,對數學背後的 philosophy 會有很不錯的認識。至於老師更不用說,金次又是一個完全符合我心中典型的老師。不厭其煩讓我再引一次《傳承》,金次再次證明我心中的師道典型的確存在,相當期待下學期與金次的重逢 :)。

Computer Science 方面也收穫豐盛。理論方面,隨機客的資料結構與演算法很有技巧、很有熱情地初步提起 CS 我稱為督脈的那條理路。督脈上另一科自動機與形式語言沒怎麼跟著顏老走,主要靠自己念 Sipser,也有了初步的認識。自動機與形式語言我曾在期中考後說似乎偏離了課名,其實沒有,因為處理 regular languages & context-free languages 的還是 Turing Machine,那就很有必要了解 Turing Machine 的計算能力和計算的複雜度。One problem remains unsolved: How can we be so sure that Turing Machine is the most powerful computation model, i.e. that the Church-Turing thesis is justifiable? 這個論題可能如此辯護:若不然,你能舉出更強力的計算模型嗎?但這在邏輯上不足以完成證明。Sipser 處理這個問題的方式是

Practice with lower level Turing machine descriptions helps you understand Turing machines and gain confidence in using them.

也就是說,讓你試幾個演算法,對 Turing Machine 的能力有些直覺,然後根據 Church-Turing thesis 發展下去。但金次說的話仍縈繞於耳:「其實你不知道。你只是聽說了,你接受了;接受了,你就認為你知道。」這在我看來是極端恐怖的事情。另一方面,數學上意欲建立的公理化邏輯演繹系統也遇到麻煩。我也在這學期終於恍然大悟,或許想用有窮公理推導出無窮定理恐怕太過 naïve 了。但數學上一直是用有窮掌握無窮,我們要怎麼用無窮(而且不知道這無窮有多無窮)掌握無窮?

拉瑪錢德朗醫師在《尋找腦中幻影》裡提到一個左側忽略症的病例和試圖治療的過程,讓病人從右側的鏡子看到左側世界的倒影,然後要病人去抓左側的筆。出乎意料,病人並沒有因此而意識到左側世界的存在,而是猛然往鏡中抓筆,甚至想繞過鏡子找筆。對於此類病人,壓根沒有「左邊」這個向度,因此即使他們熟知鏡子的物理原理和現象,也沒辦法往他們無法意識到的那個向度伸展。這簡直令人毛骨悚然,推廣一下,怎麼可能突破那些根本意識不到的限制?又,軟體工程的核心道條之一就是 abstraction,Booch 在《Object-Oriented Analysis and Design with Applications, 2/e》裡面提到因為人本身能同時處理的資訊量有限,因此必須以 abstraction 的思惟方式面對 complexity。但人腦和諸多現象,例如 "Complexity" 在研究的那些東西,看起來沒辦法單純用 abstraction 掌握。It seems like we need some new other method to cope with the new problems we've discovered. 但人有辦法運用那些方法嗎?會不會壓根我們就無法處理那些問題,如同 Turing Machines 面對 halting problem 一般無能為力?和以往一樣,這些問題先擺著,因為基礎能力還沒累積到能試圖解決這些問題的程度。我也覺得這問題有生之年看不到解答,頂多一些零碎郵票式的成果。Computer Science 也差不多,因為它實在太年輕,郵票還蒐集不全。要在我們這個年代想發展出比較上層的理論應該相當吃力。

回到 CS 任脈,計算機組織與組合語言一舉貫通從高階語言到數位邏輯的理路,引路人是上起課來精彩程度和語速不相上下的 cyy 以及收納此段精華的 TOY machine。後來做 TOY86 project 這麼瘋狂,也是因為這段經驗實在太令人興奮,尤其到 instruction datapath 那邊,由下(digital logic)而上的脈和由上(high-level languages)而下的脈豁然接通這種難得經驗,也是驅使我描出那四十條線的強大動力。當然,事實上還沒完全通,還有編譯器和作業系統的理論不熟,因此寒假計畫之一就是讀這兩項,不過基本上已經不會太窒塞了。TOY86 simulator 基本上算是滿意的作品,雖然架構未臻完美,不過看得出進步。最讓人快樂的一個時間點就是意識到範式之王 Model-View-Controller 悄悄浮現的時候 :)。這時候一定要引 Donald E. Knuth 在〈Computer Programming as an Art〉的一段話:

我的感覺是,我們準備一個程式時,就如同創作詩篇或樂章;如Andrei Ershov 所說 [9],編程能給予我們智慧上和感情上的滿足感,因為那是「駕馭複雜性」和「建立具有一致規則的系統」的真正成就。

這篇文章裡面還有另外一段和 TOY 滿有相關的話:

關於美學滿足感,我注意到一件特別引人好奇的事情 ─ 當我們以有限工具完成某事時,我們的愉悅程度會顯著提升。 … 今日我們教導編程時,有個奇特的事實:我們很少能捕獲計算機科學學生的心,直到他修了一門課程允許「動手做」,實地操作一部小型電腦。我們的大型(large-scale)機器及其精緻的作業系統和語言看起來實在不能挑起任何對編程的喜愛,至少一開始不能。

經此一役,也對 GUI programming & concurrent programming 少一點恐懼感。And, of course, the grade :P. 能夠全力投入心血並獲得成果是極大快樂,而這成果又能被別人(高度)認同更是極大快樂 :)。這次 project "somehow" 也大致確認我的 programming skill 沒衰退,畢竟我希望成為的是像 D. E. Knuth 那樣不特別偏廢工程和科學任一方的 programmer & computer scientist :P。

大二下,繼續奠定基礎嘍。

--
其他的零碎心得在先前應該或多或少都提過了,就不提啦 XD。

Labels: , ,

Blogger yen32/02/2007 5:26 pm 說:

加油吧,我的朋友~

 
Anonymous Anonymous2/02/2007 6:59 pm 說:

完全是嘴破不能言語所以投諸鍵盤呀XD

 

<< 回到主頁