Andrew Binstock

原文链接

过去20年间,我们一直在甄别软件开发工具中各个类别的最佳产品。图书无疑是最多候选者的类别,今年也不例外。在2010年7月1日至2011年6月30日出版的所有图书中,出版商、书店和读者共选出了51本候选图书。

候选图书实在太多了,所以Jolt大奖的评审团决定先将范围缩小到15本值得推荐的入围图书,然后第二轮选择出最优秀的6本,并排定得奖位次。年度的最佳图书获得Jolt优胜奖,其次的两本获得Jolt效率奖,剩下的三本就是Jolt入围奖。对这6本书的位次抉择,以及另外9本书的取舍,让大部分评委都觉得相当难办。很多最终没有获奖的图书都是好书,是值得关注的。我们会另外讨论。

以前,我像前面那样提到入围图书难分轩轾时,通常指的是所有的获奖图书。不过,今年的情况有点特别,Jolt优胜奖的得主是一骑绝尘的。总而言之,这一结果证实了我最初对这本书的评价,当时我就把它称为“2010年最重要的技术书”。以下对获奖图书的介绍中,我就直接引用了原来的评论了。

(介绍评委成员,略。)

综合这么多经验丰富的评委意见,我们非常有信心,Jolt大奖得主代表了今年图书的最高成就。

(几句客套话,略。)

下面,我们一一介绍获奖图书。

第一名:Jolt优胜奖

《持续交付:发布可靠软件的系统方法》(人民邮电出版社,2011年10月)

Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation, by Jez Humble and David Farley

在Jolt大奖的评选工作中,我评审了大量的图书。但是,我已经太长时间没有读到这种能够颠覆产业规则的图书了。

本书有个基本前提:我们需要在此前持续集成的基础上再进一步,设计不仅仅是构建和测试的活动的更完整周期。确切地说,这个新方向要求:对每一次签入,都在所有平台上进行构建和测试,并为所有平台创建和部署最终的可发布版本。这个方法的好处是开发机构在任意给定时刻都拥有:1)对部署问题的即时反馈;2)可部署的可执行文件;3)在所有平台上的构建、测试和部署的完整自动化流程。

在为数众多的活动中进行持续集成,这个简单概念会产生深远的影响,而每一个影响都将使你的流程变得更好。最重要的影响是必须自动化以编码开始的整条流水线,作者强调的确实是每一步。大家对自动化颇有微词的一个共同点是部署。不过,Humble和Farley说得很清楚,你就必须“背负着痛苦而前行”,并修补流程,以便它能够自动化。(如果不清楚怎样完善和自动化部署,那就考虑一下虚拟化。是否可以在虚拟机上模拟当前的系统,然后渐进式地简化软件的部署,以达到自动化?很好,你已经开始上手了。)

不过,部署的机制只不过是你面临的挑战中最不起眼的一个。(这里顺便说一句,本书的书名有点误导:其实部署只是本书内容的一部分。)你还需要在即将交付的每一个平台上构建、运行并测试软件。如果不得不为不同平台改变配置并重置数值的话,你是没有可能做得到这一点的。然而,你不必像摩西那样,在沙漠中痛苦地踯躅了40年都无法跨越约旦河,作者在书中已经给你指明一条路径了。关键在于使用单一的代码库,并将依赖于平台的数据都转移到配置文件中。这不是很容易就做到的,但作者给出了足够多的好建议。

测试是本书深入讨论的另一个主题。在持续交付的环境下,测试就不仅仅是运行单元测试和回归套件了,而是运行所有的测试:单元、集成、UAT(User Acceptance Test,用户验收测试),等等。如何有效地将它们自动化,可能是本书的篇幅最多的一个分支。即便你不接受持续交付的概念,这部分的内容都绝对已经值回书价了。它以一种崭新的方式拓展了我们的思路,这是Digg和Reddit上成千上万关于敏捷测试的文章所从未涉猎的。我们很快就会看到,用户将可以完成更多的自动化,从惨兮兮的半手动现状转变为完整、持续自动化的顺畅流程。

本书令我印象深刻的是,作者不断地挑战艰难的问题。这些问题丝毫没有让作者气馁,他们根本不打算将这些问题一带而过。作者凭藉自己广博的经验,以独到的角度细致地探讨了这些艰深的主题。

关于过程这一主题,我实在是从未读到过比这本更好的书籍。我相信,《持续交付》这本书未来将会重新定义敏捷过程和持续集成。其影响力之于过程领域,将不啻于1999年Martin Fowler的《重构》之于代码领域。

并列第二名:Jolt效率奖

Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages, by Bruce A. Tate

Mining the Social Web: Analyzing Data from Facebook, Twitter, LinkedIn, and Other Social Media Sites, by Matthew A. Russell

并列第四名:Jolt入围奖

The Art of Computer Programming, Volume 4A: Combinatorial Algorithms, Part 1, by Donald E. Knuth

The Joy of Clojure: Thinking the Clojure Way, by Michael Fogus and Chris Houser

Domain-Specific Languages, by Martin Fowler with Rebecca Parsons

相关阅读:

图灵访谈系列之二:乔梁谈持续交付

持续交付成熟度模型 V1.2