🌑

SICPJS——我的思考与学习计划 / 目录

Read in English

心灵在对简单观念发挥其能力时,主要有以下三种行为:

  1. 将几个简单观念组合成一个复合观念,由此构成所有复杂观念。
  2. 其次,将两个观念——无论简单还是复杂——并列在一起,同时审视,而不将其合并为一,由此获得所有关系的观念。
  3. 第三,将这些观念与现实存在中伴随它们的所有其他观念分离:这被称为抽象,所有一般观念由此而生。
SICPJS POST

为什么读这本书,以及这本书的目标是什么

作为一名计算机科学专业的学生,我早就听闻这本书的大名,它是计算机科学领域的”圣经”之一。我曾经读过几页原版 SICP(使用 Scheme 作为编程语言),但很快就放弃了,完全没能理解书中所表达的思想——那时我还是大一新生(顺带一提,这本书是 MIT 大一新生的教材)。之后我跳过了这本书,转而阅读了《计算机网络:自顶向下方法》和《操作系统:三易之道》。

时光飞逝,三年后,我即将结束校园生活,步入职场。幸运的是,我在新加坡找到了一份满意的工作。随着我对设计模式、面向对象编程等计算机思想逐渐熟悉,我发现自己写的代码很难维护,有时甚至第一次写完就不想再看了。我意识到,我在计算机技能上仍有一大空缺——那就是用程序优雅地表达想法的能力、预测程序所生成过程的能力,以及编写更整洁代码的能力。

就在 2022 年,SICP JavaScript 版恰好问世,我拿起它,重新踏上了这段旅程。这一次,我发现阅读和理解这本书比以前容易多了,也更有信心了。使用我最熟悉的语言 JavaScript,我完成了几乎所有的练习,甚至尝试对它们进行优化。

这本书的思想深深吸引了我,让我收获颇丰。我由衷感激那些将如此宝贵的财富以开源形式留存下来的人们。

这本书的目标是:

  • 弄清程序、计算过程与人类之间的联系与区别。
  • 专注于如何表达现实世界中的物理或心理过程,探索人类的优势与局限。
  • 如何用程序表达上述过程,以及如何使其整洁优雅。
  • 学习控制大型软件系统复杂度的技术。

思考

人类思维、计算机程序的集合与计算机

  • 人类思维:
    • 人类擅长给事物命名,因此优秀的程序员不仅仅是在编程,更是在构建词汇以供后续使用。
    • 人类思维产生了一系列现实世界或心理的过程,这些过程极为复杂庞大,人类只能理解其中很小的一部分。
  • 计算机程序的集合:
    • 人类思维对现实世界或心理过程的建模。
    • 它们如同过程本身一样庞杂,难以完全理解。
    • 随着人类对这些过程认识的不断深化、扩展和泛化,程序也在不断演变。
    • 大的过程由小的过程成长而来。
  • 计算机:
    • 计算机是严苛的主人,它接受的每一个程序都必须是正确的,我们想表达的东西必须在每个细节上都精确无误。
    • 程序变得越来越庞大,难以证明其正确性。因此,我们必须确保每个单独模块的正确性。
    • 计算机必须遵守物理定律:距离越短,计算越快。

这三者相互维持着一种亚稳定状态,一旦其中任何一方发生变化,都会对其他方产生重大影响。计算机的突破带来了更大规模的程序工程。

笔记结构

受到”优秀的程序员不仅仅是在编程,更是在构建词汇以供后续使用”这一观点的启发,本笔记采用词汇表、问题、笔记的结构记录:

  • 词汇表(Vocabulary):章节中的新内容,专注于是什么,新内容通常建立在已有内容之上。
  • 问题(Questions):有趣的问题,值得深入探究,可能有也可能没有答案。
  • 笔记(Notes):记录想法和练习。

目录与索引

文章

SICPJS 1. Building Abstractions with Functions

其他资源

SICPJS 开源教材
SICP学习指南——bintou老师

— Apr 24, 2022