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 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《计算机程序构造解释》是一本经典的计算机科学教材,它由Harold Abelson和Gerald Jay Sussman创作,已经成为计算机科学领域的里程碑之一。该教材于1979年首次出版,最新版是第二版。 该书的主要内容包括两个方面:计算机程序构造解释。首先,它详细解释计算机程序构造,强调了程序的基本要素和组织原则。这可以帮助读者理解如何使用编程语言和工具构建高效和可靠的计算机程序。书中还介绍了一些常见的编程范式和设计模式,如函数式编程和面向对象编程,使读者能够选择适合自己项目的最佳方法。 其次,该书解释计算机程序解释过程。它介绍了一种称为Lisp的编程语言,这是一种函数式编程语言,非常适合表达和解释复杂的计算机程序。通过详细讲解Lisp的语法和语义,读者可以深入了解程序如何被计算机解释和执行。这对于理解计算机底层工作原理和实现高性能程序非常有帮助。 《计算机程序构造解释》被广泛认为是计算机科学入门的必读教材。它不仅适合计算机科学专业的学生学习,也适合对计算机程序有兴趣的非专业读者。该书的内容深入浅出,兼具理论和实践,读者可以通过阅读本书并进行相应的练习来提高他们的编程能力和计算机科学理解。 总之,《计算机程序构造解释》是一本经典的计算机科学教材,它介绍了计算机程序构造解释两个重要方面。通过学习本书,读者可以掌握构建高效和可靠程序的技巧,并深入理解计算机程序的执行过程。这本书对于计算机科学专业学生以及对计算机程序感兴趣的非专业读者都是极其有价值的。 ### 回答2: 《计算机程序构造解释》(简称SICP)是一本经典的计算机科学教材,该书由麻省理工学院的编程语言专家哈罗德·艾布尔森(Harold Abelson)和吉拉迪·塞斯曼(Gerald Jay Sussman)共同编写。它在计算机科学领域具有重要的地位和影响力。 该书的主要内容围绕着计算机程序构造解释展开。它从一个通用的编程语言(Scheme)出发,通过讲解计算机程序的抽象、过程和数据的重要概念,帮助读者建立起正确的思维模式和编程方法。 SICP通过一系列的例子和习题,引导读者通过编程实践来加深对计算机程序的理解。它强调程序设计的原理、模块化、抽象和递归等重要思想,通过一步步的讲解和示例,帮助读者培养出优雅和高效的编程风格。 SICP的目标是让读者真正理解计算机程序的本质,并学会如何用一种简单而强大的编程语言来构建复杂的软件系统。它不仅仅是一本教科书,更是一部引导读者探索计算机科学本质的指南。 总的来说,《计算机程序构造解释》是一本重要的计算机科学经典教材,它的初版已经出版超过30年,至今仍然是计算机科学教育领域的重要参考书之一。阅读该书可以帮助读者真正理解计算机程序的本质和设计原则,提升编程能力和思维方式。 ### 回答3: 《计算机程序构造解释》(SICP)是一本经典的计算机科学教材,也是学习编程的重要参考书籍。 这本书以文学化的形式介绍了计算机程序是如何构造解释的。它通过简明易懂的语言和丰富的示例,向读者解释了编程语言的设计原则、计算过程的原理以及如何理解和构造复杂的程序。 SICP主要分为五个部分。第一部分介绍了程序设计的基本概念和过程抽象的重要性。第二部分介绍了数据抽象和高阶过程,帮助读者理解程序设计中的重要概念和方法。第三部分讨论了程序设计的不同风格和编程的复杂性。第四部分介绍了元语言解释器的实现,帮助读者理解编程语言的工作原理。第五部分则介绍了一些高级主题,如并发和非确定性计算。 这本书的独特之处在于它不仅仅教授编程语言的具体细节,更重要的是让读者理解程序设计的理念和基本原则。它培养了读者逻辑思维和问题解决能力,帮助他们成为更好的程序员。 对于那些想要深入理解计算机程序构造解释的人来说,这本书是一个不可或缺的工具。它挑战了读者的思维,让他们思考计算机程序的本质和原理。无论是初学者还是有经验的程序员,阅读《计算机程序构造解释》都会有所收获,成为更好的计算机科学家或工程师。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值