成书手记

成书手记

《Clojure经典实例》:编程语言习得

作者/ 王海鹏

王海鹏是一位独立的咨询顾问、培训讲师、译者和软件开发者,1994年毕业于华东师范大学。他拥有20余年编程经验,目前主要的研究领域是算法交易,对各种新技术都有兴趣,已翻译20余本软件开发类图书。

 

“熟悉与优雅正交。”

——Rich Hickey

约二十年前,我买过一本高等教育出版社出版的《LISP 语言》,作者是马希文、宋柔。可惜当年没有老师指导,自己水平不够,未能深入下去,只留下了一点模糊的印象:LISP 语言适用于人工智能,括号很多。

几年前,图灵公司的朋友送我一本《黑客与画家》,我连夜看完,重新燃起了对 LISP 的兴趣。我在书评中写道:“读完之后有一种想去学习 LISP 语言的冲动。一个不懂 LISP 的 Java 程序员,不是一个好的 C++ 程序员。”

现在,我终于找到了机会,开始学习 Clojure 这种运行在 JVM 上的 LISP 方言。经过一段时间的学习,我完全被它迷住了!

首先吸引我的是它的函数式编程特性。作为一个学习 C++ 和 Java 多年的程序员,我已习惯在程序中使用各种名词抽象,也就是领域术语,希望在程序中体现领域专家的思想和认识水平。而在 Clojure 编程中,虽然它也很适合领域抽象,但它的抽象程度更高,它希望达到数学家认识世界的水平。问题的开头通常是“给定一个无限序列……”,而常见的例子是如何实现斐波那契数列。

Leslie Lamport 说过,要将事情描述得清晰准确,人类发明的最好语言就是数学。这种对“表达的经济性”的追求,对于中国人是不陌生的。中国是诗歌的国度,而且古人对言简意赅的追求也有许多例子,比如“逸马杀犬于道”的故事。所以我觉得,LISP/Clojure 在精神上与有追求的中国程序员是契合的。

其次,它特别适合开发领域特定语言(DSL)。在 LISP 社区中流传着一个笑话,可以说明这一点:任何足够大的软件,最后都会实现一个半调子 LISP 解析器。LISP 的底层抽象极其简单,允许程序员设计更多的抽象,来描述这个世界。

学习一门新的语言,会改变学习者的思维方式。在面向对象编程时,我们更多关注单个对象。在函数式编程中,我们更多关注函数和集合。在工作中,不一定马上有机会使用 Clojure,但其中学到的思维方式,将对编程产生立竿见影的影响。在翻译本书时,我同时在用 Lua 开发项目,学习了 Clojure,让我能写出更简洁、更优雅的 Lua 代码。

学习新语言有这样一些原则:(1)专注于与你相关的内容;(2)从学习这门语言的第一天起,就把它当作你的交流方式;(3)当你听得懂别人在说什么时,就会不知不觉慢慢习得这门语言;(4)语言不是大量的知识积累,而更像一种生理训练;(5)心理状态和生理状态都很重要,要愉快和放松。对于模棱两可要有一定的容忍性,对于细枝末节不要过于纠结,因为那会把你逼疯。

本书提供了大量的例子,覆盖了日常编程领域的方方面面,正是学习 Clojure 的好读物。在翻译本书的过程中,我学到了很多,在此郑重推荐给大家。不足之处,还望大家指正。

 

{%}

《Clojure经典实例》涵盖150多个具体实例,展示了有经验的Clojure开发者如何用这门JVM语言完成各种编程任务。解决方案全面广泛:从构建动态网站和应用数据库到网络通信、云计算、高级测试策略等,面面俱到。这些实例源于全球60多名顶级Clojure开发者。