原文是英文,使用 Claude 翻译成中文后贴到此处。属于是意识流吐槽
总的来说是推荐大一新生看,大一之后觉得自己可以的其实感觉可以不看0-0,主要是很多 idea 有些显而易见,而且读的挺空虚的
原文链接:https://blog.ynchen.me/SICP-Review
或者看二楼获取原文及摘录
SICP被认为是编程领域最负盛名的教科书之一,经常被称为计算机科学的“圣经”。它不是教你语言,而是教你编程(作为一本入门教材)。我对它有非常高的期望,花了半个月的时间读完前3章。然而,我必须说它没有达到我的期望,我认为它的大部分内容都是“平凡的”。
那么这本书讲了什么呢?一言以蔽之,就是“抽象”和“封装”两个词。
对我来说,抽象意味着提取“相同之处”,将相似的东西放在一起,而封装部分意味着“打包”需要一起使用的东西。
[注] 思考:最基本的抽象
程序都是建立在多重抽象之上的,比如编程语言、操作系统、冯诺依曼机器,甚至是这个世界!我认为世界是一切的最基本抽象,所有其他抽象都是在那个基础上建立的。
SICP也有JavaScript和Python版本,我认为鉴于它有对比版本,JavaScript版本可能是一个不错的选择。许多人会说你应该只读Scheme版本,但我认为这本书重点不是语言,而是其背后的思想,所以我觉得语言其实无关紧要。
[注] Scheme体验
我必须说Scheme的开发者体验不是很好!我使用Racket,似乎书中提到的一些函数都不包含在Racket中。Racket语言服务器很强大,它提供了一些自动补全功能,可以格式化代码,但找到正确的位置关闭括号仍然很麻烦(就像JavaScript一样哈哈)。
在你适应了风格后,代码阅读体验还不错,但代码编写体验有时仍然很沮丧。
Scheme标准似乎是有损失的?所以有时你找不到完全相同的实现,这就像C和C++中的未定义行为一样。老实说有点烦人。
随机笔记
第1章介绍了“过程”,以及我们如何使用它们来建立抽象。这里涉及了许多数学,有点挑战。你需要真正掌握抽象思想和一些数学领悟才能通读它们。我发现一个说法,它是“可执行的数学”,这真的很适合这一章。
Scheme中的括号写起来很烦人,一开始读起来也很烦人。但在你习惯它之后,它变得很容易阅读,编写仍然很烦人。
Scheme中的函数传递真的很强大也令人叹为观止。尽管在函数式编程中可能很平凡,但我还没学过,所以......
这是阅读中最有趣的部分,可能是因为我对这个想法不太熟悉。
第2章介绍了称为“list”的数据,“list”基本上就是C中的链表(LISP代表“LISt Processing”)。许多抽象和封装可以从面向对象编程中学习,所以阅读这部分真的很无聊。
另外注意到Rust和JavaScript等其他语言也从LISP中学习(抄袭)了很多。甚至名字在Rust中也一样哈哈。
第3章基本上是用我们所学的来建立带状态的对象(让我想起react),并介绍了流。流真的很强大,就像JavaScript中的promise一样。我非常喜欢这个想法。
现在消息传递可以通过“channel”实现,我认为“channel”的设计要好得多。
为什么SICP没有达到我的期望
我发现许多概念很显而易见,许多抽象可以从面向对象编程中学到,特别是你对代码有美学追求。唯一的区别是scheme是一个非常灵活和动态的语言,这种感觉是无与伦比的。
如果你是经验丰富的程序员,那么我假设你已经掌握了书试图传达的许多想法的要点。但这本书本身就是一本教科书,我会说练习有时可能很难。尽管不需要先备知识就可以开始,但失败于解决问题可能会非常令人沮丧。有趣的是,在schemewiki上看到许多关于OP(原帖作者)是错误的,勘误也是错误的,勘误的勘误也是错误的的讨论。所以如果你是编程新手,特别是自学的话,这有点挑战性。
而且,并发的想法也可以从数据库理论中学到。
更重要的是,有时我在阅读这本书时会感到一种空虚感,也许是因为它教你抽象,这可能会让人沮丧。读这本书没什么乐趣。