Structure and Interpretation of Computer Programs - 2nd Edition (MIT) - Harold Abelson

Structure and Interpretation of Computer Programs - 2nd Edition (MIT)

Harold Abelson

出版社

The MIT Press

出版时间

1996-07-25

ISBN

9780262011532

评分

★★★★★

标签

编程

书籍介绍

Structure and Interpretation of Computer Programs has had a dramatic impact on computer science curricula over the past decade. This long-awaited revision contains changes throughout the text.

There are new implementations of most of the major programming systems in the book, including the interpreters and compilers, and the authors have incorporated many small changes that reflect their experience teaching the course at MIT since the first edition was published.

A new theme has been introduced that emphasizes the central role played by different approaches to dealing with time in computational models: objects with state, concurrent programming, functional programming and lazy evaluation, and nondeterministic programming. There are new example sections on higher-order procedures in graphics and on applications of stream processing in numerical programming, and many new exercises.

In addition, all the programs have been reworked to run in any Scheme implementation that adheres to the IEEE standard.

AI导读
核心看点
  • 以Scheme语言揭示编程本质,强调抽象构建与高阶函数思维。
  • 深入探讨解释器、编译器实现,从底层逻辑解析计算机工作原理。
  • 对比对象模型与函数式模型,剖析时间、状态及并发编程的哲学。
适合谁读
  • 渴望深入理解计算机科学底层逻辑,追求编程“道”的进阶开发者。
  • 对函数式编程、语言设计或解释器实现有浓厚兴趣的研究者。
  • 具备一定编程基础,愿意挑战高难度思维训练并享受智力乐趣的人。
读前提醒
  • 本书难度极高,非初学者入门书,建议配合MIT公开课视频辅助学习。
  • 务必动手完成习题,仅阅读无法掌握精髓,需通过实践内化抽象概念。
  • 若未接触过Lisp或Scheme,需先掌握基础语法,否则阅读体验极差。
读者共识
  • 被誉为计算机科学领域的“圣经”,评分极高但评价两极分化严重。
  • 读者普遍反映阅读过程痛苦且耗时,但完成后对编程认知有质的飞跃。
  • 虽被Python取代教材地位,但其关于抽象和控制复杂度的思想永不过时。

本导读基于书籍简介、目录、原文摘录、短评和书评生成,不等同于全文精读。

