SICP與編程之道
SICP(Structure and Interpretation of Computer Programs)是MIT給電子和信息類專業(yè)的本科生開的入門課程,如書中開篇所說,它所著眼的不是具體介紹某一種編程語言,也不是針對特定的問題提供優(yōu)化的算法。這與一提到計算機類的課程,我們往往會想起的C語言程序設(shè)計、數(shù)據(jù)結(jié)構(gòu)等等都不一樣。這本書其實更偏向于開發(fā)程序的“道”,而不是“術(shù)”。
關(guān)于這個“道”,其實也不是需要很復(fù)雜的語言才可以闡述的。一個偉大的念頭,應(yīng)該都是可以簡單地說清楚的。當然,為了實現(xiàn)它,需要持之以恒的努力,以及應(yīng)對現(xiàn)實問題的無數(shù)技巧。這個道,簡單來說,就是“抽象”。
關(guān)于抽象,其實用生物體來做部分,是最形象不過的了。我們知道,組成生物的最小單元是細胞,細胞可以分裂、凋亡、代謝、與內(nèi)環(huán)境交流物質(zhì),這些是基礎(chǔ)的功能。我們?yōu)榱藢崿F(xiàn)一個特定的功能,就需要把細胞整合起來,形成組織,這樣我們就有了上皮組織、肌肉組織等等。為了得到能完成更復(fù)雜任務(wù)的能力,各種組織會聯(lián)合起來,形成器官,例如胃、肝臟。這些器官會被整合起來,形成系統(tǒng),例如消化系統(tǒng)。最后,這些系統(tǒng)合在一起,形成了一個生物。
這就是一個由下而上建立起復(fù)雜系統(tǒng)的案例。細胞是最底層的,組織是建立在細胞之上的一個層次,研究器官時我們關(guān)心的是組織的結(jié)合方式,研究系統(tǒng)時我們則只關(guān)注器官的結(jié)合方式,而最終研究生物體的時候,我們更多時候會關(guān)注它是怎樣呼吸、怎樣相應(yīng)外界刺激,這就是從系統(tǒng)的層面來研究的。越往上,我們關(guān)心的東西就越高級,也越抽象。
LISP,就是一個像生物一樣的語言,在你編寫的時候,它會很自然地從底層最簡單的運算符開始,不斷形成復(fù)雜的高層功能。其實所有的編程語言都涉及了抽象,LISP在這一點上不是獨樹一幟的,不過SICP選用LISP作為編程語言,是看中了它簡潔的語法和靈活的擴展性,在之后的學(xué)習中我們會感受到這一點的。
Scheme
SICP中用到的語言,其實是LISP中的一個分支,叫做Scheme。它是MIT的Guy L. Steele 和Gerald Jay Sussman在上個世紀70年代開發(fā)出來的,再詳細的也可以先不管啦,我們先看看它的語言特性吧。
-
LISP
它是LISP的分支,所以具有LISP應(yīng)該有的特性。函數(shù)式編程,LISP風格的語法,解釋性的編程方式。總而言之,Scheme作為一個學(xué)習LISP的起點,是非常合適的。 -
簡潔
它與LISP的另一大分支Common Lisp不同的是,它只保留了核心的功能,所以它的語法非常簡單,可能只需要數(shù)十分鐘就可以徹底解釋清楚。但是,簡單的語法意味著,它不會是一個萬能的工具包,調(diào)用一兩個函數(shù)就能完成復(fù)雜的功能是不可能的。它提供的是基本元素,而你必須要扮演一個創(chuàng)造者的身份。這對于一個從0開始,對編程這件事本身充滿興趣的孩子來說,豈不是正好?
說到這里,我該放兩個鏈接了
官網(wǎng):SICP
Scheme下載(Windows):MIT Scheme 9.0
Scheme下載(Mac):MIT Scheme 9.0
說明下:之所以用9.0版本而不是最新的9.2,是因為Windows下有已知的bug,讀取文件之后buffer里面是空白的。
安裝很簡單,就不說了,但是打開之后我們可能會茫然地發(fā)現(xiàn),自己正面對著一個提示寥寥的白茫茫的編輯器。下一篇我們再看,到底怎么用Scheme編程。