layout | title |
---|---|
default |
前言 |
木工是一门很困难的工艺,人们可以花费一辈子来学习如何把它做好。但是木工不是建筑学:如果我们跳出pitch boards and miter joints这样的细节来看,建筑作为整体是需要设计的,这既是一门艺术也是一门工艺或者科学。
程序设计也是一门很困难的工艺,人们可以花费一辈子来学习如何把它做好。但是,程序设计不是软件架构。很多程序员花费数年时间思考(反复思考)大型设计问题:这个应用程序需要扩展吗?如果需要,是通过某种插件机制提供一个脚本接口呢,还是别的完全不同的方式?什么应该在客户端完成,什么应该交给服务器,甚至对于这个应用程序,主从结构是否是一个合适的思考方式?这些不是程序设计的问题,就像在哪里放楼梯不是一个木工问题。
建筑学和软件架构有很多相同之处,却有一点重要的不同。在接收培训时以及在整个职业生涯中,建筑师会研究数以千计的建筑,而大多数软件开发者只了解没多少大型程序。且往往是那些他们自己写的程序。他们从来不去研究史上的大型程序,或者阅读资深工作者对那些程序设计的评价。因此,他们常常会重复别人犯过的错误,而不是在别人成功的基础上开发。
我们尝试用这本书来改变这种情况。每一章分别描述一个开源应用程序的架构:它是怎么组织起来的,各个部分怎么交互,为什么是那样构成的,哪些教训也适用于其他大的设计问题。这些都是由最了解相应软件的人写的。他们有数年乃至数十年设计和再设计复杂应用程序的经验。这些应用程序规模的范围从简单的绘图程序到基于Web的电子表格,再到编译器工具箱和数百万行的可视化软件包。有的只有几年的历史,而有的已经有接近三十年历史了。它们的共同之处是它们的作者都曾深入思考过他们的设计,并愿意与你分享他们的想法。希望你会喜欢他们的文章。
Amy Brown (编辑){: #brown-amy}: Amy拥有滑铁卢大学的数学学士学位,在软件业有十年从业经历。现在她写也编辑一些书,有些是关于软件的。她住在多伦多,有两个孩子和一只很老的猫。
Dirkjan Ochtman (Mercurial){: #ochtman-dirkjan}: 2010年,Dirkjan计算机硕士毕业。他曾在一家金融行业的初创公司工作过3年。如果不消磨他的空余时间,he hacks on Mercurial, Python, Gentoo Linux and a Python CouchDB library。他住在美丽的城市阿姆斯特丹。他的个人网站是http://dirkjan.ochtman.nl/。
Greg Wilson (editorial){: #wilson-greg}: 在过去的25年里,Greg工作在高性能科学计算、数据可视化和计算机安全领域,是几本计算机书籍(including the 2008 Jolt Award winner Beautiful Code)以及两本儿童读物的作者或者编辑。1993年,Greg获得了爱丁堡大学的博士学位。他在http://third-bit.com和http://software-carpentry.org写博客。