请输入您要查询的百科知识:

 

词条 代码之美
释义

《代码之美》

原 书 名" Beautiful Code

丛 书 名 华章程序员书库

作 者: (美)奥莱姆(Oram,A),(美)维尔森(Wilson,G) 编;BC Group 译

出 版 社: 机械工业出版社

出版时间: 2009-1-1

页 数: 599

开 本: 16开

纸 张: 胶版纸

I S B N : 9787111251330

包 装: 平装

所属分类: 图书 >> 计算机/网络 >> 程序设计 >> 其他

定价:99.00

编辑推荐

38位大师级的程序员,一步步讲解他们的项目架构,开发时的种种折中考虑(tradeoffs)以及何时必须打破常规,寻求突破。

全球38位顶尖高手、众多语言之父经典之作。

本书收录的是软件设计领域中的一组大师级作品。每一章都是由一位或几位著名程序员针对某个问题给出的完美的解决方案,并且细述了这些解决方案的巧妙之处。

本书既不是一本关于设计模式的书,也不是一本关于软件工程的书,它告诉你的不仅仅是一些正确的方式或者错误的方式。它让你站在那些优秀软件设计师的肩膀上,从他们的角度来看待问题。

本书给出了38位大师级程序员在项目设计中的思路、在开发工作中的权衡,以及一些打破成规的决策。

内容简介

本书介绍了人类在一个奋斗领域中的创造性和灵活性:计算机系统的开发领域。在每章中的漂亮代码都是来自独特解决方案的发现,而这种发现是来源于作者超越既定边界的远见卓识,并且识别出被多数人忽视的需求以及找出令人叹为观止的问题解决方案。

本 书33章,有33位作者,每位作者贡献一章。每位作者都将自己心目中对于“美丽的代码”的认识浓缩在一章当中,张力十足。33位大师,每个人对代码之美都 有自己独特的认识,现在一览无余的放在一起,对于热爱程序的每个人都不啻一场盛宴。 虽然本书的涉猎范围很广,但也只能代表一小部分在这个软件开发这个最令人兴奋领域所发生的事情。

作者简介

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网站(http://www.cafeaulait.org)是互联网上最流行的独立Java网站之一;他的另一个网站Cafe con Leche (http://www.cafeconleche.org)则成为了最流行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》杂志编写计算机专栏,他还拥有一个博客http://bit-player.org。过去,他还为《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年毕业于麦吉 尔大学并获得计算机科学学士学位。他的个人网页是http://www.amk.ca。

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(http://www.willardlowe.com)公司的创建人之一和CTO,这是一个针对企业信息管理系统的咨询公司。他编写了 数本关于计算机软件的书籍,他在斯坦福大学分别获得了数学科学学位和计算机科学学位。

Yukihiro "Matz" Matsumoto是一位程序员,他是一位日本籍的开源倡导者,他发明了最近非常流行的Ruby语言。他从1993年开始研发Ruby,这和Java语言 一样久远。现在他工作于日本Network Applied Communication Laboratory(NaCl,网址为netlab.jp)公司,该公司从1997年起开始赞助Ruby的开发。因为他的真实姓名太长而难以记住,并且 对于非日本的演讲者来说难以发音,因此在网上他使用了昵称Matz。

Arun Mehta是一位电子工程师和计算机科学家,他曾在印度、美国和德国进行过研究和教学工作。他是印度早期计算机活动家,他努力实现了一些方便消费者 (consumer-friendly)的政策,以帮助把现代通信延伸到偏远地区和贫困地区。他目前的研究领域包括农村无限通信以及帮助残疾用户的技术。 他是印度哈里亚纳邦Radaur地区JMIT大学计算机工程系的教授和主任。他的网址包括http://india-gii.org, http://radiophony.com和 http://holisticit.com。

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)和其他一些刊物上撰写文章,这些文章的主题包括互联网上的政策问题,以及影响技术创新的潮 流及其对社会的影响。他的网址为http://www.praxagora.com/andyo。

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出版社),在这本书中他对数字技术进行了独特的研究。他的网址是http://www.charlespetzold.com。

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大奖。

