大概很多programmer都看過《黑客與畫家》,做者用了整整一章的篇幅討論Lisp的強大。我天然就會手癢癢。
幾個月前,幾天內攻城略地搞定了Python,用的方法即是用Py重寫以前開發的類庫,這樣就能很快熟悉語法,培養語感。喜上眉梢的我,也嘗試將一樣的策略用在Lisp上,我開始查看它的語法和函數,好比如何定義類和函數,如何賦值等等。
但我慢慢發現,Lisp幾乎都不須要學語法,就是括號和幾個基本過程,無非就是lambda, define, let,cons,car,cdr等等。雖然語法很快就學完了,但卻很難用它寫出之前Python或C#風格的命令式代碼。連賦值都變得如此詭異,並且有數不清的方言,定義類時,每種方言都不同!函數名都超長,變量甚至會用問號感嘆號等平時根本不敢想的符號。
在嘗試寫Lisp一天以後,我無奈的放棄了,它的思路和我以前全部的觀念都很不相同!
後來我看了《計算機程序的構造與解釋》(SICP).
這本書名氣顯然沒有《編程珠璣》甚至《編程之美》名氣大。但它的目錄很對個人胃口,流模式,惰性求值,元語言抽象,聽着是否是就頗有逼格呢?因而我火燒眉毛的踏上這片土地,一邊看一邊作習題。
以後發生的事情超出了個人想象,這僅僅是一本MIT的大一新生的入門課程,其思惟深度,習題難度和廣度都超過了個人想象。怪不得國外有那麼多大神,由於人家看過了這樣牛逼的教材!它的函數求導和積分的方法,高階函數,閉包使人歎爲觀止,函數式風格的操做使以前不可想象的操做成爲可能。Lisp遞歸玩的實在太溜了,它纔是函數式編程語言的王者,循環迭代早成了二等公民。SICP一點點地解釋程序運行的真正本質,分析結構,環境和抽象。我僅僅看到了第二章,就已經目瞪口呆,顛覆了以前很多的概念,讓我極其後悔,爲何沒有在大一大二的時候讀這本書(那會我估計連看都看不懂)。
不少書信息量都很低,一本書壓縮後就剩幾頁紙。但SICP不同,這本書不只沒法壓縮,而更須要擴充。因此若是真想了解它的精妙,請直接閱讀它。任何讚美都是乏力的。
我進而迅速地投入了Lisp的懷抱,是否使用Lisp做爲工做語言,這一點都不重要,深刻以後,你會感覺到數學的精緻,理性的榮耀。我才發現,Lisp根本就不是語法,而是一種設計。用以前的編程思路去寫Lisp,簡直就是暴殄天物。此時,你不會再抱怨語言限制了思惟,只會悔恨本身的思惟配不上它的能力。
另外,我發現看書必定要作習題,作習題,作習題。大腦學完知識,檢驗和鞏固知識的最佳方式,就是作習題。以爲課本上講的東西很冗餘以爲本身都懂了?作一道習題分分鐘被虐狗。看了大神的對習題的解答,才發現這貨原來是這樣!這可能就是思考的樂趣吧!