心灵在对简单观念发挥其能力时,主要有以下三种行为:
- 将几个简单观念组合成一个复合观念,由此构成所有复杂观念。
- 其次,将两个观念——无论简单还是复杂——并列在一起,同时审视,而不将其合并为一,由此获得所有关系的观念。
- 第三,将这些观念与现实存在中伴随它们的所有其他观念分离:这被称为抽象,所有一般观念由此而生。
为什么读这本书,以及这本书的目标是什么
作为一名计算机科学专业的学生,我早就听闻这本书的大名,它是计算机科学领域的”圣经”之一。我曾经读过几页原版 SICP(使用 Scheme 作为编程语言),但很快就放弃了,完全没能理解书中所表达的思想——那时我还是大一新生(顺带一提,这本书是 MIT 大一新生的教材)。之后我跳过了这本书,转而阅读了《计算机网络:自顶向下方法》和《操作系统:三易之道》。
时光飞逝,三年后,我即将结束校园生活,步入职场。幸运的是,我在新加坡找到了一份满意的工作。随着我对设计模式、面向对象编程等计算机思想逐渐熟悉,我发现自己写的代码很难维护,有时甚至第一次写完就不想再看了。我意识到,我在计算机技能上仍有一大空缺——那就是用程序优雅地表达想法的能力、预测程序所生成过程的能力,以及编写更整洁代码的能力。
就在 2022 年,SICP JavaScript 版恰好问世,我拿起它,重新踏上了这段旅程。这一次,我发现阅读和理解这本书比以前容易多了,也更有信心了。使用我最熟悉的语言 JavaScript,我完成了几乎所有的练习,甚至尝试对它们进行优化。
这本书的思想深深吸引了我,让我收获颇丰。我由衷感激那些将如此宝贵的财富以开源形式留存下来的人们。
这本书的目标是:
- 弄清程序、计算过程与人类之间的联系与区别。
- 专注于如何表达现实世界中的物理或心理过程,探索人类的优势与局限。
- 如何用程序表达上述过程,以及如何使其整洁优雅。
- 学习控制大型软件系统复杂度的技术。
思考
人类思维、计算机程序的集合与计算机
- 人类思维:
- 人类擅长给事物命名,因此优秀的程序员不仅仅是在编程,更是在构建词汇以供后续使用。
- 人类思维产生了一系列现实世界或心理的过程,这些过程极为复杂庞大,人类只能理解其中很小的一部分。
- 计算机程序的集合:
- 人类思维对现实世界或心理过程的建模。
- 它们如同过程本身一样庞杂,难以完全理解。
- 随着人类对这些过程认识的不断深化、扩展和泛化,程序也在不断演变。
- 大的过程由小的过程成长而来。
- 计算机:
- 计算机是严苛的主人,它接受的每一个程序都必须是正确的,我们想表达的东西必须在每个细节上都精确无误。
- 程序变得越来越庞大,难以证明其正确性。因此,我们必须确保每个单独模块的正确性。
- 计算机必须遵守物理定律:距离越短,计算越快。
这三者相互维持着一种亚稳定状态,一旦其中任何一方发生变化,都会对其他方产生重大影响。计算机的突破带来了更大规模的程序工程。
笔记结构
受到”优秀的程序员不仅仅是在编程,更是在构建词汇以供后续使用”这一观点的启发,本笔记采用词汇表、问题、笔记的结构记录:
- 词汇表(Vocabulary):章节中的新内容,专注于是什么,新内容通常建立在已有内容之上。
- 问题(Questions):有趣的问题,值得深入探究,可能有也可能没有答案。
- 笔记(Notes):记录想法和练习。