计算机程序的构造和解释-作者: Harold Abelson / Gerald Jay Sussman / Julie Sussman

这个学期花了大量的时间在这本书上,同时旁听了裘宗燕老师(本书译者)以本书为教材开的课“程序设计技术和方法”,到学期末,总算是把这本书看完了。 
   
  现在终于把这本书看完了,在这总结一下。 
   
  ---时间--- 
  本书共有5章,每章都有近100道习题。前三章的习题我做了90%,后两章太难,大概只做了70%。 
  这本书可以说是时间黑洞。每章分为4-5节,每节有几个小节,全书有一百小节(即X.X.X)左右。我以小节为单位进行了估算,包括完成习题,每小节大约需要一个小时。当然不同小节难度不同,有的耗时长些,有的短些。于是读完本书并做完大部分习题需要上百个小时。再加上听课或看视频教程的时间则会更长。所以我觉得恐怕只有在校学生才有时间和精力来完成这本书的学习。 
   
  ---内容--- 
  本书按照内容可以分为三个部分:过程抽象(第一章);数据抽象(第二、三章)和语言抽象(第四、五章)。 
  过程抽象部分比较简单,先介绍了Scheme的基本语法,让读者初步领略函数式编程的风采。对于有一定编程基础(相信国内极少有人入门就读这个)的读者来说,会有耳目一新的感觉,原来递归和迭代可以有另一种表现形式,但并不难理解。习题也比较简单,不会用掉太多的时间。过程抽象的概念也很简单,就是编程语言中的函数,目的是封装计算过程的细节。关于何时应该用过程抽象的原则是:一切可以定义为过程的计算片段都应该定义为过程。 
  数据抽象是我认为的本书的核心,也是最值得我们仔细研读的部分。关于数据抽象最直接的理解就是面向对象编程,如C++,而Java和C#则是更彻底的数据抽象。把一组过程抽象(类的方法)集中考虑,并加入内部状态(类的变量),就是一个数据抽象。每个数据抽象都应该把自己的内部对象状态和对象的实现隐藏起来,对外通过一组接口进行消息传递。这样听起来好像本书与一般的面向对象书没有区别,但实际上,这些都是我自己的总结,书里面不会把这些概念直接罗列出来,而是通过一个个巧妙的例子,让读者一步步深入,感叹原来A还可以这样抽象,原来B还可以这样封装。个人认为如果时间有限,读完前三章已经可以领会本书大部分思想了,后两章可以不读。 
  语言抽象是指自己发明一门语言,以解决某一特定应用领域的问题。在这一领域中,自己发明的语言会比其他通用语言更方便。定义了新语言的语法后,就要自己去实现该语言的编译器或解释器,可以通过现有的语言去构造。这一部分包含了许多编译方面的知识,但又与编译原理中的构造方法有不少区别,自己看书很容易看得云里雾里,听老师讲课才好一些。大部分习题很难做,一部分习题非常难。 
   
  ---原因--- 
  为什么我们要学习这本书?因为这本书告诉我们如何抽象。为什么我们要学习如何抽象?因为抽象是我们控制软件复杂性的重要手段。 
  软件是人类有史以来最复杂的系统。其一、软件系统本身规模庞大,参与人手众多,难以管理;其二、环境和需求不断变化,且错误难以避免。 
  人类无法驾驭过于复杂的事物,于是只能寻找方法简化软件系统:把系统分为许多子部分,人们开发一个部分的时候,系统其他部分都是一种抽象,无需了解其细节。 
  本书讨论的就是系统的组织和设计,有哪些方法可以帮助我们控制软件的复杂度。 
   
   
  ---收获--- 
  除了贯穿全书的抽象思想外,我们还能从本书中学到(摘抄自老师ppt。。。): 
   从另一个角度看程序和程序设计中的问题 
   函数式程序设计 
   多种多样的程序组织方式 
   丰富多彩的编程模式 
   对一些基础问题的理解 
   
   
  ---资源--- 
  这本书相关的资料有不少,包括MIT的官方视频教程和非官方习题答案。 
  另外就是书不好买,几大网上书店都没了,我还是在学校的教材中心买到的。 
   
  MIT的视频教程: 
  http://swiss.csail.m it.edu/classes/6.001 /abelson-sussman-lec tures/ 
   
  课后答案版本1: 
  全。很多题不是用书中的Sheme而是 Common Lisp,但没有太大影响。 
  http://eli.thegreenp lace.net/category/pr ogramming/lisp/sicp/  
   
  课后答案版本2: 
  排版好,每一题给出多种语言的解答。 
  前3章比较全。第四章缺的太多,第五章完全没有。 
  http://sicp.org.ua/s icp/FrontPage 
   
  PS: 
  MIT开始用python教授此课,代替了原本的Scheme: 
  http://www.wisdomand wonder.com/link/2110 /why-mit-switched-fr om-scheme-to-python 
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值