写点什么

SICP,我的函数式编程启蒙书

用户头像
Kurtis Moxley
关注
发布于: 2020 年 08 月 17 日
SICP,我的函数式编程启蒙书

从2018年末开始至今,自学编程以来,前后阅读过计算机基础及程序开发的书籍倒是有不少,除去一些专门的讲解工具类的,像编程语言、框架、数据库这样的具体技术的之外,还包括《算法导论》、《现代操作系统》等等一些口碑优良的基础教材,起初选择这些书,都是依据知乎、豆瓣等平台的编程方面的高手、行家的推荐,最后根据自己的经济情况、能力选来进行阅读学习的。



当然,本意上,我其实想写一个系列,就是专门写我在自学计算机过程当中,阅读过的一些书籍,以及它们给我带来了哪些收获,不过因为没有太多的主线,所以正好赶上近期在复读《SICP》,因此也就顺便拿这本书作为这个系列的一个开篇,和诸位聊一聊这本书。

这本书是什么

《SICP》自然是缩写了,全名《Structure and Interpretation of Computer Programs》,中文名叫《计算机程序构造与解释》,由麻省理工学院的三位教授编写,目前最新的版本为第二版,这是这本书的初探。

它说了什么话题

虽然这本书看似是在讲述Scheme,一门源自Lisp语言的方言,但远不止步于此,实际上,Scheme在这里只是一个阐述的工具,更多的东西,借助Scheme我们要“召唤出一个叫做‘Lambda’的神灵”,让这个神灵帮助我们去运用Scheme,从最初的基础计算,逐步到最后,用Scheme实现自己的编译器,全部用Scheme实现出来,期间的工作,深入骨髓地释解计算机程序涉猎的方方面面。

有别于我们接触更多的命令式编程风格,Scheme运用的是函数式编程,而且,正如作者在本书课程提到的那样,“我会很快教会你用Scheme编写可以使用的程序,就像教你如何下国际象棋一样”,元素非常简单,但是,“仍然需要你大量练习”。

对于我的影响

正如这篇文章题目所说,这本书是我的函数式编程启蒙书,老实说,最早我看到这本书的时候,其实并未把这本书当作是什么必须读的东西,因为一开始买这本书,只不过是为了临时凑我的订单的优惠,当时还有塞奇威克的《算法》我当时正在啃,感慨于Java和C#编写程序的爽脆多汁。

后来的一天,想起来这本书自从买到手,就从来没看过,偶然读了前一两章,不说函数式编程这么高大上的东西,光Scheme的一大堆括号,就真的看得我头大,直接放回到了书架。过了将近三个星期,又是一个无聊的下午,我又试着拿起来这本书,慢慢研读一番,然后在自己电脑上安装好Scheme,敲下示例代码,突然开窍,感觉比起Java,Scheme实在是简练得如此干净,遂开始逐渐读了下去,到最后,迄今为止,这本书竟然成了我为数不多完整读完的计算机类书籍之一,而也从那时,我开始热衷于大规模尝试函数式编程,正如这本书作者提到的那样,“一个叫做‘Lambda’的神灵”让我看到了不一样的世界,甚至我如今有一个看法,函数式编程更贴近“计算机”当中的“计算”二字,计算机始于数学,而函数式编程又源于数学当中的函数,实在是天作之合。

最后,一点别的

但是,这本书真的就很十全十美吗?老实说,我个人看法,并不是。

我个人的看法,几乎是本书唯一的Bug,还是Scheme。不否认Scheme确实很精炼简洁,但是现实状况,至少在国内,很少有见到有企业用Lisp系作为主力开发语言,甚至本书原作者也已经建议,使用Python代替Scheme学习此书,官方都已经“放弃”的方案,我们还是“听人劝,吃饱饭”吧……

当然也不至于特别沮丧,这本书的实现,也随着如今函数式编程的逐渐流行,有了更多的选择,举一例子,新加坡国立大学的cs1101课程,改用JavaScript实现了这本书的全部代码,感兴趣可以关注一番:https://source-academy.github.io/sicp/



至于说我自己的选择,我在近期重新阅读学习这本书的时候,则开始转用Scala实现这本书的内容,毕竟照顾到生产与学术的平衡,Scala做得非常到位,而且,同样都是函数式为主,Lambda这位神灵在Scala里仍然保持着旺盛的生命力,这是一件让人高兴的事情。

发布于: 2020 年 08 月 17 日阅读数: 253
用户头像

Kurtis Moxley

关注

Console.WriteLine("Never say die"); 2020.07.16 加入

学化工的码字员,函数式真是个好东西

评论

发布
暂无评论
SICP,我的函数式编程启蒙书