关于《计算机程序的构造和解释》,这本书讲什么,别人的评价,我不多说。点开链接去豆瓣读书看一下就了解。
英文原版:《Structure and Interpretation of Computer Programs》 简称SICP
我只是围绕这本书,再多说一些与它有关的八卦和资料。
《How to Design Programs》入门比SICP低一些。而且会把Scheme的基本语法讲的更清楚。SICP和HtDP用的都是Scheme,Lisp的一种。
打开How to Design Programs的主页,这本书是免费开放的,而且已经有第二版了。
我建议阅读第二版本,第二版对第一版做了较大的修订。
最主要的是,教学语言从Scheme换成Racket。编程环境也从原来的DrScheme换成了现在的DrRacket。Racket能很好支持我们现在主流的操作系统。
Racket其实就是从Scheme而来,兼容Scheme的语法。
也就是说,如果你想学SICP的话,并且自己写写Lisp程序过把瘾。你需要去Racket主页下载我们需要的编程环境,安装后运行DrRacket。
如果你一开始对Lisp的语法不熟悉,你就可以先读读《How to Design Programs Second Edition》自己写几行Lisp程序过过瘾。
如果你觉得Lisp很cool,你也不想卷入不休止的编程语言的战争,那么你可以看看《黑客与画家》,
在“拒绝平庸”和“书呆子的复仇”两章中,作者大加赞赏Lisp,并且道出了自己用Lisp开发商业软件的经历,
作者认为编程语言是有高低之分的,Lisp可以让你成为更好的程序员,如果这些引起了你的兴趣,那么你是该去读一读。
还有一本《软件随想录》,在"学校只教Java的危险性"一文中,作者认为Java太简单,不足以分辨出优秀的程序员。而且作者极力推荐了SICP这门课,因为这门课很难,
作者认为只有学过这些困难的课程,才能证明你有出色的程序设计能力。同样,作者认为面向对象程序设计太简单,不足以吓跑那些刚刚踏入软件开发的年轻人。而函数式编程(Functional Programing)可以难倒这些年轻人。
《黑客与画家》和《软件随想录》的作者都是出色的程序员,他们的观点或许可以给你学下去这门课的动力。
如果你想知道Lisp的历史,那么《奇思妙想》是一个不错的参考,它的第二章就讲了Lisp的发明人的约翰·麦卡锡的历史和他如何发明Lisp。
最后还有,这里是Berkeley的SICP课程是用Python3教的,也可以参考学习。你也可以先读读阮一峰的《函数式编程初探》。
你会看到其实程序设计有一个更广阔的世界,而不是只在一个面向对象的世界里。
附录:
1.我怎么学习SICP的。刚开始我是用的Racket环境去写代码。后来去看伯克利的SICP课程,用Python。后来就用Python写书上的代码。感觉也很不错。还有,我觉得也可以试试Scala。Scala的函数式编程特性,也足以过瘾。
这里有一份中文版总结的SICP习题集:http://sicp.readthedocs.org/en/latest/