CatCoding

魔法书:SICP

2010-07-27

《计算机程序的构造与解释》,SICP。这本书号称魔法书,真的是本非常有趣的书。为什么要看这本书,豆瓣上面有很多推荐,书评写得都很好,在这里。我最初看的是英文版,在网上很好找到,MIT 开源课程的网站上面有很多相关资料。从 80 年开始 MIT 就是用这门课程作为计算机的入门课程的 (MIT 真是个神牛云集的地方,看这个神牛的博客http://blog.vgod.tw/category/divine-code/ ,神乎其乎),不过 现在这门课程的编程语言换作 Python 了。所以曾经风靡一时的 scheme 和 Lisp 学的用的人就更少了。这最古老的一种编程语言之一 在慢慢要消失,不知那帮做人工智能的还用这个不?关于语言的发展参考这个牛人的一系列博文 (http://blog.youxu.info/)。

这本书 06 年看过一点,不过那时候没怎么看懂,到前两章就没看下去了。大四的暑假进了实验室,怎么就偶然又想好好看看,学校图书馆三楼有这本英文原版的,纸张非常之好,看起来是相当舒服。有中文 版的,不过翻译有时看起来会有点点别扭。大学期间没写过很大的工程,当时也不知道这本书的内容的深度,因为之前一段时间看了Concrete Abstraction 吧,所以看起来没 06 年那么吃力了。反正只是觉得好玩,正如书的前言中所说,编程应该是充满艺术性以及美感的。后来又在寝室下了 MIT 的课程视频,两个老师讲课都非常好,很奇怪那些老师都会用粉笔在黑板上狂写代码,或者是当时在键盘上敲代码,分析来分析去的,反正极少用 ppt 之类的东西。国内的大学老师大多是不怎么用粉笔了。总之这本书的内容还是相当广泛,我花了近两个月看了四章多点,慢慢做每章后面的习题,感觉收获不少,函数、算法、面向对象、高阶函数、泛型、并发、流、惰性求值、解释器和编译器、一些编程风格和方式的解释等等。

很多高级语言里面的特性在那里都已经提及过,比如 STL 里面不就有高阶函数吗,现在的动态语言还支持 lambda。理论支撑实现,实现很多内容看起来很高深,不过因为有具体的代码可以实现一下就比较好理解了。当时看的时候有的地方还是没理解,后来看到一个书评说多年的编程经验才能完全理解其中的内容。虽然现在除了 Elisp 也很少用函数式语言,但通过看这本书和做习题来让我对编程有了更多的兴趣。以后有时间再好好看看后面两章,因为第五章还没看完。有的题目有些难,做的时候参考了这个博客 (http://eli.thegreenplace.net/),估计这人是第一个在网上放出 SICP 绝大部分习题解答的吧,他用的是 Lisp。下面的附件是我做习题的代码,不保证全部都正确,如果有错误或者更好的解法请给我指出来 (moorekang@gmail.com)。前面三章用的环境是 PLT scheme 的集成环境,后面用的是 mzscheme,不过应该是没有问题的,我把一些运行结果也放到里面了。

sicp(1~4)_exercise

公号同步更新,欢迎关注👻