内容简介
主要讲述了计算机系统的开发领域。在每章中的漂亮代码都是来自独特解决方案的发现,而这种发现是来源于做者超越既定边界的远见卓识,而且识别出被多数人忽视的需求以及找出使人叹为观止的问题解决方案。
本书介绍了人类在一个奋斗领域中的
创造性和灵活性:
计算机系统的开发领域。在每章中的漂亮代码都是来自独特解决方案的发现,而这种发现是来源于做者超越既定边界的远见卓识,而且识别出被多数人忽视的需求以及找出使人叹为观止的问题解决方案。
本书33章,有33位做者,每位做者贡献一章。每位做者都将本身心目中对于“美丽的代码”的认识浓缩在一章当中,张力十足。33位大师,每一个人对
代码之美都 有本身独特的认识,如今尽收眼底的放在一块儿,对于热爱程序的每一个人都不啻一场盛宴。 虽然本书的涉猎范围很广,但也只能表明一小部分在这个软件开发这个最使人兴奋领域所发生的事情
。
编辑推荐
38位大师级的程序员,一步步讲解他们的项目架构,开发时的种种折中考虑(tradeoffs)以及什么时候必须打破常规,寻求突破。
全球38位顶尖高手、众多语言之父经典之做。
本书收录的是软件设计领域中的一组大师级做品。每一章都是由一位或几位著名程序员针对某个问题给出的完美的解决方案,而且细述了这些解决方案的巧妙之处。
本书既不是一本关于设计模式的书,也不是一本关于软件工程的书,它告诉你的不只仅是一些正确的方式或者错误的方式。它让你站在那些优秀软件设计师的肩膀上,从他们的角度来看待问题。
本书给出了38位大师级程序员在项目设计中的思路、在开发工做中的权衡,以及一些打破成规的决策。
做者简介
John Bentley是美国Avaya实验室的一位计算机科学家。他的研究领域包括
编程技术、算法设计以及软件工具与界面设计。他已编写了数本关于编程的书籍, 还撰写了大量的文章,主题涉及从算法理论到软件工程的各个方向。他于1974年在
斯坦福大学得到学士学位,并于1974年得到硕士学位以及于1976年在
北卡罗来纳大学得到博士学位,随后在卡耐基-梅隆大学任教6年,教授计算机科学。1982年他加入
贝尔实验室,并于2001年离开贝尔实验室并加入 Avaya实验室。他曾是
西点军校和
普林斯顿大学的访问教授、曾经参与开发过软件工具、
电话交换机、电话以及网络服务。
Tim Bray于1987-1989年间在加拿大的
安大略省
滑铁卢大学负责牛津英语词典项目,1989年与他人联合建立了Open Text公司,在1995年启动了最先的公共网页搜索引擎之一,在1996至1999年间与他人共同发明了XML 1.0并合做编写了
《Namespaces in XML》规范,在1999年他建立了Antarctica Systems公司,并于2002-2004年被Tim Berners-Lee任命在W3C技术架构组中工做。目前,他在Sun Microsystems公司Web Technologies部门任主管,他有一个很受欢迎的博客,而且参与主持IETF AtomPub工做组。
Bryan Cantrill是Sun Microsystems公司的一位杰出的工程师,在他的职业生涯中主要从事Solaris内核的开发。最近他与同事Mike Shapiro和Adam Leventhal一块儿设计并实现了
DTrace,这是一个用于产品系统动态控制的工具,得到了《
华尔街日报》2006年度的最高创新奖。
Douglas Crockford毕业于公立学校。他是一位登记选民,拥有本身的汽车。他曾开发过
办公自动化系统。他曾在Atari公司从事过游戏和音乐研究。他曾是 Lucasfilm有限公司技术部门的主管,以及Paramount公司New Media部门的主管。他建立了Electric Communities公司而且担任CEO。他仍是State 软件公司的建立者和CTO,正是在这个公司中他发明了JSON数据格式。他如今是Yahoo!公司的一位架构师。
Rogerio Atem de Carvalho是巴西校园技术教育联合中心(Federal Center for Technological Education of Campos,CEFET Campos)的一位教师兼研究人员。他在
奥地利的
维也纳得到了2006年度IFIP杰出学术领导奖(Distinguished Academic Leadership Award),以表彰他在免费/开源企业资源计划(ERP)上所作的研究工做。他的研究领域还包括决策支持系统和软件工程。
Jeff Dean于1999年加入Google,目前是Google系统架构小组的成员。他在Google主要负责开发Google的网页抓取、索引、查询服务以 及广告系统等,他对搜索质量实现了屡次改进,并实现了Google分布式计算架构的多个部分。在加入Google以前,他工做于DEC/Compaq的 Western实验室,主要从事软件分析工具、微处理器架构以及信息检索等方面的研究。他于1996年在华盛顿大学得到了博士学位,与Craig Chambers一块儿从事面向对象语言的编译器优化技术方面的研究。在毕业以前,他还在
世界卫生组织的艾滋病全球规划署工做过。
Jack Dongarra于1972年在
芝加哥大学得到数学学士学位,并于1973年在伊利诺理工大学得到计算机科学硕士学位,又于1980年在
新墨西哥大学得到 应用数学博士学位。他在
美国阿贡国家实验室(Argonne National Laboratory)一直工做到1989年,并成为了一名著名科学家。他如今被任命为田纳西大学计算机科学系的计算机科学杰出教授。他是美国橡树岭国家 实验室(Oak Ridge National Laboratory ,ORNL)计算机科学与数学部的杰出的研究人员,
曼彻斯特大学计算机科学与数学学院的Turing Fellow,美国莱斯大学计算机科学系的副教授。他的研究领域包括线性代数中的
数值算法,
并行计算,高级计算机架构的应用,
程序设计方法学以及用于并行 计算机的工具。他的研究工做包括开发、测试高质量的数学软件以及整理相关文档。他在如下开源软件包和系统的设计及实现上作出了贡献:ISPACK, LINPACK, the BLAS, LAPACK, ScaLAPACK, Netlib, PVM, MPI, NetSolve, Top500, ATLAS, 和 PAPI。他公开发表了大约200篇文章、论文、报告以及技术备忘录,还参与编写了数本著做。他于2004年得到了IEEE Sid Fernbach奖,以表彰他在高性能计算机的应用中使用了创新的方法。他不只是AAAS,ACM和IEEE的成员,仍是美国工程院的院士。
R. Kent Dybvig是
印第安纳大学计算机科学系的一位教授。在印第安纳大学任教两年以后,他于1987年在
北卡罗来纳大学得到了博士学位。他在设计和实现编程语 言的研究上作出了重要的贡献,包括控制运算符、句法抽象、
程序分析、编译器优化、寄存器分配、多线程以及
自动存储管理等。在1984年,他建立了Chez Scheme软件并一直是主要的开发人员。Chez Scheme的特色在于快速的编译时间、可靠性以及可以高效地运行内存需求巨大的复杂程序,它已经被用于构建企业集成、网页服务、虚拟现实、机器人药品抽 检、电路设计以及其余的商业系统。它还能够用于各类层次的
计算机教育以及许多其余领域中的研究。Dybvig是《The Scheme Programming Language, Third Edition》(MIT Press出版社)一书的做者,以及即将发布的“Revised6 Report on Scheme”文档的编辑。
Michael Feathers是Object Mentor 公司的顾问。在过去七年间,他一直活跃于
Agile社群,他的工做主要是与世界各地不一样的团队合做,培训以及指导。在加入Object Mentor公司以前,Michael设计过一种编程语言,并为这种语言写了一个编译器。他还设计了一个庞大的多平台类库以及用于控制的框架。 Michael开发了
CppUnit,也就是最初把
JUnit移植到
C++;以及FitCpp,也就是把FIT移植到C++。在2005年, Michael编写了《Working Effectively with Legacy Code》(Prentice Hall出版社)一书。在与各个团队合做的间隙,他的大多数时间都花在研究大型代码库中的设计修改方式方面。
1995年,Karl Fogel和Jim Blandy一块儿建立了Cyclic软件公司,这是第一个提供商业CVS支持的公司。1997年,Karl增长了对
CVS匿名只读存储仓库访问的支持,这 样就能够更方便地访问开源项目中的开发代码。1999年,他工做于
CollabNet公司,主要从事管理
Subversion的建立和开发工做,这是 CollabNet公司和一群开源志愿者们从头开始编写的开源版本控制系统。2005年,他编写了《Producing Open Source Software: How to Run a Successful Free Software Project 》(O'Reilly出版社;在http://producingoss.com上有联机版本) 一书。2006年,他在
Google担任了短时间的开源技术专家以后离开Google并成为了Question-Copyright.org网站的全职编 辑。他目前仍然参与了多个开源项目,包括
Subversion和GNU Emacs。
Sanjay Ghemawat是一位Google Fellow,工做于Google的系统架构小组。他设计并实现了分布式的存储系统,文本索引系统,性能分析工具,一种数据表示语言,一个
RPC系统,一 个
malloc函数实现以及许多其余的库。在加入Google以前,他是DEC系统研究中心的一位研究人员,主要从事系统性能分析和优化
Java编译器的 工做,他还实现了一个
Java虚拟机。他于1995年在
麻省理工大学得到博士学位,研究领域为
面向对象数据库的实现。
Ashish Gulhati是互联网隐私服务Neomailbox的首席开发员,以及Cryptonite的开发员,这是一个支持OpenPGP协议的安全网页邮件系 统。他有着15年的商业软件开发经验,是印度最先的数字版权活动家之一和F/OSS程序员,他编写了大量的开源
Perl模块,这些模块能够从CPAN上下 载。在1993~1994年间,他在《PC Quest》和《DataQuest》等杂志上发表了大量文章,这是在印度主流计算机刊物中最先向读者介绍自由软件,GNU/ Linux,Web和Internet的文章,在这些文章发表多年之后,印度才拥有了商业的互联网访问,这些文章还构成了PC Quest Linux Initiative活动的重要组成部分,这个活动促使自1995年以来,在印度分发了一百万份Linux光盘。在得到了一组可穿戴的计算机后,他很快地 成为了一个电子人。
Elliotte Rusty Harold是
新奥尔良人,他会按期返回新奥尔良去吃一大碗海鲜干波汤(Gumbo)。不过,他目前住在
布鲁克林附近的Prospect Heights,和他生活在一块儿还有他的妻子Beth,狗Shayna,和两只猫Charm(以夸克命名)和Marjorie(以他的岳母命名)。他是纽 约科技大学的一位副教授,主要讲授Java、XML以及面向对象编程。他的Cafe au Lait网站是互联网上最流行的独立Java网站之一;他的另外一个网站Cafe con Leche 则成为了最流行XML站点之一。他编写的书籍包括《Java I/O》,《Java Network Programming》和《XML in a Nutshell》(这三本书都由O'Reilly出版社出版),以及XML Bible (Wiley出版社)。他目前的研究领域包括用
Java来处理XML的XOM库、Jaxen XPath引擎以及Amateur媒体播放器。
Brian Hayes为《American Scientist》杂志编写计算机专栏,他还拥有一个博客。过去,他还为《Scientific American》、《Computer Language》、 以及《The Sciences》等杂志编写过相似的专栏。他编写的《Infrastructure: A Field Guide to the Industrial Landscape》(Norton出版社)一书于2005年发行。
Simon Peyton Jones,硕士,于1980年毕业于
剑桥大学三一学院。在工做两年后,他在
伦敦大学学院担任了7年的讲师,而后在
格拉斯哥大学担任了9年的教授,后来于 1998年加入微软研究中心。他的研究领域包括函数式编程语言及其实现和应用。他领导了一系列的研究项目,主要研究用于单处理器机器和并行机的高质量函数 式语言系统的设计和实现。他是函数式语言
Haskell的主要设计者,此外他仍是被普遍应用的Glasgow Haskell编译器(GHC)首席设计师。他还编写了两本关于函数式语言实现的教科书。
Jim Kent是
加利福尼亚大学圣克鲁兹分校
基因信息小组(Genome Bioinformatics Group)的一位研究学家。Jim从1983年起就开始编程。在职业生涯的前半段,他主要从事绘画和动画软件的开发,他开发了Aegis Animator、 Cyber Paint以及 Autodesk Animator等获奖软件。1996年,因为厌倦了基于Windows API的开发工做,他决定在生物学上追求他的兴趣,并于2002年得到了博士学位。在研究生期间,他编写GigAssembler——这个程序计算出了第 一批人类基因组——比Celera公司发布的第一批
基因组提早了一天,从而使得这批基因组成为免费的专利而且避免了其余的法律问题。Jim发表了40余篇 科学论文。他目前的研究工做主要是编写程序,数据库和网站以帮助科学家分析和了解基因组。
Brian Kernighan于1964年在
多伦多大学得到学士学位,并于1969年在
普林斯顿大学得到电子工程博士学位。他在
贝尔实验室的计算科学研究中心一直工 做到2000年,目前就任于普林斯顿大学的计算机科学系。他编写了8本著做以及大量的技术论文,并拥有4项专利。他的研究领域包括编程语言、工具、为非专 业用户设计易用的计算机操做界面等。他还致力于非技术读者的技术教育工做。
Adam Kolawa是Parasoft公司的建立者之一和CEO,这家公司是自动错误预防(Automated Error Prevention ,AEP)解决方案的领先提供商。Kolawa有着多年在各类
软件开发流程中的经验,这使得他对高科技企业有着独特的视野,以及成功辨识技术潮流的非凡能 力。所以,他策划了几个成功商业软件产品的开发过程来知足在提升
软件质量中不断增加的工业需求——常常在这种潮流被普遍接受以前。Kolawa参与编写了 《Bulletproofing Web Applications》(Hungry Minds出版社)一书,他还撰写了100余篇评论和技术文章,发表在《The Wall Street Journal》、《CIO》、《Computerworld》、《Dr. Dobb's Journal》以及《IEEE Computer》等期刊上。此外,他还撰写了大量关于物理学和并行处理方面的科学论文。他如今的签约媒体包括CNN、
CNBC、 BBC和NPR。Kolawa拥有
加利福尼亚理工大学理论物理博士学位,并拥有10项专利发明。2001年,Kolawa得到了软件类别的Los Angeles Ernst & Young's Entrepreneur of the Year奖项。
Greg Kroah-Hartman是目前Linux内核的维护人员,负责多个驱动程序子系统以及驱动程序内核、sysfs、 kobject、 kref和debugfs等代码。他还为启动linux-hotplug 和 udev等项目提供了帮助,是内核稳定维护团队中的重要人员。他编写了《Linux Kernel in a Nutshell》(O'Reilly出版社),并参与编写了《Linux Device Drivers, Third Edition》(O'Reilly出版社)。
Andrew Kuchling有着11年的软件工程师经验,他是Python开发群体中的长期成员。他的一些与Python相关的工做包括编写和维护数个标准的库模 块,编写一系列的“What's new in Python 2.x”文章以及其余一些文档,策划了2006年和2007年的PyCon会议,并是Python软件基金会的主管。Andrew于1995年毕业于麦吉 尔大学并得到计算机科学学士学位。
Piotr Luszczek毕业于波兰
克拉科夫矿业与冶金大学,并得到硕士学位,他的研究领域是并行的核外(out-of-core)库。他将稠密矩阵计算核应用于
稀疏矩阵直接求解算法和
迭代数值线性几何算法中的创新研究使他得到了博士学位。他把这种思想用来开发使用核外技术容错库。目前,他是田纳西大学
诺克斯维尔 分校的一位研究教授。他的研究工做包括大型超级计算机安装的标准化评价。他开发了一个自适应的
软件库,可以自动选择最优的算法来有效地利用现有硬件以及有 选择地处理输入数据。他还感兴趣于高性能编程语言的设计和实现。
Ronald Mak是高级计算机科学研究所(Research Institute for Advanced Computer Science)的一位资深科学家,在NASA Ames研究中心工做时,他是协同信息系统(Collaborative Information Portal,CIP)的架构师和首席开发人员。在漫步者登陆火星以后,他分别在JPL和Ames对探测任务提供支持。而后,他得到了
加利福尼亚大学圣克 鲁兹分校的学术任命,而且他再次与NASA签约,此次的工做是设计帮助宇航员返回月球的企业软件。Ron是Willard & Lowe Systems公司的建立人之一和CTO,这是一个针对
企业信息管理系统的咨询公司。他编写了 数本关于计算机软件的书籍,他在
斯坦福大学分别得到了数学
科学学位和计算机科学学位。
Yukihiro "Matz" Matsumoto是一位程序员,他是一位日本籍的开源倡导者,他发明了最近很是流行的Ruby语言。他从1993年开始研发
Ruby,这和
Java语言 同样久远。如今他工做于日本Network Applied Communication Laboratory(NaCl,网址为netlab.jp)公司,该公司从1997年起开始赞助Ruby的开发。由于他的真实姓名太长而难以记住,而且 对于非日本的演讲者来讲难以发音,所以在网上他使用了昵称Matz。
Arun Mehta是一位电子工程师和计算机科学家,他曾在印度、美国和德国进行过研究和教学工做。他是印度早期计算机活动家,他努力实现了一些方便消费者 (consumer-friendly)的政策,以帮助把现代通讯延伸到偏远地区和贫困地区。他目前的研究领域包括农村无限通讯以及帮助残疾用户的技术。 他是印度
哈里亚纳邦Radaur地区JMIT大学计算机工程系的教授和主任。
Rafael Manhaes Monnerat是CEFET CAMPOS的一位IT
分析家,以及Nexedi SARL的海外顾问。他的研究领域包括免费/开源系统、ERP以及最新的编程语言。
Travis E. Oliphant于1995年在美国
杨百翰大学得到电子与计算机工程学士学位和数学学士学位,并于1996年在该校得到电子与计算机工程硕士学位。他于 2001年在明尼苏达罗切斯特的梅奥研究生院得到了生物医学工程博士学位。他是
Python语言中科学计算库SciPy和
NumPy的主要编写者。他的研 究领域包括显微阻抗成像,异构领域中的MRI重构以及生物医学逆问题。他目前是杨百翰大学电子与计算机工程的副教授。
Andy Oram是O'Reilly Media的编辑。他从1992年开始就在这家公司工做,Andy目前主要关注自由软件和开源技术。他在O'Reilly的工做成果包括第一批Linux 系列丛书以及2001年的P2P系列丛书。他的编程技术和系统管理技术大多都是自学的。Andy仍是Computer Professionals for Social Responsibility协会的成员而且常常在O'Reilly Network(http://oreillynet.com)和其余一些刊物上撰写文章,这些文章的主题包括互联网上的政策问题,以及影响技术创新的潮 流及其对社会的影响。
William R. Otte是田纳西
范德堡大学电子工程与计算机系(EECS)的一位博士研究生。他的研究领域是分布式实时嵌入(DRE)系统的中间件,目前从事CORBA 组件的部署和配置引擎(DAnCE)开发工做。这个工做主要研究运行时规划技术,基于组件的应用程序的适应性,以及对应用程序服务质量和容错需求的规范与 实施。在攻读研究生以前,William于2005年在范德堡大学计算机系毕业并得到学士学位,以后在软件集成系统学院(ISIS)工做了一年。
Andrew Patzer是
威斯康星大学医学院生物信息系的主管。过去15年Andrew是一位软件开发人员而且编写了许多文章和书籍,包括 《Professional Java Server Programming》(Peer Information公司)和《JSP Examples and Best Practices》(Apress出版社)。Andrew目前的研究领域为生物信息领域,利用像
Groovy这样的动态语言来发掘大量有效的生物数据并 帮助科学研究人员进行分析。
Charles Petzold是一位自由做家,主要研究领域为Windows应用程序编程。他是《Programming Windows》(Microsoft Press出版社)的做者, 1988年至1999年之间共出版了五版,教育了整整一代程序员的Windows API编程技术。他最新的书籍包括《Applications = Code + Markup: A Guide to the Microsoft Windows Presentation Foundation》(Microsoft Press出版社),以及《Code: The Hidden Language of Computer Hardware and Software》(Microsoft Press出版社),在这本书中他对
数字技术进行了独特的研究。
T. V. Raman的研究领域包括网页技术和听觉用户界面。在20世纪90年代初,在他的博士论文中介绍了音频格式的概念,叫做AsTeR:Audio System For Technical Readings(技术读物语音系统),这是一个为技术文档生成高质量听觉表示的系统。Emacspeak则将这些思想应用到更普遍的计算机用户界面领 域。Raman如今是Google的一位研究人员,主要研究Web应用程序。
Alberto Savoia是Agitar软件公司的建立人之一和CTO。在建立Agitar以前,他是Google的高级工程主管;在这以前,他仍是Sun Microsystems实验室软件研究中心的主管。Alberto的主要研究领域是软件开发技术——尤为是那些帮助程序员在设计和开发阶段进行测试和代 码验证的工具和技术。
Douglas C. Schmidt是田纳西
范德堡大学电子工程与计算机(
EECS)系的一位教授,计算机科学与工程系的副主任,以及软件集成系统学院(ISIS)的高级研究 人员。他是分布式计算模式和中间件框架方面的专家,而且已经发表了超过350篇的技术论文和9本书籍,内容涉及的主题很广,包括高性能通讯软件系统,高速 网络协议并行处理,实时
分布式对象计算,并发与
分布式系统的
面向对象模式,以及
模型驱动的开发工具。在他的学术研究以外,Dr. Schmidt仍是PrismTechnologies公司的CTO,而且在领导开发应用普遍开源的中间件平台上有着15年的经验,在这些平台上包含了丰 富的组件以及实现高性能分布式系统中核心模式的领域特定语言。Dr. Schmidt于1994年于加利福尼亚大学欧文分校得到计算机科学博士学位。
Christopher Seiwald编写了
Perforce(一种
软件配置管理系统)、Jam(一种构建工具)和“漂亮代码的七个要素”(本书的第32章,变更的代码,正是从 这篇文章中提取出了有价值的思想)。在建立Perforce以前,他在
Ingres公司管理网络开发小组,他花了数年时间来使得异步网络代码看上去很漂 亮。如今他是Perforce软件公司的CEO,而且仍然从事编码工做。
Diomidis Spinellis是
希腊雅典经济与商业大学管理科学与技术系的副教授。他的研究领域包括软件工程工具,编程语言和计算机安全。他在伦敦帝国理工大学得到 了软件工程硕士学位和计算机科学博士学位。他发表了超过100篇的技术论文,所涉及的领域包括软件工程,信息安全以及
普适计算。他还编写了两本开源方面的 书籍:《Code Reading 》(得到2004年度Software Development Productivity奖)和《 Code Quality 》(这两本书都由Addison-Wesley出版社出版)。他是IEEE Software编辑委员会的成员,主编“Tools of the Trade”专栏。Diomidis是一位FreeBSD提交者(Committer),而且编写了许多开源软件包、软件库以及工具。
Lincoln Stein是一位硕士/博士,他的研究领域为生物信息数据的集成与虚拟化。在从
哈佛大学医科学院毕业后,他在麻省理工大学Whitehead基因研究所工 做,开发用于老鼠和人类的基因图谱数据库。他在
冷泉港实验室开发了各类
基因数据库,包括WormBase,
线虫基因数据库;Gramene,用于水稻和其 他
单子叶植物的比较基因映射数据库;国际Hap-Map项目数据库;以及人类基因基础数据库Reactome。Lincoln还编写了《books How to Set Up and Maintain a Web Site》(Addison-Wesley出版社)、《Network Programming in Perl》(Addison-Wesley出版社)、《Official Guide to Programming with CGI.pm 》(
Wiley出版社)以及《Writing Apache Modules with Perl and C》(O'Reilly出版社)等书籍。
Nevin Thompson把Yukihiro Matsumoto编写的第29章内容,把代码看成文章,从日文翻译到英文。他的客户包括日本最大的电视网络,以及Technorati Japan公司和Creative Commons组织。
Henry S. Warren, Jr.在
IBM工做了45年,他历经了从IBM 704到PowerPC的发展过程。他参与过多个军方指挥与控制系统的开发工做,在纽约大学Jack Schwartz教授指导下从事SETL项目。从1973年起,他在IBM研究部门工做,主要方向为编译器和计算机架构。Hank目前正在参与Blue Gene Petaflop超级计算机项目。他在纽约大学克朗数学研究所得到了计算机博士学位。他是《Hacker's Delight》(Addison-Wesley出版社)一书的做者。
Laura Wingerd多年
Sybase和
Ingres的数据库产品开发工做造成了她早期对
软件配置管理的观点。她在
Perforce软件公司建立之初就加盟了这 家公司,而且从她给Perforce客户的建议中得到了大量的
SCM经验。她编写了《Practical Perforce》(O'Reilly出版社)一书以及许多与SCM相关的白皮书。她在Google的技术演讲The Flow of Change中首次露面。Laura如今是Perforce 软件公司产品技术部的副主管,主要负责推进合理的SCM流程以及研究新的而且更好的Perforce使用方式。
Greg Wilson在
爱丁堡大学得到了计算机科学博士学位,他的研究领域包括高性能科学计算,
数据虚拟化以及计算机安全。他如今是
多伦多大学计算机科学系的一位副教授,而且是《Dr. Dobb's Journal》杂志的特约编辑。
Andreas Zeller于1991年毕业于德国
达姆斯塔特理工大学,并于1997年在
不伦瑞克理工大学得到计算机科学博士学位。2001年以来,他一直在德国萨尔兰 登大学的计算机科学系担任教授。Zeller主要研究大型程序以及它们的发展历史,他开发了大量的方法来分析在开源软件以及
IBM、Microsoft、 SAP以及其余公司的商业软件中失败的缘由。他编写的《Why Programs Fail: A Guide to Systematic Debugging》(Morgan Kaufmann出版社)得到了《Software Development Magazine》杂志2006年度的Productivity大奖。
做品目录
1.1 编程实践
1.2 实现
1.3 讨论
1.4 其余的方法
1.5 构建
1.6 小结
第2章 Subversion中的增量编辑器:像本体同样的接口
2.2 表达目录树的差别
2.3 增量编辑器接口
2.4 但这是否是艺术?
2.5 像体育比赛同样的抽象
2.6 结论
第3章 我编写过的最漂亮代码
3.1 我编写过的最漂亮代码
3.2事倍功半
3.3 观点
3.4 本章的中心思想是什么?
3.5 结论
3.6致谢
第4章 查找
4.1. 耗时
4.2. 问题:博客数据
4.3. 问题:时间,人物,以及对象?
4.4. 大规模尺度的搜索
4.5. 结论
第5章
正确、优美、迅速(按重要性排序):从设计XML验证器中学到的经验
5.1 XML验证器的做用
5.2 问题所在
5.3 版本1:简单的实现
5.4 版本2:模拟BNF语法——复杂度O(N)
5.5 版本3:第一个复杂度O(log N)的优化
5.6 版本4:第二次优化:避免重复验证
5.7 版本5:第三次优化:复杂度 O(1)
5.8 版本 6:第四次优化:缓存(Caching)
5.9 从故事中学到的
第6章
集成测试框架:脆弱之美
6.1. 三个类搞定一个验收测试框架
6.2. 框架设计的挑战
6.3. 开放式框架
6.4. 一个HTML解析器能够简单到什么程度?
6.5. 结论
第7章 美丽测试
7.2 JUnit简介
7.3将二分查找进行到底
7.4 结论
第8章 图像处理中的即时代码生成
9.1. JavaScript
9.2. 符号表
9.5. 表达式
9.6. 中置运算符
9.9. 常数
9.10. Scope
9.11. 语句
9.12. 函数
9.14. 要作和要思考的事
第 10章 追求加速的种群计数
10.1. 基本方法
10.3. 其余方法
10.4. 两个字种群计数的和与差
10.5. 两个字的种群计数比较
10.6. 数组中的1位种群计数
10.7. 应用
第11章 安全通讯:自由的技术
11.1 项目启动以前
11.2剖析安全通讯的复杂性
11.3 可用性是关键要素
11.4 基础
11.5 测试集
11.6 功能原型
11.7 清理,插入,继续……
11.8 在喜马拉雅山的开发工做
11.9 看不到的改动
11.10 速度确实重要
11.11 人权中的通讯隐私
11.12 程序员与文明
第12章 在BioPerl里培育漂亮代码
12.1. BioPerl和Bio::Graphics模块
12.2. Bio::Graphics的设计流程
12.3. 扩展Bio::Graphics
12.4. 结束语和教训
第13章 基因排序器的设计
13.1 基因排序器的用户界面
13.2 经过Web跟用户保持对话
13.3. 多态的威力
13.4 滤除无关的基因
13.5 大规模美丽代码理论
13.6 结论
第14章 优雅代码随硬件发展的演化
14.2 一种基于分解的方法
14.3 一个简单版本
14.4 LINPACK库中的DGEFA子程序
14.5 LAPACK DGETRF
14.7 ScaLAPACK PDGETRF
14.8 针对多核系统的多线程设计
14.9 偏差分析与操做计数浅析
14.10 将来的研究方向
14.11 进一步阅读
第15章 漂亮的设计会给你带来长远的好处
15.1. 对于漂亮代码的我的见解
15.2. 对于CERN库的介绍
15.3. 外在美(Outer Beauty)
15.4. 内在美(Inner Beauty )
15.5. 结论
第16章,Linux内核驱动模型:协做的好处
16.1 简单的开始
16.2 进一步简化
16.3 扩展到上千台设备
16.4 小对象的松散结合
第17章 额外的间接层
17.2. 从函数参数到参数指针
17.3. 从文件系统到文件系统层
17.4. 从代码到DSL(Domain-Specific Language)
17.5. 复用与分离
17.6.分层是永恒之道?
第18章 Python的字典类:如何打造全能战士
18.1. 字典类的内部实现
18.2. 特殊调校
18.3. 冲突处理
18.4. 调整大小
18.6. 结论
18.7. 致谢
19.1 N维数组操做中的关键挑战
19.2 N维数组的内存模型
19.3NumPy迭代器的起源
19.4 迭代器的设计
19.5 迭代器的接口
19.6 迭代器的使用
19.7 结束语
第20章 NASA火星漫步者任务中的高可靠企业系统
20.1 任务与CIP
20.2 任务需求
20.3 系统架构
20.4 案例分析:流服务
20.5 可靠性
20.6 稳定性
20.7 结束语
第21章 ERP5:最大可适性的设计
21.1 ERP的整体目标
21.2 ERP5
21.3 Zope基础平台
21.4 ERP5 Project中的概念
21.5 编码实现ERP5 Project
21.6 结束语
第22章 一匙污水
第23章 MapReduce分布式编程
23.1 激动人心的示例
23.2 MapReduce编程模型
23.4 分布式MapReduce的一种实现
23.5 模型扩展
23.6 结论
23.7 进阶阅读
23.8 致谢
23.9 附录:单词计数解决方案
第24章 美丽的并发
24.3 圣诞老人问题
24.6 致谢
第25章 句法抽象:syntax-case 展开器
25.1. syntax-case简介
25.2. 展开算法
25.3. 例子
25.4. 结论
第26章
节省劳动的架构:一个面向对象的网络化软件框架
26.1 示例程序:日志服务
26.2 日志服务器框架的面向对象设计
26.4 实现并行日志服务器
26.5 结论
第27章
以REST方式集成业务伙伴
27.1 项目背景
27.2 把服务开放给外部客户
27.3 使用工厂模式转发服务
27.4 用电子商务协议来交换数据
27.5 结束语
第28章 漂亮的调试
28.1 对调试器进行调试
28.2 系统化的过程
28.3 关于查找的问题
28.4 自动找出故障原由
28.5 增量调试
28.6 最小化输入
28.7 查找缺陷
28.8 原型问题
28.9 结束语
28.10 致谢
28.11 进一步阅读
第29章 把代码看成文章
第30章 当你与世界的联系只有一个按钮
30.1 基本的设计模型
30.2 输入界面
30.3 用户界面的效率
30.4 下载
30.5 将来的发展方向
第31章 Emacspeak:全功能音频桌面
31.1 产生语音输出
31.2 支持语音的Emacs
31.3 对于在线信息的简单访问
31.4 小结
31.5 致谢
第32章 变更的代码
32.1 像书本同样
32.2 功能类似的代码在外观上也保持类似
32.3 缩进带来的危险
32.4 浏览代码
32.5 咱们使用的工具
32.6 DiffMerge的曲折历史
32.7 结束语
32.8 致谢
32.9 进一步阅读
第33章 为“The Book”编写程序
33.1 没有捷径
33.5 三角不等性
33.6 河道弯曲模型
33.7 “Duh!”——个人意思是“Aha!”
33.8 结束语
33.9 进一步阅读
后记
做者简介
媒体评论
从新擦亮思考的火花
《代码之美》这本书已经成为经典。关于它自己的赞美之辞已经很多了,不过到底从这本书里该读些什么东西,我却是有些思考。
上世纪九十年代初期,当时正在加州大学埃尔文分校攻读博士学位的Douglas Schmidt在观察了他所参与的软件项目开发实践以后,得出一个结论,即将来的软件开发将愈来愈多地体现为整合(integration),而不是传统意义上的编程(programming)。换言之,被称为 “软件开发者” 的这我的群,将愈来愈明显地分化:一部分人开发核心构件和基础平台,而更多地人将主要是配置和整合现有构件以知足客户的需求,相似汽车、机床和家用电器制造业的产业格局即将到来。面对这一前景,博士生Schmidt一方面写文章对于其进步意义大加赞赏,另外一方面绝不犹豫地投入到核心构件及平台的开发阵营中去。他很清楚,在这样一种分工体系中,因为软件整合产业很难出现垄断局面,所以大多数利润老是被截留在上游,人固然要往高处走,整合是好事,但他老兄宁肯让别人来作这个好事。
事实上,软件产业中大多数看上去挺靠谱的预测都被历史的发展无情地抛到垃圾堆里了,然而Schmidt博士生的这个预测却惊人的准确,其后十几年软件工业的发展完美地印证了他当年的判断。所以,他本人基于这一预测所选择的人生道路也一路顺风。现在已是教授的Douglas Schmidt前后创造了ACE、TAO、CIAO等一系列分布式计算基础件,前后主导了美国学界和国防领域内若干重大科研与实际开发项目,称为世人公认的分布式计算架构领导者。
抛开他我的的辉煌不说,“整合化”趋势实际上已经深入地改变了世界软件工业的面貌,从而也影响了身为晚进者的咱们的命运。现在大部分的程序员其实是在整合与配置现有资源以知足需求,而不是真正意义上的“编程”。这固然是一件好事,整合一样须要深入的洞察力和创新精神,优秀的整合者与天才的程序员同样不可多得,甚至更加罕见。然而咱们也不能不认可,大多数整合性的工做是机械的,简单的,重复的,欠缺创意的,深刻的思考每每没必要要。所以,在这个整合为王的时代里,思考的精神在钝化。更有甚者,互联网和搜索引擎的出现大大加速了这种钝化,几乎全部的问题都有人解决而且张贴在互联网上了,所以独自思考和解决问题已经成了没必要要的、下降效率的行为,不但不时髦,并且不经济。软件开发迅速成为一个强调搜索和短时间记忆力的技能,我想这是50年前第一代程序员们作梦也没有想到的。
老实讲,就总体而言,我仍然认为这是一种进步。任何一个产业的成熟,无不伴随着分工的明晰、技能的简化和从业门槛的下降。与少数人享受思考乐趣的需求相比,大多数人享受便宜而无处不在的软件服务的需求显然远为重要。可是,对于身处软件行业中的个体来讲,思考力的削弱和丧失倒是彻彻底底的悲剧。这一点没必要过多解释,正在苦苦寻找本身核心竞争力的开发者们都知道我说的是什么意思。几年来对中国开发者社群的近距离观察使我确信,尽管做为一个产业,中国软件一直享受着比较快的成长,可是整体而言,中国的软件开发者愈来愈迷惘、焦躁和不自信。这一状况固然是由多种缘由致使的,但开发者们每念及此,多抱怨体制、产业、市场等身外之物,实在也有失偏颇。评心而论,这几年中国软件技术界的生存环境仍是有了很大改善,对于那些真正出类拔萃的程序员来讲,过上一种充实自信的生活并不困难。摆在每个个体面前的主要问题仍是在于可否出类拔萃,而这就须要咱们从新找回思考的能力。具有强悍思考能力的人,也就具有强悍的解决问题的能力,而这样的开发者永远都是产业中的稀缺资源。
我认为这正是《代码之美》这本书的一个重要价值。合做的诸位大师级做者,给咱们一个很好的机会,让咱们可以一边阅读,一边思考,找回深思熟虑的智慧火花。这本书里所讲的每个问题,能够说都是程序员在工做中会遇到或者至少会擦边的问题,既没有故弄玄虚的文字游戏,也没有携带了领域知识的私货,只有朴实而实际的一个个问题。虽然不是以提问的方式给出,但在整个阅读的过程当中,咱们仍是可以找到不少机会与大师互动,不断地发现问题和解决问题。我在阅读中常常感到,看上去一个很简单的问题,却被这些大师们一层一层挖掘的如此深刻,到最后阶段不禁得使人感到战栗和震撼。看着这些智慧的光芒,咱们不但能够领略大师之所谓称为大师的秘密,并且也认识到思考的真谛。所以,千万不要想看小说同样一带而过,那样会错过本书95%的价值!咱们不是要阅读这些文字,而是要与文字背后的做者交流学习,一点一点把本身的心得记下来,对于做者提出的新问题,先本身思考,直接写程序尝试,争取跟上大师的思路,甚至可能须要反复几遍,才能真正读通这本书。这样的精力不会是白费的,读者应当认识到,当咱们拥有这本书的时候,咱们得到了怎样宝贵的机会,能够在相对比较短的时间里有效地提高本身的思考能力。这是一个机会,也是一次考验,我绝对相信,经过了此次考验的读者,会在思考和解决问题的能力上有一个大的进步。
我但愿本身可以以这样的态度读这本了不得的书,以此文与其余读者朋友共勉之。
——孟岩