书评:小阴谋家
(也发布到 Amazon.com。)
别名:小阴谋家不穿衣服
也许您的软件工程师或 MIT 教授朋友向您推荐了这本书。 “哦,你想学习如何编码? 你应该读读 The Little Schemer,”他们会说。 你的朋友是好意,但推荐这本书是完全错误的。
我真的很想喜欢这本书。 我想被它苏格拉底式的问答式演示迷住。 我拥有计算机科学学位。 我教过孩子和成人如何编程。 我(完全公开)写了教人们如何编码的流行书籍。 我曾就递归进行过教学和演讲。 我读过道格拉斯·霍夫施塔特 (Douglas Hofstadter) 的《哥德尔·埃舍尔·巴赫》(Godel Escher Bach),这似乎开启了计算机科学家转作家之间“异想天开的刘易斯·卡罗尔”的比喻。 如果说有人应该是喜欢这本书的人,那应该是我。
我不喜欢这本书。 问题很多。
第一:如果你在大约 5% 的人群中喜欢根据任意逻辑规则操纵抽象符号只是为了根据任意逻辑规则操纵抽象符号,你会喜欢这本书的。 这是给你的书。 五颗星,无视此评论并给我发一封令人讨厌的电子邮件,告诉我“我就是不明白”和“它不应该教编程,而是一种思维方式”。 你应该读读这本书。 你会从中得到很多。
如果你是想学习编码的人,或者是计算机科学专业的大一学生,或者是喜欢科普并想了解更多计算知识的人,请把这本书放回书架并退后一步。 当你有足够的距离时,转身就跑。
在我进入问题之前,我认为这本书如果有一个强硬的编辑器会很棒。 Friedman 和 Felleisen 采取的方法很新颖,应该鼓励进行实验。 但这并不意味着每个实验都是成功的。 一个好的编辑会指出我将在这篇评论中提出的所有问题,将它们发回绘图板/写字台,然后他们会带着更好的东西回来。 几轮这样,毫无疑问,他们就会有一本好书。 相反,他们没有适合初学者的好书,他们有一本多年熟悉和经验的计算机科学教授认为适合初学者的书。
最大的问题之一是问答形式。 就像酒精一样,适度饮用很好,但是当你只依赖它时就会出现几个问题。 这本书从字面上从不直接解释任何东西。 从来没有给任何东西一个明确的定义。 您只能自己推断。 想不通,或者更糟的是,认为您已经想通了,但实际上是在错误的假设下工作? 太糟糕了。 这本书还在继续,本书中的所有概念都建立在前一本书的基础之上。 词汇表是任何教科书中的标准部分,对这本教科书来说会非常有帮助,但遗憾的是,作者认为自己不想拥有一个。 在前言中,作者说:“我们相信你可以形成自己的定义,因此会比我们为你写下每个定义时更好地记住和理解它们。” 这是一个彻头彻尾、完全错误的信念。 而且它方便地使作者不必,你知道,用简单的语言解释它们的确切含义。
仅仅依靠苏格拉底式的方法是不切实际的。 这本书到底发生了什么? 我们是在看两个人进行问答对话吗? 这本书是在问读者这个问题吗? (在这种情况下,读者不可能知道其中大多数人的答案,即你第一百次遇到它时的紧张程度令人毛骨悚然。)这些是读者向本书提出的问题吗? 它实际上是一页一页地改变。 在某些“问题”(实际上是答案)和“答案”(实际上是问题)中,尤其是在后面的章节中,您会看到仅采用苏格拉底式方法的不切实际。 这本书需要停止束缚于问答形式; 几段解释性的段落本来可以造福世界。
本书开头有“十诫”和“五条规则”,但它们并不是最清晰的陈述:“当在原子列表上重复出现时,lat,问两个问题:(null?纬度)和其他。” 什么? “else”这个词是一个问题? 读者应该如何从勉强解析为英语的句子中获取知识? 如果诫命列表有页码参考书里解释它们的地方就好了,而不是你自己留下来。 顺便说一下,第一诫分为三个不同的地方(最后一个在第五诫之后列出)。 任何编辑都会告诉他们“将其分为三条诫命”。 在很多地方,编辑的简单建议就可以让读者省去很多麻烦。
这些章节中没有规定目标。 你会发现自己在问“这有什么意义?” 和“他们要去哪里?” 不断地。 不断地。 这些章节进入内容冷火鸡并且总是突然结束。 真的,一章结束的地方和下一章开始的地方之间的分界线可以在任何地方。 章节名称也没有提供任何提示:“玩具”、“Cons the Magnificent”、“Shadows”。 最后一个问题特别令人恼火:“什么是 (lat?ls) where ls is ((( )) (() ( )) (() ( )()))” 回答是“这是非常错误的。” 和“那很糟糕吗?” 回答说:“你必须提防阴影。” 然后这一章立即结束。 这是整本书中唯一一次出现“阴影”一词。 哦,是的,非常神秘。 但他们不是在写推理小说,而是在写一本教科书,解释他们到底是什么意思。 对于拥有 CS 学位的人来说,这是一个糟糕的比喻,但对于初学者来说,这简直是难以理解。
因为这本书是源源不断的问答,它形成了面包屑的踪迹:一旦迷路,你就会完全迷路。 你无法浏览这本书,当你拿起它从上次离开的地方开始时,很难记住你在看什么和试图理解什么。 一切都建立在以前的内容之上,所以这本书需要你把所有的东西都加载到你的短期记忆中。 有人会说这是一个“特性”,但我说这是一个惊人的错误。
喜欢这本书并向您推荐这本书的人是出于好意,但对于什么是有效的教学工具一无所知。 这就是我写这篇严厉评论的原因(我已经坐了一年,想知道我是否真的应该发布它)。 我最担心的,不,令人毛骨悚然的恐惧是,很多人会拿到这本书,读了它,却根本没有读懂,并得出结论说他们太笨了,无法学习计算机科学。 “如果我连画着可爱大象的书都看不懂,我怎么能看懂更难的计算机科学教科书呢?”
这本书的章节需要更好的标题。 它需要词汇表和解释性段落。 它需要每一章的目标和总结。 它需要放弃可爱的隐喻和腼腆的自己弄清楚我们的意思的方法(或者至少在之后添加直截了当的解释)。 它需要一个编辑器。 但是所有这些因素使得这本书不像一本异想天开的苏格拉底式递归算法书那样有趣。 Little Schemer 根本不是初学者的好指南; 这是一个虚荣心的项目。