SICP Python 描述 中文版wizardforcel.gitbooks.io
开始我看的是sicp裘宗燕老师翻译的第二版,但是lisp自己毕竟不了解且过于抽象,进展缓慢(并且之前拿起方向sicp多次),在看到有python版本,并有国内翻译版本之后,看起来比较顺利。
因为自己对python还算了解,所以,python中译本看的津津有味,如果是看lisp版本被lisp的一致性所惊艳,那么python版本会让你可以更快的了解这本书中的内容,全书的核心内容是各种抽象,递归,如何以小的函数逐渐组成大的系统,在第三章,作者甚至带你演示了如何只用python的函数实现面向对象,当你看到生成类的函数需要字典作为参数的时候,或许你就明白了为什么vue的options也是个字典。为什么要有data和method,vue的data相当于__init__(虽然这么说不是很对),vue的method就是类的各种方法(这不是废话),(当你看到作者甚至可以用序列(元组)和函数实现字典的时候,对于状态的把握,约束系统的实现,不由得叹为观止。)当你理解了类和对象内部的字典(实际上python对象就有__dict__),知道字典有get方法的时候,对于python中__setitem__的实现,对于如何元编程中如何访问不存在的方法,就了然于胸了,甚至可以联想到Ruby的method_missing方法,以及据说JavaScript的创始人是lisp的拥泵,JavaScript中的面向对象系统就是基于函数实现的啊。
这个时候也就可以理解,即便c和c++在语法层面没有面向对象的支持,但是,仍然可以实现面向对象,噫吁嚱,技近乎道啊。
在第4章解释语言的构造和解释的时候,虽然没有说什么AST,但是,有了前面树形的数据抽象和过程抽象的铺垫,了解基于树来解析语言,也就水到渠成了。以前看《python算法权威指南》的时候,对于数在语言解析中的应用,见猎心喜,叹为观止,但是实在是不懂。这本书真的讲解的非常透彻了,这些内容本身就具有一定的抽象性和复杂性,所以一次看完不太现实,我也是在地铁上和早上的赖床时间看完python版本的,现在虽然大脑会了,但是里面的代码还不能完全手写出来,所以我还需要二刷,三刷,但是如果你有时间,可以慢慢看起来,用python实现,用java实现,用JavaScript实现,甚至用c++实现,用任何你熟悉的语言实现,一定会大有收获的。我不是计算机专业的学生,也不是智商高的人,都能有所收获,相信哪些计算机专业的孩子们收获更大。
书中讲了简易计算器语言的实现,logo语言的实现,那么你再去看Babel中AST的编程的时候就事半功倍了。
作为少儿编程从业者,这些也许在教孩子的时候不会讲,但是这本书给我带来的对语言的底层理解,可以让我设计更好的课程,把编程的本质更好的传达给孩子,抽象,小的部分组合成大的部分,这种思维之美,而不是画个图,整个游戏,花里胡哨的,什么是编程区别于其他学科特有的思维,什么是计算思维,这本书带给我的惊喜太多了。路漫漫其修远兮,吾将上下而求索。(ps:我有师范背景和近8年公立学校教学经验)。
官方的说法是,现在人们已经不需要从底层实现一些功能了,因为现在的语言很成熟了,所以采用了更为广泛使用的python。无论是lisp也好看,python也好,都着重于用简单的形式,通过组合构造复杂的系统,看起来纷繁的系统,无不起于毫末,sicp带你领略语言的本质,打开语言的黑箱,让你从更高的抽象层级上看待编程语言。