clojure
朱利安·甘布尔(Julian Gamble)撰写的《艾迪生·韦斯利(Addison Wesley)的Clojure食谱》是一本新书,旨在帮助开发人员更深入地了解Clojure,从对语言功能和语法的一般理解转向建立集成外部库的更复杂项目。 因此,Clojure食谱不针对Clojure初学者,也不提供对语言本身的任何介绍,尽管所提供的所有代码都经过了全面注释,因此即使是没有经验的读者也可以遵循。
这本书包含了一系列独立的“周末项目”,旨在向开发人员展示他们如何解决Clojure的常见问题,包括:
- 创建REST客户端和服务器;
- 使用ClojureScript和Pedestal创建Web服务器;
- 创建宏以简化日志记录并将阻塞代码转换为非阻塞;
- 实施DSL以使Datomic,Clojure分布式数据库和Datalog的实施更易于使用;
- 构建使用Datomic的应用程序;
- 使用Cascalog构建执行Hadoop查询的应用程序;
- 使用Java消息服务(JMS)和Storm;
- 使用宏来改善调试。
如前所述,每一章旨在成为一个独立的项目,可以在相对较短的时间内完成。 这意味着将在几章中介绍更复杂的主题(例如,使用Cascalog和Datomic),每章重点介绍一种特定功能。
本书中的所有章节都具有相似的结构:向读者介绍了一个手头项目的案例,然后引导他们完成所有必需文件的创建过程,最后对代码进行了简要说明。 鉴于本书的务实方法,对于读者而言,必须认真执行并实际实施他们感兴趣的每个项目。另一方面,尽管前几个项目明显地被要求阅读,但并非严格要求按顺序阅读各章。在内容上比其他内容更具介绍性,还介绍了如何设置Clojure开发环境。
InfoQ与作家Julian Gamble谈了他的书和对语言的看法。
InfoQ:您能解释一下写这本书的动机吗? 为什么有必要?
朱利安·格兰伯(Julian Gamble) :在开始该项目时,“食谱”类型中没有一本书,这在编程语言书籍中很常见。 这似乎是一个明显的差距,我的编辑同意了。 在该项目期间,O'Reilly的书在很短的时间内交付,并抓住了这个位置(但是作者和我是朋友,我们在会议上排名前五。这是Clojure社区!)后来我发现是这种类型有所不同-Clojure食谱的重点是具有完整运行示例的项目大小(而不是片段大小)章节。
另一个动机是发展Clojure社区和使用函数式编程,但是提供了许多可访问的示例。 本书假定了潜在的程序员群体,他们正在寻求了解Lisp风格的编程,函数式编程范例和Clojure本身。 我想为人们提供途径,使他们即使在大型企业工作,也能够使用Clojure并将其用于日常工作中。
InfoQ:您能简要介绍一下您的背景和您对Clojure的经验吗? 是什么导致您选择Clojure?
朱利安(Julian) :我读了很多保罗·格雷厄姆(Paul Graham)和史蒂夫·耶格(Steve Yegge)关于软件开发的文章。 两者都非常擅长说服“ Java日间程序员”,那里有太多东西,如果您不超出Java语言的范围,就会错过它。 两者都非常关注Lisp。 我从2007年开始在球拍和Common Lisp中工作,发现了我喜欢的一本书,名为《 The Little Lisper》。
然后,Clojure在2007年宣布成立,我看着社区围绕它爆炸式增长。 我可以将JVM背景与LISP的功能结合起来。 Clojure很高兴,每个人都在写关于他们发现的内容的博客文章。 编写代码并与人们谈论Clojure很有趣。
InfoQ:您的书针对具有Clojure经验的开发人员。 您在阅读本书时会给他们什么建议? 他们应该期待什么? 他们不应该期待什么?
朱利安 :“一些经验”,我会说:“知道Clojure有括号,并且知道什么是读评估打印循环(REPL)”。 《 Clojure食谱》是一本面向边做边学的人的书。 对于那些说“我想在这个周末建立一个Clojure项目”的人来说,Clojure食谱是一本好书。 我从哪说起呢?”
读者应该期待有工作的项目,并说明它们的工作方式和原因,以及配方的“可动部分”。 读者不应期望对语法,数据结构,纯函数或STM进行自下而上的讨论-您可以谷歌搜索。 这是一本针对想要建造东西的人的书。
InfoQ:有几本关于Clojure的书可以解决语言的语法和语义。 您采用了不同的方法,试图覆盖各种用例,同时还覆盖了读者必须理解的所有相关细节。 您认为这种方法的主要吸引力是什么?
朱利安(Julian) :这种方法的主要吸引力在于,有些人的学习风格或学习语言的动机不同。 有些人喜欢一个完整的工作解决方案,然后他们可以进行调整和学习。 有些人喜欢直接进入并学习他们需要的生态系统基础。 有些人认为编程语言学习是达到目的的一种手段,而不是寻求知识的手段。 关于什么是最有益的,存在各种各样的意见。 Clojure食谱旨在“动手操作”,并提供大量帮助,助您一臂之力。
InfoQ:什么条件驱使您选择用例?
朱利安 :用例的选择有两个方面。 我问的第一个问题是:“ Clojure最擅长什么? Clojure中有什么比Java更容易?” 我问的第二个问题是:“如何在工作场所开始使用Clojure?”
简洁起见,我希望它们足够大以能够独立运行,但又要足够小以专注于特定想法。 关键是要能够调整它们以解决读者的问题(或至少是类似的问题)并使其运行起来,然后将其集成到更大的项目中。
InfoQ:哪种方法最有趣? 哪一个最难? 您是否想包含其他用例,但由于任何原因却无法纳入本书?
朱利安 :最有趣的是Pedestal Framework Server上的股票行情自动收录器。 它混合了服务器和客户端技术,最像是实际的业务应用程序。
最困难的一项(需要最长时间重写才能使它变得更好)是Datomic DSL上的系列章节。 这些章节可能是本书中最深入的章节。
我本想包括的一章,但不能成为一章来突破使用宏进行代码生成的限制,以解决与Rails框架类似的问题。 我有一个有效的演示和一个书面章节,向您展示如何将表名提供给正在运行的应用程序,它将生成路由和操作,并显示在运行时生成的所有模板。 您可以在运行时在REPL上修改模板。 尽管很酷,但我收到反馈说它需要太多的宏观知识,而不是它所增加的价值。 我将该章中孤立的部分拉进了一个称为“调试宏”的附录中。
InfoQ:您能否描述Clojure提供的一些功能,这些功能可以帮助程序员提高您的体验效率?
朱利安(Julian) :独特的Clojure功能包括软件事务存储(STM),持久不变的数据结构,通过读-评估-打印循环(REPL)进行交互式编程,通过编译为字节码而实现的强大JVM集成以及出色的Java互操作性。 通过挑战您对优质Java代码构成的假设,Clojure还将使您成为更好的Java程序员。
InfoQ:公司采用Clojure可以期望相对或竞争优势吗? 而当前的主要挑战是什么?
朱利安(Julian) :主要的竞争优势是上市时间。 我们的Clojure用户组中有一个人对此感到惊讶,他对这个承包商如此Swift地发布Web服务和网页感到惊讶,他不得不来找出原因。 保罗·格雷厄姆(Paul Graham)在他的文章《 击败平均值》中谈到了这一点。 Clojure还使使用更少错误的精简JVM的工作成为可能。
InfoQ:谈到Clojure在商业项目中的采用率越来越高,您认为推动这一趋势的最相关因素是什么?
朱利安(Julian) :Clojure非常适合Web服务,因此在微服务兴起的今天也是如此。 Clojure利用JVM,因此是在企业中采用的简便途径。 Clojure非常适合数据处理,因此可以很好地顺应大数据潮流。 Clojure令人愉快,并且很容易拿起并开始使用。
clojure