最近我们 InfoQ 编辑小组进行了一次交流,内容是关于我们最想推荐给 InfoQ 读者的,且在我们看来对程序员,架构师和管理人员最有影响力的书籍。下面是我们最终商议的 16 本书,其中还包括一些其它技巧,以及来自推荐这些书的编辑们的一些评论。
Alex Blewitt
解析极限编程(Extreme Programming Explained)(Kent Back)是一本不错的极限编程(XP)入门书,它能够让你即使在从未了解过任何敏捷方法的情况下,也能够很好地进行阅读。但是,还不能将它作为一本参考书来看。
我的参考指南是《算法导论(An introduction to algorithms)》(Cormen/Leiserson/Rivest/Stein),它是一本非常详尽和值得阅读的书籍。
可能你没听说过John Smith 写的《麻烦的IT 项目(Troubled IT Project)》,但是实际上它介绍了许多在管理项目时可能出错的事情。不仅如此,它还可以用来充当你手头所做项目的记分卡……
虽然我推荐的书籍可能要由你的经验水平和喜爱(或者说应该被推荐)的书籍类型来决定,但是我想它们还是非常值得一读的。Kent 的XP 书籍非常适合新手以及不熟悉敏捷的朋友,而 Cockburn 的书则更加适合于用经验的人。同样地,我不会硬把《算法导论》塞给一个什么都不知道的新手,但是如果你想知道怎样实现 B 树或者想了解如何衡量算法时间复杂度,那就绝对是必要的了。
Deborah Hartmann
在高度协作的敏捷编程开发环境下,Jean Tabaka 的著作《协作精解:软件项目领导的改进技巧(Collaboration Explained: Facilitation Skills for Software Project Leaders)》为疑难管理问题提供了解决之道,这些疑难管理问题诸如冲突(conflict)、人际沟通(interpersonal communication)和时间约束(time constraint)等等。如果你厌恶开会或者相信开会应该改进,不论是否参与敏捷项目,都应当阅读这本书!
Charles Humble
《计算机程序语言编译与设计(Structure and Interpretation of Computer Programs)》,作者为Harold Abelson,Gerald Jay Sussman,和Julie Sussman:一年前我在和一个朋友谈起我的代码能力停滞不前时,他向我推荐了’SIC-P’。这不是一本特别容易的书,如果你正在为某个问题寻找快速的解决方案,那么它不是你要找的。相反它是一本有益的,且需要精读的书。它对我编程上的影响要远大于其他任何书籍。
《设计模式(Design Patterns)》,作者为 Erich Gamma,Richard Helm,Ralph Johnson 和John Vlissides:这是继SIC-P 后又一本好书,虽然我得承认在第一次阅读的时候并不是很喜欢它。但是无可否认,这本书包含了丰富的面向对象设计专业知识,在我起初阅读的时候,只是觉得这些是有趣的理论,它们不会被真正使用到。但是随着时间的推移,我越来越多地体会到其中的思想,并且当我在进行设计工作时我仍然会不断地参考它。强烈推荐。
Mark Levinson
《敏捷软件开发:合作的游戏(第二版)(Agile Software Development: A Cooperative Game)》,作者Alistair Cockburn:这是我读过的关于敏捷软件开发的最有趣的书。Alistair 在书中并没有讨论任何一个方法,反而分析了形势运筹(game play),个体交流(individual communication)以及团队合作(team cooperation):这些都是软件开发中核心的元素。该书还包含了部分软件之外的敏捷,以及对各种方法的综述等等。
《团队的智慧》作者:Jon Katzenbach 和 Douglas Smith:书中 Katzenbach 和 Smith 通过研究许多行业中的真实团队,对“是什么为这些团队带来了成功”这个问题给出了一些真实并且严格地分析。书的末尾处你会发现“没什么能够确保创建高绩效的团队。你能做得最好的事情就是在合适的环境下来帮助形成这样的团队”。这本书和我的为什么Scrum 可行系列异曲同工。
Srini Penchikala
《企业应用架构模式(Patterns of Enterprise Application Architecture)》,作者Martin Fowler:我之所以喜爱这本书,是因为它涵盖了软件开发项目中架构师或开发人员碰到的大量设计问题。它可能是最好的模式书籍(连同四人组的《设计模式》),书中覆盖了像领域逻辑、表现层、会话状态管理,以及对象关系结构行为模式的主题。不管你现在是仍然使用之前的EJB3 J2EE 技术,JEE,还是在使用轻量级的像Hibernate 和Spring 的框架,抑或是使用一个.Net 应用程序,这本书中讨论的模式都是相关且有效的。这是一本每一个开发人员都必须阅读和拥有的书籍。
《领域驱动设计(Domain-Driven Design)》,作者Eric Evans:自从该书在2004 年面世以来,它已经成为了软件开发社区的一个极好的参考书。它强调协调软件设计和开发中的业务领域的重要性。书中讨论的一些概念, 如通用语言(Ubiquitous Language),模型驱动设计(Model-Driven Design),界定上下文(Bounded Context) 和防护层(Anti-Corruption Layer),可用于任何大中型业务领域以管理领域模型的复杂性。读完该书后,我开始在我的项目中尽可能地使用DDD 准则,并且我已经可以成功地消除贫血模型(Anemic Domain Model)和用一种更加面向对象的方法来处理领域逻辑了。书中讨论的概念都是独立于技术和框架的,因此它们可以应用在任何基于Java,.Net 或者其他技术的软件开发项目中。此外,该书还促使我在去年发表了“领域驱动设计与开发实践”的文章。这本书是从事创建和管理业务领域的软件开发人员的必读之书。
《企业集成模式:设计、构建及部署消息传递解决方案(Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solution)》,作者Gregor Hohpe 和 Bobby Woolf:在我2004 年第一次阅读该书的时候,就喜欢上了它。作者很好地组织并介绍了企业应用程序中平时用到的一些有用的异步设计模式,特别是那些涉及多系统集成的模式。该书主要讨论了各种集成风格,包括异步传递模式的核心“Messaging”技术。书中的例子包括了流行的借贷经纪人管理应用程序,该应用程序在当前的好几个ESB 框架中都有实现。这本书对当前的SOA 集成和ESB 框架(像 ServiceMix 、 Mule 和 Spring Integration )是一个不错的响应,因为这些框架均能支持书中提到的集成模式。
《人件(Peopleware - Productive Projects and Teams)》,作者Tom DeMarco 和 Timothy Lister:去年在一个朋友的推荐下阅读了该书。我不得不说它是我读过的最具影响力的书。书中作者借助了工业界的例子,调查和统计,说明了软件开发中的主要问题在于人(因此书名为人件(Peopleware)),而不是技术(像硬件或是软件)。他们认为开发人员,设计人员和其他脑力劳动者在达到了一个叫做“流”的境界后,可以在解决复杂问题上取得重大进展。而任何的打扰,不管是一封Email,一个电话,或者是一次起身走动,都会打破这个流,并且需要时间(根据统计平均需要15 分钟)来重新回到流中。根据作者的观点,一个管理人员的工作不是让他的小组成员去工作,而是让他们有可能地去工作。该书距首次出版已过去了20 多年,但是书中提到的概念仍然是相关且有效的,纵使它之后出现了许多新的软件开发方法和框架,以及敏捷项目的管理方法。这本书对于每一个管理人员和团队领头人都是必读之书,因为他们的职责就是管理小组人员。我不止一次地向每一位软件经理强烈推荐此书。
Werner Schuster
《 Pragmatic Thinking and Learning: Refactor Your Wetware 》,作者 Andy Hunt:这本书将实用主义程序员的观点带到了其应许之地:它扎根于我们的大脑之中。对于那些使用 Dreyfus 学习模式的人们,书中提供了大量方法,可以帮助他们更好地阅读,工作等。
《 Inside the Machine: An Illustrated Introduction to Microprocessors and Computer Architecture 》,作者 Jon Stokes:这本书收集了 Ars Technica 上多年来关于 CPU 和其他技术的文章。Jon Stokes(‘Hannibal’) 揭开了 CPU 的黑盒,道出各种玄机——包括现代 CPU,如当前的 X86 和 Power 处理也不例外。了解指令融合(instruction fusion)如何帮助改善重排序缓存(reorder buffer)效率,对于讨论饮水冷却器(water cooler)是大有裨益的,而了解存储器层次结构(memory hierarch)和缓存行为(cache behavior )如何影响现代 CPU 的性能只能帮助你优化皮毛。
再来看看 HOPL 会议的论文集。大多数论文都能在线查看,当然也有打印版本。似乎与C 语言一样具有单调命令式和括号的语言都可以使用不同的范式形成。随着这些东西的不断变化:未来的语言或是思想在十年里形成。HOPL 的论文是许多语言的详细历史,其中既包括了曾经令人瞩目或者将要令人刮目相看的语言,像 Smaltalk,Erlang,Lua,Lisp 或者其他语言。
Alan Kay 的关于《 Smaltalk 早期历史(The Early History of Smalltal)》的论文包含了许多丰富的信息。每年我都会读这篇文章,并且每次读完后都会发现一些新的东西;上次阅读之后我意识到了 Smaltalk 最初是基于 Actors 模型的。
HOPL 的论文显然主要关注的是历史——但是我发现许多开发人员都不知道发生的这些事件和之前形成的技术,哦,1995。当把一个有着 40 年历史的技术展现给‘经验丰富的’开发人员,而看到他们半信半疑时,确实有点令人不安(这就像是 Prometheus 赋予的新礼物,尽管它们会很快令人乏味)。
Ryan Slobojan
《 Effective Java 》,作者 Joshua Bloch:这本书已经成了 Java 开发中的圣经宝典之一。它让读者理解的不仅仅是语言本身(很多其他书籍都仅仅如此),还包括如何最高效的使用 Java 语言和 API 来创建快速,可靠,可扩展以及可维护的软件。书中的许多准则对其他编程语言也同样适用,正如优秀软件设计的大量理念都是通用的。读完该书后,我发现我写的代码有些不一样——阅读它们变得很容易,总共的代码行数减少了,并且在我隔段时间回过头来修复 bug 时变得很轻松。我觉得这本书对于使用 Java 语言进行开发的任何人都是一个必读之书——它告诉的不仅仅是那里是什么,它还告诉你何时怎样来最有效的使用它。
Stefan Tilkov
近些年我读的最好的一本书就是 Michael Nygard 的《Release It!》——涵盖了来自多位管理人员的实际建议。该书还包含了许多大规模系统失效的故事,并且 Michael 利用他丰富的经验提取出了一些通用的反模式 (anti-patterns) 和问题,这些问题在原始设计中反反复复出现。他接着说明了如何使用恰当的模式来解决这些问题。我觉得这本书由于包含了许多实际生活中的趣闻轶事,以及构建可用的系统时需要的实际建议,而极具娱乐性。
查看英文原文: InfoQ Editors’ Recommended Reading List 。
感谢霍太稳对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家加入到 InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。
评论