2010年7月22日 星期四

範文?駢體文?八股文?

前日,學測公佈了一篇得滿分的作文,評語是「感情抒發非常有張力,組織結構、起承轉合也很好...」

可是我自己看這一篇文章的時候覺得這一篇文篇華而不實,空有華麗的修辭,然而打動人心的部分甚至比朱自清的背影還少的很多。當然,這位同學的寫作水平很高應該是事實(但有一種補習班教出來的感覺),拿滿分應受之無愧,但是我不太能接受這樣的文章被選為範文。

我記得我的高中老師曾經印了全國寫作比賽第一名的文章給我們看,我和一些同學都認為這篇文章雖然寫得很美,但應該也算不上什麼好文章。不過事實上老師別有用心,在第一名作文的背面,老師印了另一篇社論:為什麼第一名的文章雖有優美的修辭、嚴謹的結構,然而卻有「為賦新辭強說愁」的感覺,明明才十七八歲,就有歲月不待人之類的感嘆...?

我的國文一向不好,不過高中課文中,我還蠻喜歡劉勰的《文心雕龍》〈情采〉。這一篇提到:「是以衣錦褧衣,惡文太章;賁象窮白,貴乎反本。」我自己讀到這一段是深表認同的!我讀的文學類書籍雖然不多,然而所有讓我感動過的文章,都沒有這種誇張到不行的修辭。不過我們閱卷老師似乎很吃這一套,還選出來當範文,這不是另一種駢體文嗎?我們的韓愈什麼時候才能出現呢?

唉... ,除了大環境我沒啥好說。

2010年7月14日 星期三

FLOLAC 2010 感想

我最早是從柯學長那裡聽說 FLOLAC 暑期學分班的,根據柯學長的說法 FLOLAC 給他很大的啟發,所以今年我也去報名,想要想想「程式言語」道底是長什麼樣子?經過了二個星期,我覺得確實大開眼界看到了很多不一樣的東西!以下我就分別介紹這二個星期的課程:
  • Logic 邏輯 - 在這個課程之內,我學到了 Propositional Logic 與 Calculational Logic,還有 Functional Complete 的概念,與 Functional Complete 的證明(事實上,Sum of Product 應該只可以當結果,我們要證 Functional Completeness 要先確認 Propositional Letter 再做 Structural Induction)。除此之外,我還學到了 First Order Logic、Sequent Calculus、Peano Axioms 與 First-order Logic 能力的極限等等很有趣而且過去沒有聽過的東西。
  • Functional Programming 函數編程 - 這應該是眾課程當中,我比較熟悉的一個。不過這一門課是教 OCaml (而不是我比較熟悉的 Haskell)。老師就從 Binding 的概念開始,一路介紹到怎麼寫一個函數(遞迴的),還有 High-order Function。另外,還有介紹到 OCaml 之中比較特別的 Parameterized Modules。所謂的 Parameterized Modules 是一個比較特別的 Module,只要你代入幾個參數,Parameterized Modules 會生產出一個新的 Module。我在上這一段的時候,心底想的是 C++ Template 與 Meta-programming。其實感覺起來還蠻像的!XD 不過這一門課的比重偏低,是比較可惜的地方!Folding/Unfolding 的部分就只有快速帶過而己,有一點可惜。
  • Operational Semantics 操作語意 - 這個課程是從「操作」的角度來向我們介紹語議。這樣講有一點抽象,簡單地說就是告訴我們要怎麼做才可以達到某個語意。例如:If、While、Assign 等等。這個課程主要又分成二個部分:Natural Semantics 與 Structural Operational Semantics。前者專注於大的概念,所以在 Composited Statement 當中,我們不會考慮比較小的 Statement 的情況,然而在 Structural Operational Semantics 我們會考慮不少細微的變化,包括平行程式執行起來可能會產生的差異等等。
  • Program Construction and Reasoning 程式建構與推理 - 這一門課是在教我們怎麼寫一個正確的程式,並且在建構一個程式的同時證明其正確性。在這一堂課當中,我們會用到 Hoare Logic。透過 Precondition、Postcondition、Loop Invariant 還有一些 Rules 讓我們可以知道程式是不是正確的。另外,穆老師還提到了 Goto Considered Harmful 的大論戰等等很有趣的東西!
  • Frama-C - Frama-C 是一套可以幫助我們驗證 C 程式寫得對不對的軟體。不過 Frama-C 本身沒有那麼厲害,有時候我們還是必須要加入一些參數,讓參數引導證明!在 Frama-C 這一堂課就會用到 Hoare Logic 與 Loop Invariant 的概念。不同之處在於我們會親自驗證別人寫得程式!所有我們用來練習的程式碼都是取材自開放原始碼的程式,而且真槍實彈地去找 bug。不過我自己覺得要驗證別人的程式好麻煩,尤其是不知道作者的意圖的時候。不過話說回來,或許我會用 Frama-C 驗證我自己的程式。
  • Denotation Semantics 指稱語意 - 這堂課和 Operational Semantics 一樣,是在探討程式的語意。然而不同的是 Denotational Semantics 比較在乎函數的 Composition,所有的 Statement 都被理解成更簡單的 Statement 的 Composition。在這個課程當中,我學到了所謂 Recursion 其實是尋找更高一層函式的 Fix Point,這對我來說是一個很特別的想法!過去我想到 Recursion 只會想到 Stack 與 Calling convention 之類的東西。
總體來說,FLOLAC 2010 非常精彩,而且學到了很多不同的東西!雖然有人開玩笑地說 FLOLAC 2010 是夏日裡的煉獄,不過我個人的感覺是:在考試之前,都只是適量,不過考試嗎... 別再提了。

但是總結來說,FLOLAC 2010 兩個星期的課程值回票價,我很喜歡!