开源应用架构(卷 2)
简介

艾米·布朗和格雷格·威尔逊

在我们对该系列第 1 卷的介绍中,我们写道

建筑设计和软件架构有很多共同点,但有一个关键区别。虽然建筑师在他们的训练和职业生涯中会研究数千座建筑,但大多数软件开发人员只熟悉少数几个大型程序……因此,他们会重复彼此的错误,而不是在彼此的成功基础上进行构建……本书是我们试图改变这种情况的一种尝试。

自从那本书出版一年以来,二十多个人努力创造了您手中的续集。他们这样做是因为他们相信,正如我们所相信的那样,软件设计可以通过实例来教授——学习像专家一样思考的最佳方式是研究专家是如何思考的。从 Web 服务器和编译器到健康记录管理系统,再到 Mozilla 用于发布 Firefox 的基础设施,周围都有很多经验教训。我们希望通过将其中一些收集到本书中,我们可以帮助您成为更好的开发人员。

——艾米·布朗和格雷格·威尔逊

贡献者

安德鲁·阿列克谢夫(nginx: 安德鲁是 Nginx, Inc. 的联合创始人——nginx 背后的公司。在 2011 年初加入 Nginx, Inc. 之前,安德鲁曾在互联网行业和企业各种 ICT 部门工作。安德鲁拥有圣彼得堡电气工程大学的电子学文凭和安特卫普管理学院的工商管理硕士学位。

克里斯·阿特利(Firefox 发布工程: 克里斯热爱他在 Mozilla 管理发布工程师的工作。他拥有滑铁卢大学的计算机科学学士学位。他的在线闲聊可以在 http://atlee.ca 找到。

迈克尔·拜尔(SQLAlchemy: 迈克尔·拜尔自 1990 年代中期以来一直在从事开源软件和数据库方面的工作。如今,他活跃在 Python 社区,努力将良好的软件实践传播给更广泛的受众。在 Twitter 上关注迈克:@zzzeek

卢卡斯·布拉克(Firefox 发布工程: 卢卡斯于 2009 年毕业于多伦多的森尼卡学院,获得软件开发学士学位,但在多亏了戴夫·汉弗莱(http://vocamus.net/dave/)的“开源主题”课程,他还在学生时代就开始与 Mozilla 的发布工程团队合作。卢卡斯·布拉克 在开源方面的冒险之旅可以在她的博客 http://lukasblakk.com 上关注。

艾米·布朗(编辑): 艾米在软件行业工作了十年,之后辞职创办了一家自由编辑和书籍制作业务。她拥有滑铁卢大学的数学学位,但没有用上。她在网上可以在 http://www.amyrbrown.ca/ 找到。

迈克尔·德罗特布姆(matplotlib: 迈克尔·德罗特布姆在 STScI 工作,为哈勃和詹姆斯·韦伯太空望远镜开发科学和校准软件。自 2007 年以来,他一直参与 matplotlib 项目。

伊丽莎白·弗拉纳根(Yocto: 伊丽莎白·弗拉纳根 在英特尔公司的开源技术中心工作,担任 Yocto 项目的构建和发布工程师。她是 Yocto 自动构建器的维护者,并为 Yocto 项目和 OE-Core 做出贡献。她住在俄勒冈州的波特兰,可以在网上 http://www.hacklikeagirl.com 找到。

杰夫·哈迪(动态语言运行时和 Iron 语言: 杰夫从高中就开始编程,这让他获得了阿尔伯塔大学的软件工程学士学位,并让他获得了目前在西雅图亚马逊公司编写 Python 代码的职位。自 2010 年以来,他还领导 IronPython 的开发。您可以在 http://jdhardy.ca 找到更多关于他的信息。

苏玛纳·哈里哈雷斯瓦拉(MediaWiki: 苏玛纳是 MediaWiki 的社区经理,是维基媒体基金会的志愿者开发协调员。她之前曾参与 GNOME、Empathy、Telepathy、Miro 和 AltLaw 项目。苏玛纳是 Ada Initiative 的咨询委员会成员,该组织支持开放技术和文化中的女性。她住在纽约市。她的个人网站在 http://www.harihareswara.net/

蒂姆·亨特(Moodle: 蒂姆·亨特 起初是一名数学家,在剑桥大学获得了非线性动力学博士学位,然后决定做一些更不深奥的事情。他现在在英国米尔顿凯恩斯的开放大学担任首席软件开发人员,负责基于 Moodle 的学习和教学系统。自 2006 年以来,他一直是 Moodle 测验模块和问题库代码的维护者,他仍然很喜欢这个角色。从 2008 年到 2009 年,蒂姆在澳大利亚的 Moodle 总部办公室工作了一年。他在 http://tjhunt.blogspot.com 上写博客,并在 Twitter 上可以找到 @tim_hunt

约翰·亨特(matplotlib: 约翰·亨特 是 TradeLink Securities 的量化分析师。他在芝加哥大学获得了神经生物学博士学位,研究的是同步的实验和数值建模工作,并在神经学领域继续他的同步过程研究,从事癫痫方面的博士后研究。他在 2005 年离开学术界,进入量化金融领域。作为一名狂热的 Python 程序员和 Python 科学计算讲师,他是科学可视化软件包 matplotlib 的最初作者和主要开发人员。

路易斯·伊巴涅斯(ITK: 路易斯在开发 Insight Toolkit (ITK) 方面工作了 12 年,这是一个用于医学图像分析的开源库。路易斯坚定地支持开放获取和在科学出版物中恢复可重复性验证。自 2007 年以来,路易斯一直在伦斯勒理工学院教授关于开源软件实践的课程。

迈克·卡梅尔曼斯(Processing.js: 迈克开始他的计算机科学职业生涯时,没有通过计算机科学技术课程,于是他转而去攻读人工智能硕士学位。自 1998 年以来,他一直在编程,而不是为了编程而编程,他的重点是让人们获得他们需要完成工作的工具。他也专注于许多其他事情,包括编写一本关于日语语法的书,以及详细解释贝塞尔曲线的数学原理。他很少使用的主页在 http://pomax.nihongoresources.com

卢克·卡尼斯(Puppet: 卢克于 2005 年出于恐惧和绝望创办了 Puppet 和 Puppet Labs,目标是生产更好的运营工具,改变我们管理系统的方式。自 1997 年以来,他一直在发表和演讲他的 Unix 管理工作,自 2001 年以来专注于开发。他开发和发布了多个简单的系统管理员工具,并为 Cfengine 等成熟产品做出了贡献,并在世界各地介绍了 Puppet 和其他工具,包括 OSCON、LISA、Linux.Conf.au 和 FOSS.in。他与 Puppet 的工作是 DevOps 和实现云计算承诺的重要组成部分。

布拉德·金(ITK: 布拉德·金 作为软件流程小组的创始成员加入了 Kitware。他获得了伦斯勒理工学院的计算机科学博士学位。他是 Insight Toolkit (ITK) 的最初开发人员之一,这是一个用于医学图像分析的开源库。在 Kitware,金博士的工作重点是开源软件开发的方法和工具。他是 CMake 的核心开发人员,并为许多开源项目做出了贡献,包括 VTK 和 ParaView。

西蒙·马洛(Glasgow Haskell 编译器: 西蒙·马洛 是微软研究院剑桥实验室的开发人员,过去 14 年一直使用 Haskell 进行研究和开发。他是 Glasgow Haskell 编译器的主要开发人员之一,负责其运行时系统。最近,西蒙的主要精力集中在为 Haskell 提供对并发和并行编程的强大支持。可以通过 Twitter 上的 @simonmar 或 Google+ 上的 +Simon Marlow 联系西蒙。

凯特·马特苏戴拉(可扩展 Web 架构和分布式系统: 凯特·马特苏戴拉 曾在多家科技初创公司担任工程副总裁/首席技术官,包括目前在 Decide,以及之前的 SEOmoz 和 Delve Networks(被 Limelight 收购)。在加入初创公司界之前,她在亚马逊和微软担任软件工程师和技术主管/经理。凯特拥有丰富的实践知识和经验,可以构建大型分布式 Web 系统、大数据、云计算和技术领导力。凯特拥有哈维·穆德学院的计算机科学学士学位,并在华盛顿大学完成了商业和计算机科学硕士学位。您可以在她的博客和网站 http://katemats.com 上了解更多信息。

杰西卡·麦克凯勒(Twisted: 杰西卡 是一位来自马萨诸塞州波士顿的软件工程师。她是 Twisted 的维护者、Python 软件基金会的成员,也是波士顿 Python 用户组的组织者。她可以在网上 http://jesstess.com 找到。

约翰·奥杜因(Firefox 发布工程: 自 2007 年 5 月以来,约翰一直领导着 Mozilla 的发布工程小组。在那段时间里,他领导了工作,以简化 Mozilla 的发布机制,提高开发人员的生产力——并且在做这一切的同时,还改善了发布工程师的生活。约翰在 19 年前开始参与发布工程,当时他发布的软件重新引入了之前版本中已修复的错误。约翰的博客在 http://oduinn.com/

纪尧姆·波米耶(MediaWiki: 纪尧姆 是维基媒体基金会的技术传播经理,该基金会是非营利组织,负责维基百科和 MediaWiki。纪尧姆自 2005 年以来一直是维基百科的摄影师和编辑,他编写了一本关于维基百科的法国手册。他还拥有物理学工程学士学位和生命科学微系统博士学位。他的在线主页在 http://guillaumepaumier.com

本杰明·彼得森(PyPy: 本杰明 为 CPython 和 PyPy 以及多个 Python 库做出贡献。总的来说,他对编译器和解释器感兴趣,尤其是针对动态语言的编译器和解释器。在编程之外,他喜欢音乐(单簧管、钢琴和作曲)、纯数学、德语文学和美食。他的网站是 http://benjamin-peterson.org

西蒙·佩顿·琼斯(Glasgow Haskell 编译器: 西蒙·佩顿·琼斯 是微软研究院剑桥实验室的研究员,在此之前,他是格拉斯哥大学的计算机科学教授。他在学生时代受到纯函数式编程的优雅性的启发,西蒙将近三十年的研究都集中在追求这个想法,看看它会引领到哪里。Haskell 是他的第一个成果,并且仍然是他大部分研究的平台。 http://research.microsoft.com/~simonpj

Susan Potter (Git): Susan是一位精通多种编程语言的软件开发人员,喜欢质疑。自1996年以来,她一直设计、开发和部署分布式交易服务和应用程序,最近转向为软件公司构建多租户系统。Susan是Git、Linux和Vim的狂热用户。你可以在Twitter上找到她,她会随机分享有关Erlang、Haskell、Scala和(当然还有)Git的思考 @SusanPotter

Eric Raymond (GPSD): Eric S. Raymond是一位四处游荡的人类学家和捣蛋哲学家。他也写了一些代码。如果你现在还没有笑出来,那你为什么还要读这本书?

Jennifer Ruttan (OSCAR): Jennifer Ruttan住在多伦多。从多伦多大学获得计算机科学学位毕业后,她一直在Indivica担任软件工程师,该公司致力于通过使用新技术来改善患者的医疗保健。在Twitter上关注她 @jenruttan

Stan Shebs (GDB): 从1989年开始,Stan就将开源作为他的日常工作,当时苹果公司的一位同事需要一个编译器来为一个实验性的虚拟机生成代码,而GCC 1.31恰好就在手边。在完成对人们常怀疑的GCC的Mac System 7移植版本(它是实验的控制案例)的后续工作后,Stan加入了Cygnus Support,在那里他为FSF维护GDB,并参与了许多嵌入式工具项目。2000年回到苹果公司,他为Mac OS X开发了GCC和GDB。在Mozilla工作了一段时间后,他跳槽到了CodeSourcery,现在是Mentor Graphics的一部分,在那里他继续为GDB开发新功能。Stan的教授风格可以解释为他从犹他大学获得的计算机科学博士学位。

Michael Snoyman (Yesod): Michael Snoyman获得了加州大学洛杉矶分校的数学学士学位。在美国担任精算师一段时间后,他搬到了以色列,开始了网络开发的职业生涯。为了快速制作高性能、健壮的网站,他创建了Yesod Web Framework及其相关库。

Jeffrey M. Squyres (Open MPI): Jeff在思科的机架服务器部门工作;他是思科的代表,参加MPI论坛标准机构,并且是MPI-2标准的章节作者。Jeff是思科开源Open MPI项目的核心软件开发人员。自1990年代中期他还是研究生的时候,他就一直在高性能计算(HPC)领域工作。在军队服役一段时间后,Jeff于2004年获得了圣母大学的计算机科学与工程博士学位。他在博客中分享关于高性能计算网络的信息。

Martin Sústrik (ZeroMQ): Martin Sústrik是消息传递中间件领域的专家,参与了AMQP标准的创建和参考实现。他参与了金融行业中各种消息传递项目。他是ØMQ项目的创始人,目前正在研究将消息传递技术与操作系统和互联网协议栈集成。可以通过以下方式联系他:sustrik@250bpm.comhttp://www.250bpm.com,以及Twitter上的@sustrik

Christopher Svec (FreeRTOS): Chris是一位嵌入式软件工程师,目前正在开发低功耗无线芯片的固件。他之前曾设计x86处理器,在处理非x86处理器时,这比你想象的更有用。Chris拥有普渡大学的电气与计算机工程学士学位和硕士学位。他和妻子以及金毛猎犬住在波士顿。你可以在网络上找到他:http://saidsvec.com.

Barry Warsaw (GNU Mailman): Barry Warsaw是GNU Mailman的项目负责人。自1995年以来,他一直是Python的核心开发者,并且是几个Python版本的发布经理。他目前在Canonical担任软件工程师,负责Ubuntu平台基础团队。可以通过以下方式联系他:barry@python.org或Twitter上的@pumpichank。他的主页是http://barry.warsaw.us.

Greg Wilson (编辑): Greg在过去25年中一直在从事高性能科学计算、数据可视化和计算机安全领域的工作,是几本计算书籍(包括2008年Jolt奖得主Beautiful Code)和两本儿童书籍的作者或编辑。Greg于1993年获得了爱丁堡大学的计算机科学博士学位。

Armen Zambrano Gasparnian (Firefox Release Engineering): Armen自2008年以来一直在Mozilla担任发布工程师。他曾在发布、开发人员基础设施优化和本地化方面工作。Armen在多伦多的教会之石教会与年轻人一起工作,并且多年来一直在国际基督教非营利组织工作。Armen拥有森尼卡学院的软件开发学士学位,并在马拉加大学学习了几年的计算机科学。他的博客地址是http://armenzg.blogspot.com.

致谢

我们感谢谷歌对Amy Brown在这个项目上的工作提供了支持,以及Cat Allman为安排这项工作所做出的努力。我们还要感谢所有技术审稿人

Johan Harjono Justin Sheehy Nikita Pchelin
Laurie McDougall Sookraj Tom Plaskon Greg Lapouchnian
Will Schroeder Bill Hoffman Audrey Tang
James Crook Todd Ritchie Josh McCarthy
Andrew Petersen Pascal Rapicault Eric Aderhold
Jonathan Deber Trevor Bekolay Taavi Burns
Tina Yee Colin Morris Christian Muise
David Scannell Victor Ng Blake Winton
Kim Moir Simon Stewart Jonathan Dursi
Richard Barry Ric Holt Maria Khomenko
Erick Dransch Ian Bull Ellen Hsiang

尤其是Tavish Armstrong和Trevor Bekolay,没有他们的额外帮助,这本书的制作时间将会更长。还要感谢所有愿意审阅但由于各种原因无法完成审阅的人,以及所有帮助和支持这本书制作的其他所有人。

还要感谢James Howe (http://jameshowephotography.com/),他慷慨地让我们使用他拍摄的纽约公平大厦的照片作为封面。

贡献

数十位志愿者努力制作了这本书,但仍然有很多工作要做。你可以通过报告错误、帮助将内容翻译成其他语言,或者描述其他开源项目的架构来帮助我们。如果你想参与进来,请通过gvwilson@third-bit.com与我们联系。