前言

好程序员和差程序员的区别在于理解能力。差劲的程序员不理解自己做的事情,优秀的程序员则相反。信不信由你,道理就是这么简单。

写这本书,是为了帮助各位程序员,以适用于各种编程语言、各种项目的广阔视角来理解软件开发。本书以普通人容易理解的方式,讲解了软件开发的科学规律。

如果你是程序员,这些规律能够说明,为什么有些开发方法有效,另一些无效。这些规则也会指引你在日常工作中做出开发决策,帮助你的团队进行高质量的交流,最终制定出合理的计划。

如果你不是程序员,但身在软件行业,仍然可以享受到本书的价值:

  • 它既是提供给初级程序员的优秀教材,又包含对高级程序员相当有用的知识;

  • 它帮助你更深入地理解软件工程师某些行为的原因,以及软件为何要以某种方式来开发;

  • 它帮助你理解优秀的软件工程师做决定的基本原理,让你与开发人员更顺畅地沟通。

理想的状态是,软件行业中的每个人都可以阅读并理解这本书,即便他们没有多少编程经验,甚至母语不是英语也无所谓。如果你已经有相当的技术积累,把握书中的概念会更加容易,但是大部分内容不需要编程经验就能理解。

实际上,本书虽然讲的是软件开发,却没有多少代码。这怎么可能呢?答案是,其中的思想适用于各种软件项目、各种语言。要明白如何运用这些思想,并不需要懂得某一门具体的编程语言。相反,本书中包含了大量的实例和比喻,它们会让你更好地理解所表述的每条原理。

最重要的是,这本书是为了帮助你而写的,希望能助你在软件开发中保持头脑清醒、遵守秩序、写出简洁代码。我希望它读起来是一种享受,它有助于改善你的生活,你的软件。

排版约定

本书中格式约定如下。

黑体
表示新术语。

等宽字体
用于代码示例,在段落中使用时,表示与程序有关的部分,比如变量或者函数名。

AAA 此图标表示提示、建议或者普通的旁注。

BBB 此图标表示警告或者留意。

致谢

Andy Oram和Jolie Kanat两位编辑为本书作了巨大的贡献。Andy的建议和意见深入且充满智慧;Jolie的坚持和支持促成了本书的最后出版,她为早期手稿所做的大量编辑工作尤其值得感谢。

Rachel Head是本书的文字编辑,做整理和校对的工作,她的才华无与伦比。

还要感谢的是与我在开源社区中一同工作或讨论过问题的程序员——尤其是在Bugzilla项目中共事的几位开发人员,有了你们的帮助,我才有清楚的思维,讲解这些年来真实存在的,活生生的软件系统。

这些年来,我的blog上收到的评论和反馈,帮我确定了本书的形式和内容。在这里要感谢参与其中的所有人,即使你们仅仅给我鼓励,或者是告诉我你读过我的文章。

从个人来说,我尤其要感谢Jevon Milan、Cathy Weaver,以及与他们工作过的所有人。确切地说,有了他们,我才能写出这本书。最后,要向我的朋友Ron致敬,没有他,这本书根本不可能出现。

使用示例代码

让我们助你一臂之力。也许你要在自己的程序或文档中用到本书中的代码。除非大段大段地使用,否则不必与我们联系取得授权。例如,无需请求许可,就可以用本书中的几段代码写成一个程序。但是销售或者发布O’Reilly 图书中代码的光盘则必须事先获得授权。引用书中的代码来回答问题也无需授权。将大段的示例代码整合到你自己的产品文档中则必须经过许可。

我们非常希望你能标明出处,但并不强求。出处一般含有书名、作者、出版商和ISBN,例如“Code Simplicity:The Science of SoftwareDevelopment by Max Kanat-Alexander(O’Reilly,2012) 版权所有,978-1-4493-1389-0”。如果有关于使用代码的未尽事宜, 可以随时与我们取得联系,permissions@oreilly.com。

Safari®在线图书

Safari 在线图书是应需而变的数字图书馆。它能够让你非常轻松地搜索7500 多种技术性和创新性参考书以及视频,以便快速地找到需要的答案。

订阅后就可以访问在线图书馆内的所有页面和视频。可以在手机或其他移动设备上阅读,还能在新书上市之前抢先阅读,也能够看到还在创作中的书稿并向作者反馈意见。复制粘贴代码示例、放入收藏夹、下载部分章节、标记关键点、做笔记甚至打印页面等有用的功能可以节省大量时间。

这本书(英文版)也在其中。欲访问本书英文版的电子版,或者由O’Reilly 或其他出版社出版的相关图书,请到http://my.safaribooksonline.com 免费注册。

我们的联系方式

请把对本书的评论和问题发给出版社。

美国:

O’Reilly Media, Inc.

1005 Gravenstein Highway North

Sebastopol, CA 95472

中国:

北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035)

奥莱利技术咨询(北京)有限公司

O’Reilly 的每一本书都有专属网页,你可以在那儿找到关于本书的相 关信息,包括勘误表、示例代码以及其他信息。本书的网站地址是: http://www.oreilly.com/catalog/9781449313890

中文书: http://www.oreilly.com.cn/index.php?func=book&isbn=9787115302380

对于本书的评论和技术性的问题,请发送电子邮件到: bookquestions@oreilly.com

关于本书的更多信息、会议、资源中心和网络,请访问以下网站:

http://www.oreilly.com

http://www.oreilly.com.cn

目录

  • 版权声明
  • 常识——译者序
  • 前言
  • 第1章 引言
  • 第2章 缺失的科学
  • 第3章 软件设计的推动力
  • 第4章 未来
  • 第5章 变化
  • 第6章 缺陷与设计
  • 第7章 简洁
  • 第8章 复杂性
  • 第9章 测试
  • 附录A 软件设计的规则
  • 附录B 事实、规则、条例、定义
  • O’Reilly Media, Inc.介绍