译序

第一部分:这是一本什么书

By 刘未鹏(pongba)

C++的罗浮宫(http://blog.csdn.net/pongba)

这是一本独特的书。

其英文封面上本应写着作者的位置写的却是“Edited by Andy Oram and Greg Wilson”。Edited?!那作者呢?

实际上,这本书有33位作者!

现在你知道为什么封面上不列作者了吧?一,列不下。二,也是更重要的,每位作者都是一个领域的大牛,怎么排列?

每位作者都贡献了一章内容,所以本书一共有33章。这种做法带来了三个重要的结果:

· 每位作者都是大牛,所以每个人都知道自己在说什么,绝无一个人写整本书而导致的在某些不甚在行的地方语焉不详的情况。

· 每位作者都将自己心目中对于“美丽的代码”的认识浓缩在一章当中,张力十足。

· 心理学上有一种说法叫做联合评估与单独评估,即如果你单独评估一样东西,是难以把握其好坏的,然而如果将它跟同类东西一比,就能够作出更准确的判断。33位大牛,每个人对代码之美都有自己独特的认识,现在一览无余的放在一起,对于热爱程序的每个人都不啻一场盛宴。

当初朋友介绍这本书给我的时候,我顿时产生了一种恍然大悟的错觉:这才是我真正想读的书的样子啊,难道技术书籍本来不就应该是这个样子的吗?就一个主题,让几十位领域大牛各抒己见,简直完美符合了我内心对“书”的定义。

而且,编程是计算机行业的核心活动,而代码则是编程活动的核心,代码之美一直一来都是一个玄妙永恒的话题,如果让我选一个主题来请教这些作者,我还真想不出比这更好的主题!

所以,我就迫不及待地把这本书介绍给了更多的朋友。

所以,我同样也已经迫不及待地想要告诉你,这本书的作者都有哪些人了:

Jon Bentley:久负盛名的《Programming Pearls》(《编程珠玑》)的作者。在斯坦福获得学士学位,在北卡罗莱纳获得硕士和博士学位。继而在卡内基梅隆执教6年。贝尔实验室前研究员,西点军校和普林斯顿的访问教授。

Brian Kernighan:C语言圣经K&R C(《C程序设计语言》)和《程序设计实践》两本不朽著作的作者,他的书被翻译成近30种不同的语言。

Charles Petzold:经典的《Windows程序设计》影响了整整一代程序员,被奉为Windows编程圣经。而他的另一本经典著作《编码的奥秘》则另辟蹊径,由浅入深地将计算机最深层的奥秘娓娓道来。

Tim Bray:XML创始人之一。

Yukihiro "Matz" Matsumoto:Ruby之父。

Douglas C. Schmidt:著名的C++跨平台开源框架ACE的设计者,《C++网络编程》卷I,卷II的作者。

Jeff Dean:天才架构师,Google大型并发编程框架Map/Reduce作者。

Diomidis Spinellis:两届Jolt大奖获主,分别以《Code Reading》和《Code Quality》获2004 和2007年的Jolt大奖。

Simon Peyton Jones:Haskell语言核心人物之一,并领导设计了著名的Haskell编译器GHC。

Douglas Crockford:JSON发明者,Javascript领域大牛,写了广为流传的《Javascript,世界上最被误解的语言》。

Bryan Cantrill:著名的DTrace的作者之一;之前是Sun杰出工程师,主要工作领域为Solaris内核开发...

Greg Kroah-Hartman:目前的Linux内核维护者,经典的《Linux Device Drivers》的作者。

Andreas Zeller:大名鼎鼎的GNU DDD可视化调试器的作者,著作《Why Programs Fail》获得2006年Jolt生产效率大奖。

Sanjay Ghemawat:大规模分布式文件系统Google FileSystem(GFS)的主要作者(GFS是Google的基石之一),同时也是Google Map/Reduce以及Google BigTable的作者之一。

...

(一个完整的作者列表见于书后)

如今这些如雷贯耳的名字居然出现在同一本书中,怎能不令人兴奋?!

你是程序员吗?你对代码之美的认识是什么?33位作者,33个来自不同开发领域的专业经验,33种不同的意见。你想知道牛人们对代码之美是怎么想的吗?

其实,这本书最奇妙的地方还不在于这一点,而在于,如果你知道这些作者的名字,你肯定会忍不住去看一看。如果你不知道这些作者的名字,你更加会忍不住去看一看。因为你知道这些人的观点肯定不会让你失望!

最后,还有一个更大的好消息, Oreilly出版社表示还会继续出书的第二版,邀请更多的牛人!

其实,“Beautiful Team”还有另一个含义:我们有一个漂亮的翻译团队;此外团队组建的过程也很是有趣。在此就留一个悬念,稍后会公布:-)

