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,简直就是暴殄天物。此时,你不会再抱怨语言限制了思惟,只会悔恨本身的思惟配不上它的能力。
     另外,我发现看书必定要作习题,作习题,作习题。大脑学完知识,检验和巩固知识的最佳方式,就是作习题。以为课本上讲的东西很冗余以为本身都懂了?作一道习题分分钟被虐狗。看了大神的对习题的解答,才发现这货原来是这样!这可能就是思考的乐趣吧!
相关文章
相关标签/搜索