SICP-计算机程序的构造和解释-目录+书评


第1章 构造过程抽象
1.1 程序设计的基本元素
1.2 过程与它们所产生的计算
1.3 用高阶函数做抽象
第2章 构造数据现象
2.1 数据抽象导引
2.2 层次性数据和闭包性质
2.3 符号数据
2.4 抽象数据的多重表示
2.5 带有通用型操作的系统
第3章 模块化、对象和状态
3.1 赋值和局部状态
3.2 求值的环境模型
3.3 用变动数据做模拟
3.4 并发:时间是一个本质问题
3.5 流
第4章 元语言抽象
4.1 元循环求值器
4.2 Scheme的变形——惰性求值
4.3 Scheme的变形——非确定性计算
4.4 逻辑程序设计
第5章 寄存器机器里的计算
5.1 寄存器机器的设计
5.2 一个寄存器机器模拟器
5.3 存储分配和废料收集
5.4 显式控制的求值器
5.5 编译
参考文献
练习表
索引

----------------------------------------------------------------------------

书评链接:https://book.douban.com/review/4559081/


本书共有5章,每章都有近100道习题。前三章的习题我做了90%,后两章太难,大概只做了70%。

这本书可以说是时间黑洞。每章分为4-5节,每节有几个小节,全书有一百小节(即X.X.X)左右。我以小节为单位进行了估算,包括完成习题,每小节大约需要一个小时。当然不同小节难度不同,有的耗时长些,有的短些。于是读完本书并做完大部分习题需要上百个小时。再加上听课或看视频教程的时间则会更长。所以我觉得恐怕只有在校学生才有时间和精力来完成这本书的学习。

---内容---

本书按照内容可以分为三个部分:过程抽象(第一章);数据抽象(第二、三章)和语言抽象(第四、五章)

过程抽象部分比较简单,先介绍了Scheme的基本语法,让读者初步领略函数式编程的风采。对于有一定编程基础(相信国内极少有人入门就读这个)的读者来说,会有耳目一新的感觉,原来递归和迭代可以有另一种表现形式,但并不难理解。习题也比较简单,不会用掉太多的时间。过程抽象的概念也很简单,就是编程语言中的函数,目的是封装计算过程的细节。关于何时应该用过程抽象的原则是:一切可以定义为过程的计算片段都应该定义为过程。

数据抽象是我认为的本书的核心,也是最值得我们仔细研读的部分。关于数据抽象最直接的理解就是面向对象编程,如C++,而Java和C#则是更彻底的数据抽象。一组过程抽象(类的方法)集中考虑,并加入内部状态(类的变量),就是一个数据抽象。每个数据抽象都应该把自己的内部对象状态对象的实现隐藏起来对外通过一组接口进行消息传递。这样听起来好像本书与一般的面向对象书没有区别,但实际上,这些都是我自己的总结,书里面不会把这些概念直接罗列出来,而是通过一个个巧妙的例子,让读者一步步深入,感叹原来A还可以这样抽象,原来B还可以这样封装。个人认为如果时间有限,读完前三章已经可以领会本书大部分思想了,后两章可以不读。

语言抽象是指自己发明一门语言,以解决某一特定应用领域的问题。在这一领域中,自己发明的语言会比其他通用语言更方便。定义了新语言的语法后,就要自己去实现该语言的编译器或解释器,可以通过现有的语言去构造。这一部分包含了许多编译方面的知识,但又与编译原理中的构造方法有不少区别,自己看书很容易看得云里雾里,听老师讲课才好一些。大部分习题很难做,一部分习题非常难。

---原因---

为什么我们要学习这本书?因为这本书告诉我们如何抽象。为什么我们要学习如何抽象?因为抽象是我们控制软件复杂性的重要手段

软件是人类有史以来最复杂的系统。

其一、软件系统本身规模庞大,参与人手众多,难以管理

其二、环境和需求不断变化,且错误难以避免

人类无法驾驭过于复杂的事物,于是只能寻找方法简化软件系统:把系统分为许多子部分,人们开发一个部分的时候,系统其他部分都是一种抽象,无需了解其细节。

本书讨论的就是系统的组织和设计,有哪些方法可以帮助我们控制软件的复杂度

---收获---

除了贯穿全书的抽象思想外,我们还能从本书中学到(摘抄自老师ppt。。。):

        从另一个角度看程序和程序设计中的问题

        函数式程序设计

        多种多样的程序组织方式

        丰富多彩的编程模式

        对一些基础问题的理解

---资源---

这本书相关的资料有不少,包括MIT的官方视频教程和非官方习题答案。

另外就是书不好买,几大网上书店都没了,我还是在学校的教材中心买到的。

MIT的视频教程:

http://swiss.csail.mit.edu/classes/6.001/abelson-sussman-lectures/

课后答案版本1:

全。很多题不是用书中的Sheme而是 Common Lisp,但没有太大影响。

http://eli.thegreenplace.net/category/programming/lisp/sicp/

课后答案版本2:

排版好,每一题给出多种语言的解答。

前3章比较全。第四章缺的太多,第五章完全没有。

http://sicp.org.ua/sicp/FrontPage

PS:

MIT开始用python教授此课,代替了原本的Scheme:

http://www.wisdomandwonder.com/link/2110/why-mit-switched-from-scheme-to-python 


你可能感兴趣的:(书)