---
title: "SICPJS——我的思考与学习计划 / 目录"
url: https://clean99.github.io/zh/2022/04/24/SICPJS-What-I-think-and-what-I-ve-done/
date: 2022.04.24
lang: zh
---

> 心灵在对简单观念发挥其能力时，主要有以下三种行为：
> 1. 将几个简单观念组合成一个复合观念，由此构成所有复杂观念。
> 2. 其次，将两个观念——无论简单还是复杂——并列在一起，同时审视，而不将其合并为一，由此获得所有关系的观念。
> 3. 第三，将这些观念与现实存在中伴随它们的所有其他观念分离：这被称为抽象，所有一般观念由此而生。

<img alt="SICPJS POST" src="/img/sicpjs/sicpjs.jpeg" style="height: 600px;">

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

作为一名计算机科学专业的学生，我早就听闻这本书的大名，它是计算机科学领域的"圣经"之一。我曾经读过几页原版 [SICP](https://www.amazon.com/Instructors-Structure-Interpretation-Computer-Programs/dp/0262692201/ref=sr_1_4?keywords=sicp&qid=1650806078&s=books&sr=1-4)（使用 Scheme 作为编程语言），但很快就放弃了，完全没能理解书中所表达的思想——那时我还是大一新生（顺带一提，这本书是 MIT 大一新生的教材）。之后我跳过了这本书，转而阅读了《计算机网络：自顶向下方法》和《操作系统：三易之道》。

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

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

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

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

## 思考

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

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

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

## 笔记结构

受到"优秀的程序员不仅仅是在编程，更是在构建词汇以供后续使用"这一观点的启发，本笔记采用词汇表、问题、笔记的结构记录：
* 词汇表（Vocabulary）：章节中的新内容，专注于*是什么*，新内容通常建立在已有内容之上。
* 问题（Questions）：有趣的问题，值得深入探究，可能有也可能没有答案。
* 笔记（Notes）：记录想法和练习。

## 目录与索引

### 文章

[SICPJS 1 Building Abstractions with Functions](/zh/2022/04/25/SICPJS-1-Building-Abstractions-with-Functions/)

### 其他资源

[SICPJS 开源教材](https://sourceacademy.org/sicpjs/foreword02)
[SICP学习指南——bintou老师](https://www.jianshu.com/p/213888357b65)
