我其實還未讀完這本書,目前只讀到了第四章左右,但覺得實在值得推荐給想學習程式設計的學生(或那些從來沒碰過functional programming的程式設計師),所以日後會陸續將部份心得繼續紀錄下來。這篇文章會先紀錄到目前為止我所學到的東西。
Chapter 1 - Computing
我們有不少人寫了好幾年的程式,控制計算機進行計算,但我們仔細思考過計算的意義嗎?什麼是資訊?什麼是資訊的處理?資訊如何表達?作者選擇了從比較寬廣的角度來思考計算這回事,並討論"計算"這件事到底是科學、工程、還是藝術?
Chapter 2 - Language
這本書不同於其他的入門書的地方從這章開始展露無疑。作者從控制計算機的主要媒介 - Language,開始討論起。先討論了日常語言的構件,然後介紹如何利用Recursive Transition Networks與Replacement Grammers去表示一個語言。然後在後續章節會不斷的用這些概念去說明要提出的主題。
Chapter 3 - Programming
前兩章都沒有寫到任何的程式碼,這章開始介紹了本書中所用到的主要程式語言 - Scheme(用的是DrRacket的編程環境)。Scheme是一個LISP的方言,特點是極為簡潔的規則以及語法,但又支援非常強大的抽象化能力,並與底層隔離的很漂亮,很適合作為學習計算本質的程式語言。 在這章中會開始感受到何謂functional programming。下面是我練習時的DrRacket截圖,很漂亮吧?
Chapter 4 - Problems and Procedures
這章開始真正展示functional programming的威力。我們可以依序看到如何透過Scheme的一致性語法做到procedure composition、recursive procedures、tail recursion...跟著作者一個一個的解題,我們可以逐漸感受divide-and-conquer的意義,這是在主流程式語言裡(像C/C++, Java,...)所不容易進行的思考方式(當然啦,你還是可以用關鍵字"functional C/C++/Java"去google找到一堆迂迴技巧...)。因為procedure在Scheme中是一級公民,所以任意的處理procedure是自然而然的動作,分解大問題為小問題也成了習慣的一部份。喔,對了,另外推荐一下作者所設計的習題,題目並不多,也不會難到什麼程度,但往往都可以讓我發現一些沒注意到的地方,真的想不出來還有解答可以偷看呢!
有人說童話故事其實是寫給大人看的。我現在常常覺得計算機的入門書籍其實更適合給已經工作數年的程式設計師看。透過重新思考基本問題,透過完全不同於平常控制計算機的方式,我們會仔細檢視自己的每個決定是否真的合乎邏輯、美感,是否能說服自己繼續用糟糕的方式處理這些工作。 :)
留言
張貼留言