为了配合《Erlang/OTP并发编程实战》一书的发布,译者从亚马逊上摘录并翻译了Erlang and OTP in Action的三篇书评,以飨读者。三篇之中好评两篇、差评一篇:倒不是偏心,实在是因为这本书在亚马逊上只有这么一篇差评……

身为本书的译者,同时也作为一名曾被Erlang/OTP官方文档绕得云里雾里的开发者,个人认为本书最大的优点有二:第一是清晰地拆解了OTP中最为繁琐的内容,如发布镜像、版本控制、部署;第二是在阐述OTP概念的同时给出了大量产品级(而非Hello World级)的代码实例。

下文中那篇差评的部分观点我也很赞同,这本书的确不太适合完全没有接触过Erlang/OTP的初学者。我想,这是“实战”这一定位决定的。虽然全书花费了1/3的篇幅来讲解Erlang语言的基础知识,这一部分却略显鸡肋。作为完整的语言参考,它还略显不足——正如作者在第二章开头处所说:“我们希望这些材料足以助你消化本书后续的内容;不过在将Erlang用到正式项目上之前,你最好还是备上一本更完整的Erlang编程指南。”尽管如此,2.15小节仍然非常适合尚未习惯函数式编程的初学者阅读,这一小节很好地解释了尾递归,以及怎样用尾递归来代替常规命令式语言中的迭代结构(如“for”、“while”等)。

如果你对Erlang的基本语法已经相当熟悉,初步接触过OTP,却在官方文档中屡撞南墙,那么这本书就是为你准备的了。OTP中各种关键概念之间的关系、常用行为模式的最佳实践、发布和部署环节中各种错综复杂的配置,本书悉数给出了细致入微的阐述。

王婆卖瓜到此为止,下面来看看亚马逊上的读者们对本书的评价吧。

好一本菜鸟高手两相宜的Erlang/OTP开发大作!

  • 作者:Mr. Bookish, Mild and Meek
  • 评分:★★★★★
  • 反馈:14人中有13人认为这篇书评有用

这本书我刚看完一半,后半部分还只是草草浏览了一遍,但我已经爱上这本书了。

Erlang跟C#、Java等面向对象/命令式语言大相径庭,当初在看Joe Armstrong的Programming Erlang: Software for a Concurrent World的时候我就觉得学习曲线应该会比较陡。那本书总体上还不错,但有些地方我还是没太看明白,即便是最初几章也同样存在这种情况。于是我又找来了O'Reilly的Erlang Programming。这本稍微好点儿,但还是碰到了一些问题。80年代末90年代初的时候我曾经读过计算机科学的研究生,对合一(Unification,数理逻辑和计算机科学中的一个概念——译者注)、演绎型数据库(Deductive Database)、函数式编程、Lambda演算、Gul Agha的Actor并发编程以及分布式数据库等领域都有一定程度的了解。即便如此,我还是碰上了这么多困难。尤其是这两本书中和OTP相关的内容,实在是把我给弄晕了。直到后来,我开始从头拜读Logan等人的这本书。几位作者的那种以务实的口吻和实际的示例洗练地阐述问题的能力,着实令我叹服。这下好了,短短几天,Erlang和OTP就都没问题了。第2章简明扼要地介绍了Erlang编程。讲解OTP及相关工具的章节更是没的说。相对于仅对Erlang抱有“学术兴趣”的读者,本书更适合于那些打算将Erlang应用到实际产品代码中去的开发者。

就本书再多说两句:Erlang/OTP相关的工具很多,比如Mnesia、附带EXMPP库的XMPP服务器Ejabberd、web服务器Mochiweb和YAWS(即所谓的LYME平台)等等;在把玩了Erlang/OTP及这些工具之后,我认为它们共同构成了一套非常棒的应用系统开发平台(依我之愚见,我敢说是最棒的),基于这一平台,开发者可以干净利落地开发出健壮的世界级应用系统。很多人对这一平台的性能、可伸缩性、并发支持、分布式支持、容错性以及集成之便利大加赞赏;但就个人而言,我最在乎的还是它鹤立鸡群的开发效率。毕竟只要赔上足够的复杂度和精力,在Java EE、LAMP以及.NET等其它平台上一样能够换取那些架构层面的特性。一个开发平台,只需不到400页便能把大部分问题讲得一清二楚,本书作者固然功不可没,但平台自身的简练与表达能力才是更为关键的因素。不信你针对.NET或者Java EE写本同类的书试试!!

