Lisp和SICP

     大概不少programmer都看过《黑客与画家》,作者用了整整一章的篇幅讨论Lisp的强大。我自然就会手痒痒。
     几个月前,几天内攻城略地搞定了Python,用的方法便是用Py重写之前开发的类库,这样就能很快熟悉语法,培养语感。喜上眉梢的我,也尝试将同样的策略用在Lisp上,我开始查看它的语法和函数,比如如何定义类和函数,如何赋值等等。
     但我慢慢发现,Lisp几乎都不需要学语法,就是括号和几个基本过程,无非就是lambda, define, let,cons,car,cdr等等。虽然语法很快就学完了,但却很难用它写出以前Python或C#风格的命令式代码。连赋值都变得如此诡异,而且有数不清的方言,定义类时,每种方言都不一样!函数名都超长,变量甚至会用问号感叹号等平时根本不敢想的符号。
     在尝试写Lisp一天之后,我无奈的放弃了,它的思路和我之前所有的观念都很不相同!
     后来我看了《计算机程序的构造与解释》(SICP).
     这本书名气显然没有《编程珠玑》甚至《编程之美》名气大。但它的目录很对我的胃口,流模式,惰性求值,元语言抽象,听着是不是就很有逼格呢?于是我迫不及待的踏上这片土地,一边看一边做习题。
     之后发生的事情超出了我的想象,这仅仅是一本MIT的大一新生的入门课程,其思维深度,习题难度和广度都超过了我的想象。怪不得国外有那么多大神,因为人家看过了这样牛逼的教材!它的函数求导和积分的方法,高阶函数,闭包令人叹为观止,函数式风格的操作使之前不可想象的操作成为可能。Lisp递归玩的实在太溜了,它才是函数式编程语言的王者,循环迭代早成了二等公民。SICP一点点地解释程序运行的真正本质,分析结构,环境和抽象。我仅仅看到了第二章,就已经目瞪口呆,颠覆了之前不少的概念,让我极其后悔,为什么没有在大一大二的时候读这本书(那会我估计连看都看不懂)。
     很多书信息量都很低,一本书压缩后就剩几页纸。但SICP不一样,这本书不仅无法压缩,而更需要扩充。所以如果真想了解它的精妙,请直接阅读它。任何赞美都是乏力的。
     我进而迅速地投入了Lisp的怀抱,是否使用Lisp作为工作语言,这一点都不重要,深入之后,你会感受到数学的精致,理性的荣耀。我才发现,Lisp根本就不是语法,而是一种设计。用之前的编程思路去写Lisp,简直就是暴殄天物。此时,你不会再抱怨语言限制了思维,只会悔恨自己的思维配不上它的能力。
     另外,我发现看书一定要做习题,做习题,做习题。大脑学完知识,检验和巩固知识的最佳方式,就是做习题。觉得课本上讲的东西很冗余觉得自己都懂了?做一道习题分分钟被虐狗。看了大神的对习题的解答,才发现这货原来是这样!这可能就是思考的乐趣吧!
   
     
posted @ 2015-12-02 11:45  FerventDesert  阅读(2199)  评论(1编辑  收藏  举报