精彩摘录
  • "将数值作为"简单数据"看待实际上完全是作为一种虚张声势.事实上,对于数值的处理是任何程序设计语言里最错综复杂而且也最迷惑人的事项之一.其中涉及的典型问题包括: 某些计算机系统区分了整数(例如2)和实数(例如2.71).那么实数2.00和整数2不同吗?用于整数的算术运算是否与用于实数的运算相同呢?用6除以2的结果是3还是3.0?我们可以表示的最大的数是多少?最多能表示的精度包含了多少个十进制位?整数的表示范围与实数一样吗?......"
  • "虽然代换模型看起来似乎非常简单,但令人吃惊的是,给出代换过程的严格数学定义却异常复杂.问题在于,用作过程中形式参数的名字,可能会与该过程可能应用的那些表达式中的(同样)名字相互混淆.在逻辑和程序设计的语义学文献里,关于代换的充满错误的定义有一个很长的历史."
  • "说明性描述和行动性描述有着内在的联系,就像数学和计算机科学有内在的联系一样.举个例子,说一个程序产生的结果"正确",就是给出了一个有关该程序性质的说明性语句.存在着大量的研究工作,其目标就是创建起一些技术,设法证明一个程序是正确的.在这一领域中有许多技术性困难,究其根源,都出自需要在行动性语句(程序是有它们构造起来的)和说明性语句(它们可以用于推导出某些结果)之间转来转去"
  • "术语"闭包"来自于抽象代数,在抽象代数里,一集元素称为在某个运算(操作)之下封闭,如果将该运算作用于这一集合的元素,产生出的仍然是该集合里的元素.然而lisp社团(很不幸)还用术语"闭包"描述另一个与此毫不相干的概念.闭包也是一种为带有自由变量的过程而用的实现技术.本书没有采用闭包这一术语的第二种意义."
  • "...开发出一种有用的,具有一般意义的框架,以描述不同类型的对象之间的关系(这在哲学中称为"本体论").看来是一件极其困难的工作.在10年前存在的混乱和今天存在的混乱之间的主要差异在于,今天已经有了一批各式各样的并不合适的本体理论,它们已经被嵌入到数量过多而又先天不足的各种程序设计语言里.举例来说,面向对象语言的大部分复杂性---以及当前各种面向对象语言之间细微的而且使人迷惑的差异的核心,就是对类型之间通用型操作的处理....事实上,我们的猜想是,如果没有知识表示和自动推理工作的帮助,这些问题是无法仅仅通过计算机语言设计的方式合理处理的."
  • "在处理变动数据对象的共享问题时,最微妙的地方正好就反应了3.1.3节里提出的有关"同一"和"变化"的基本问题.我们在那里说过,如果希望这个语言里容许做修改,那么每个复合对象就必须有一个"标识",这应该是某种不同于构造起它的那些片段的东西.在lisp里,我们所认为的"同一"也就是检查课题之间的eq?,采用指针相等表示.这是因为在大部分lisp实现里,一个指针本质就是一个存储地址,在这里"解决"对象标识的方式,是假设数据对象"本身"也是一些信息,存储在计算机中某一些特定的存储位置,对于简单的lisp程序而言,这也就足够了.但是这并不是解决计算模型中"同一"问题的一般性方法."
  • "物理中也类似,当我们观察一个正在移动的粒子时,我们说该粒子的位置(状态)正在变化,然而,从粒子的世界线的观点看,这里根本就不涉及任何变化"
  • "对象模型对世界的近似在于将其分割为独立的片段,函数式模型则不是沿着对象的边界去做模块化。当“对象”之间不共享的状态远远大于它们所共享的状态时,对象模型就特别好用。这种对象观点失效的一个地方就是量子力学,在那里,将物体看做独立粒子就会导致悖论和混乱。将对象观点和函数式观点合并可能与程序设计的关系不大,而是与基本认识论有关的论题。"
作者简介
Hal Abelson is Class of 1922 Professor of Computer Science and Engineering at Massachusetts Institute of Technology and a fellow of the IEEE. He is a founding director of Creative Commons, Public Knowledge, and the Free Software Foundation. Additionally, he serves as co-chair for the MIT Council on Educational Technology. Gerald Jay Sussman is the Matsushita Professor of Electrical Engineering in the Department of Electrical Engineering and Computer Science, Massachusetts Institute of Technology. He is also the coauthor of Structure and Interpretation of Computer Programs (MIT Press, second edition, 1996).
目录
Foreword
Preface to the Second Edition
Preface to the First Edition
Acknowledgments
1 Building Abstractions with Procedures

显示全部
用户评论
cs61a,你值得拥有。
我为身为码农一员深感自豪。
看了前三章,没做习题,最多看懂了两成内容吧,但是依然收获很大。一方面满足了好奇心,另一方面学会了一些实用的编程原则。
总共耗时99小时50分,断断续续看了61天。第五章最后一节看起来有点浮躁,不难,但是很麻烦。。最开始打算看中文版的,不过网上找到了完美的epub格式,iBooks上看感觉很好。
传世神书啊!Harold Abelson有传教士神性的光芒啊。。第三章结束有种故事讲完的感觉,而且是个悲伤的不完美的故事。
配合 https://inst.eecs.berkeley.edu/~cs61a/su20/ 一起学习
什么时候人们纷纷拆穿这个皇帝的新装,在IT领域也真正独立思考、关注深层和持久的价值时候,IT对人类的进步作用才能比较好地出现。
有多年的积累之后读这本书会觉得是编程精髓的汇总。
官方排版非常糟糕,这个稍微好一点点:https://sarabander.github.io/sicp/html/
万物皆对象
收藏