读完《SICP》是一种怎样的体验?

A classical book is people often talked about, but never read.

这是西西弗书店里的一个标语,原文记不清楚了,感觉放在这里很应景。标题中的SICP是英文 The Structure and Interpretation of Computer Programs的缩写,amazon.com用户对该书的评分成两极分化的态势。这本书很奇特,仿佛调味品中的芥末,喜欢的人爱到不行,不爱的人闻一下都会难受。

sicp 英文本封面

这本书从出版至今近33个年头。在国外很流行,然而在国内却非常的小众。这本书经常出没在各种编程书籍的推荐单中,也有很多人好奇,到底有多少中国学生认真读完了它,应该非常非常少吧。对于scheme的语法,很多人都不习惯。lisp系的(,)让很多熟悉了C系语法的人感到很别扭。下面举两个例子:
sicp ex1.3 scheme 版本

(define (sum-square-largest x y z)
  (cond ((and (<= x y) (<= x z))
         (+ (* y y) (* z z)))
        (else
        (sum-square-largest y z x))))

sicp ex1.3 java 版本

long sumSquareLargest(int x, int y, int z) {
    if (x <= y && x <= z) {
        return y * y + z * z;
    }
    return sumSquareLargest(y, z, x);
}

这两段代码实现同样的功能,只是为了对比一下二者语法上的不同。相比较而言java版本显得“可读性”更好。我想这是很多人放弃学习lisp系语言最冠冕堂皇的理由了。

scheme代码看多了写多了会慢慢的喜欢上这种优雅的表示方式。这是无法与外人道哉的一种美。书中代码还有一些非常好的编码约定, 对于谓词变量以?结尾,比如good-enough?言下之意该变量(值)或者方法(返回值)应该为true或者false。对于"赋值型"的函数则以!结尾,一个大大的️,因为改变程序的"状态“意味着side effect会陡然增加控制程序行为的复杂性,对于这类的函数需要给予足够的重视。对于选择函数car,cdr这类函数都是一种无副作用“轻量”的操作。写程序过程中,给变量命名绝对是一门艺术,scheme的命名约定方式,提供了一个良好的规范。对于用户自定义的操作如果都遵循这种方式,将会大大提高代码的可维护性,甚至可以通过代码静态扫描的方式找出那些有赋值动作选择函数。其实在实际生产过程中已经遇到好多次这样的案例,服务名称看起来是个读接口,但是内部实现却违反了接口的约定,具有副作用,久而久之这类的服务早晚会让服务使用方踩坑。这是读sicp的体验之一。

现在很多编程语言都是基于图灵可计算理论以及冯诺依曼体系结构模型设计出来,和图灵的可计算模型相等价的另一套模型则是阿隆索.邱奇的lambda演算。相较于图灵机lambda演算则要简单、优雅至极,下面是lambda 演算形式化表述:

<expr> ::= <identifier>
<expr> ::=(λ<identifier> .<expr>)
<expr> ::=(<expr> <expr>)

是的,就这么简单的三条规则,就完全可以和图灵机媲美。在读完sicp之后,你会感到无比的震惊。虽然本书的作者没有将这部分内容作为主线来介绍,但是无形之中已经将lambda演算的神奇之处展露无遗。有些是在书本的正文中介绍,有些则是通过习题的方式介绍给读者。比如,如何用lambda来实现邱奇数,如何实现其算数运算;如何从lambda来实现分支判断;如何实现基本的cons,car,cdr 等等。放眼望去,除了lambda算子之外一切皆是语法糖。当然,读完第四章你还会看到令人拍案叫绝的Y combinator

人脑理解迭代,神脑理解递归。

这句话是看完Y combinator的深刻感受。这是读sicp读出的体验二。

其实sicp贯穿全书的理念应该是教会读者控制程序复杂性的手段——抽象:过程的抽象,数据的抽象,语言的抽象。MIT两位天才级的作者,用众多合适的实例,巧妙的将这一手段展现的淋漓尽致。大神Peter Norvigamazon.com书评 很好的说明了一切 。如此大规模集中式的抽象训练没有任何书籍能够与之媲美,这才是编程语言设计最好的书籍。这是第三个感受,这也应该是任何读者都会有的感受!

如此优秀的一本书,大多数读者上止于第三章,后面的内容就很少再去读了,实在是可惜。设计实现一门编程语言应该是任何一个有技术追求的程序员的梦想,而第四、五章就是教你如何实现一门新的编程语言的解释器。如何扩展扩充修改原有的scheme解释器,如何让你的新语言具备OO功能,如何实现逻辑式编程语言,如何实现具备惰性求值的解释器等等。甚至你可以实现自己的GC, 顺便说一句,GC的引入还得要归功于lisp这门古老的编程语言。当然,最后的两章的内容比真正的“编译技术”要简单一些,毕竟这不是一本介绍编译技术的书籍。作者引入的所有例子都是为了更好的让读者理解程序设计的本质是什么,如何更好的控制系统的客观复杂性。这是一本教你造汽车的书籍,而不是教你开车的书籍。

youtube上有两位作者1986年给某公司员工培训的视频,视频也非常的有意思,在视频里作者还不时的讽刺一下那个年代的"人工智能"浪潮,其实就是简单的规则模式匹配而已。历史又不断的在重演,人工智能这个话题每隔一段时间都要被推到一个新高度,然后又冷下来。对“停机问题”的深刻理解,以及计算本质的理解,会让你倾向于相信:机器永远不会有智能。那些重复的机械的劳动最终必定会被机器取代,对于创造性的脑力工作者,比如程序员,机器将永远都取代不了。

阅读sicp有哪些困难?

  • 时间。如果是在校生,至少也要花一学期的课余时间。如果是已工作了,有可能这辈子都读不完。
  • 编程思维。99%的程序员平时使用的基本上都是命令式的编程语言,到函数式编程思维方式需要转变。
  • 内容比较难,这是客观的事实。确实比较难。

sicp有什么缺点吗?有!它会让你在精神满足感之余,有一种孤独感。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,914评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,935评论 2 383
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,531评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,309评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,381评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,730评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,882评论 3 404
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,643评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,095评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,448评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,566评论 1 339
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,253评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,829评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,715评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,945评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,248评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,440评论 2 348

推荐阅读更多精彩内容