網頁

2018年3月12日 星期一

認識Scheme

   兒子大二下學期程式設計選了一門"LISP程式設計",這門課選用的語言是 Scheme,
是 LISP 的其中一個方言,應該對大多數人都蠻陌生的吧,因為它的確不是業界主流的程式
語言。老實說,我比較希望他能選一些Python或是Java的課程,畢竟將來是要靠這些"吃飯"的。

   剛剛有提到Scheme是LISP的方言,是1975年誕生於MIT人工智慧實驗室的一門程式語言。
那Scheme是一個怎麼樣的程式語言呢?
簡單來說Scheme是一種函數語言程式,意思是說,盡量把所有的函數都想成/寫成數學上的函數。
如果說Python 裡所有東西都是物件;那Scheme裡所有東西都是函數。

   約耳談軟體在2005年曾發表過一篇《The Perils of JavaSchools(爪哇學校的危害)》,
就談到不少 Java 不適合作為「First Programming Language」的問題,如果 Java 不適合
初學者,那有什麼更好的語言適合教學嗎?Joel Spolsky 的建議是 Scheme,這個主要用於
人工智慧領域的古老程式語言,Scheme 當時是 MIT 等多所名校 Computer Science 系所
的必修課程。而他們所使用的教材就是這本「SICP」。
(註:MIT 之所以從 SICP 轉換到現在的Python課程編制(2008),是因為他們重新規劃了學習
的主軸。)

  「SICP」是 Structure and Interpretation of Computer Programs 的簡稱,又稱為
魔法書。是當年 MIT 赫赫有名的 6.001,是 EECS 的入門課,而這本書也影響了後續許多 CS 
的教材,甚至影響了很多以寫程式為工作或是以此為興趣的人,MIT電腦科學課程用這本書
當教材足足用了30年。

   相較於C/C++,Python 等等這些主流的語言,教材的資源也相當多,而台灣坊間Scheme 的
資源卻是少之又少,教授上課所用的Scheme 教材是SICP線上英文版,我找來找去發現對岸
的相關簡體書還蠻多的,就買了一本來看看。

為什麼這本書對於「CS 入門」來說具有革命性的意義? 主要有下面兩點:
.只專注一件事:計算的本質
.使用 Scheme 當作主要的語言

   通常,Computer Science 相關的入門課程,可能會花上很多時間在熟悉某個「程式語言」
上面,而不是去了解程式本身;又或者是有了大量的類比,來介紹電腦是個怎麼樣的東西;
但是 SICP 只專注一件事,那就是計算的本質這件事。

程式語言專家、大評論家王垠說:
    編程不過是一門失傳的藝術的別名,這門藝術的名字叫做"思考"。 —— 王垠

   兒子在剛上大學的時候我再三叮嚀他一定要把 C語言學好,因為 C語言學好了再學其他語言就
會非常容易好上手,學習不同語言其實就是換個思考方式來實作;
但如果以為學好C 就一定能學好Scheme嗎? 看看書中的內容比我想像中還要難尤其是遞迴
(Recursion),我們常說"換了屁股就換了腦袋",面對Scheme真的要換個思考(腦袋)方式才
能寫出優雅的程式。

既然這樣就好好的修這門課,試著用不同的思考方式來解決問題吧。
 
L. Peter Deutsch程式設計師說過一段經典名句:
"To iterate is human, to recurse, divine."
有人翻成: 
"遞迴(recurse)只應天上有, 凡人該當用迴圈(iterate)"



沒有留言:

張貼留言