注:由于我只是译者之一(我们的翻译团队里面有一堆牛人),所以这篇仅代表我个人意见:-)

目录信息

第1章 正则表达式匹配器 。

1.1 编程实践

1.2 实现

1.3 讨论

1.4 其他的方法

1.5 构建

1.6 小结

第2章 Subversion中的增量编辑器:像本体一样的接口

2.1 版本控制与目录树的转换

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.1 讨厌的二分查找

7.2 JUnit简介

7.3将二分查找进行到底

7.4 结论

第8章 图像处理中的即时代码生成

第9章 自顶向下的运算符优先级

9.1. JavaScript

9.2. 符号表

9.3. 语素

9.4. 优先级

9.5. 表达式

9.6. 中置运算符

9.7. 前置操作符

9.8. 赋值运算符

9.9. 常数

9.10. Scope

9.11. 语句

9.12. 函数

9.13. 数组和对象字面量

9.14. 要做和要思考的事

第 10章 追求加速的种群计数

10.1. 基本方法

10.2. 分治法

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.1. 计算机体系结构对矩阵算法的影响

14.2 一种基于分解的方法

14.3 一个简单版本

14.4 LINPACK库中的DGEFA子程序

14.5 LAPACK DGETRF

14.6递归LU

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.1. 从直接代码操作到通过函数指针操作

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.5. 迭代和动态变化

18.6. 结论

18.7. 致谢

第19章 NumPy中的多维迭代器

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.3 其他MapReduce示例

23.4 分布式MapReduce的一种实现

23.5 模型扩展

23.6 结论

23.7 进阶阅读

23.8 致谢

23.9 附录:单词计数解决方案

第24章 美丽的并发

24.2 软件事务内存

24.3 圣诞老人问题

24.4 对Haskell的一些思考

24.6 致谢

第25章 句法抽象:syntax-case 展开器

25.1. syntax-case简介

25.2. 展开算法

25.3. 例子

25.4. 结论

第26章 节省劳动的架构:一个面向对象的网络化软件框架

26.1 示例程序:日志服务

26.2 日志服务器框架的面向对象设计

26.3 实现串行化日志服务器

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.2 给Lisp初学者的提示

33.3 三点共线

33.4 不可靠的斜率

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%的价值!我们不是要阅读这些文字,而是要与文字背后的作者交流学习,一点一点把自己的心得记下来,对于作者提出的新问题,先自己思考,直接写程序尝试,争取跟上大师的思路,甚至可能需要反复几遍,才能真正读通这本书。这样的精力不会是白费的,读者应当认识到,当我们拥有这本书的时候,我们获得了怎样宝贵的机会,可以在相对比较短的时间里有效地提升自己的思考能力。这是一个机会,也是一次考验,我绝对相信,通过了这次考验的读者,会在思考和解决问题的能力上有一个大的进步。

我希望自己能够以这样的态度读这本了不起的书,以此文与其他读者朋友共勉之。

——孟岩

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/3/17 11:18:23