那么,你可能就要问了,面对那么多高成本、高难度、高出错率的开发项目,开源LYME套件的优势又那么明显,为何历经二十多年都未能席卷全球呢?尤其是那些受资源和市场时机制约的独立开发者以及小型开发团队和软件企业,他们为何不采用LYME呢?很快你便会意识到,Erlang的函数式特征、异乎寻常的编程思想以及相对短缺的文献,造成了一道陡峭的入门门槛。我想这本言简意赅的书将可以帮助更多普通程序员迈过这道门槛,并最终让软件开发社区中的一大部分人享受到LYME的高效和便利。听上去我好像是被Erlang给洗了脑了似的?各位不妨亲自看看这本书,试试Ejabberd、CouchDB等NoSQL数据库,还有YAWS等等;再拿它们跟你所熟知的同类产品做个比较,眼见为实。

最后,如果你和我一样正进入Erlang/OTP领域,那么不妨再看看Mitchell Hashimoto的Erlang博客,上面有一系列和OTP相关的文章。Logan等人的书中有些地方并未着重说明,而是让读者参考Erlang的在线文档,Mitchell的这些文章是这部分内容的一个很好的补充。

涉猎广泛无出其右

  • 作者:Richard J. Wagner
  • 评分:★★★★☆
  • 反馈:15人中有14人认为这篇书评有用

一部着眼于产品级代码开发的Erlang大作。

全书分为三大部分:

  1. Erlang及OTP基础
  2. 构建产品级Erlang应用
  3. 集成和调优

第一部分介绍了Erlang和OTP框架相关的基础知识。内容编排得当,非常适合初学者阅读。书中每隔几页便会穿插一副简图,用以诠释重要概念。OTP相关的内容尤为详细,中高级用户也会有所斩获。这一部分本身就是一份不错的Erlang指南,但又远远超出了指南的范畴。

第二部分以一个完整的应用构建场景为基础展开。书中描述了一个饱受性能问题拖累的web应用,正打算用Erlang搭建一套缓存以解燃眉之急。网络通信正是Erlang的强项,本书将带着读者一起自力更生、从头搭建一切必要的组件。众所周知,从掌握语法到掌握应用开发的最佳实践还有很长一段路要走,而这正是这一部分的价值所在。(本书既阐述了最佳实践也涵盖了语言的基础知识。)这一部分的几个章节惯用的手法都是先描述若干亟待实现的功能,再阐述如何用Erlang实现这些功能,最后一步步地给出完整实现。读起来就像是一组逐步深入的教程。

第三部分讲的是如何在Erlang应用中集成外部组件。示例中消息层面的集成借由JSON完成,更深层次的集成则在介绍Erlang语言层面的集成机制时进行了阐述。值得一提的是:Erlang-Java接口JInterface独占了一个章节(相较之下,其余Erlang书籍在这一方面的介绍都较为有限)。

这本厚达400多页的大部头编排精良、内容翔实、讲解清晰,非常值得一读。在此我向各级Erlang开发人员推荐这本书。

另类看法

  • 作者:NewLibertarian
  • 评分:★☆☆☆☆
  • 反馈:8人中有6人认为这篇书评有用

最近,我花了几周的业余时间来学习Erlang(着实令人印象深刻)。我算是个资深程序员(从业20多年了),并且有5年的专业LISP经验。我曾经读过并强烈推荐了由Thompson和Cesarini合著的Erlang Programming。对于Erlang初学者来说,那是本极好的入门书籍。然而,书中却没有深入讲解OTP。由于急于了解这一重要主题,我买来了Erlang and OTP in Action。首先,如果你从来没有写过Erlang程序,那么它不适合作为你的第一本入门书籍。书中对Erlang的基础知识只做了概要介绍。读完跟OTP相关的第一个章节之后(费了牛劲儿了!),在那些金光灿灿的书评的反衬之下,我感到非常的恼火和失望。(我猜这些书评都是已经对OTP有所了解的人写的吧?)问题出在哪儿呢?我原以为作者会以言简意赅的方式阐述和OTP相关的概念并配上一两个简洁的示例,结果呢,作者却搬出了一堆冗长晦涩的TCP服务器之类的东西,把读者彻底给弄晕了。对于不熟悉OTP的人来说,这种又臭又长的示例只会让人抓不住重点。我当时就想——哇哦,看上去很难缠啊。为了尝试换个角度,我转而求助于erlang.org在线文档中的相关章节。我早该这么干的!!在线文档没几页就把问题讲清楚了,给出的一系列示例也同样简单明了。

也许对那些相对熟悉OTP的人来说这会是本好书。过段时间我应该还会再看看这本书,如果情况真是那样,我会再给高分的。

更多来自国外亚马逊网站读者的评价。