All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc. CHINESE SIMPLIFIED language edition published by PEARSON EDUCATION ASIA LTD., and POSTS & TELECOMMUNICATIONS PRESS Copyright © 2009.
本书封面贴有Pearson Education(培生教育出版集团)激光防伪标签。无标签者不得销售。
内容提要
实现模式(修订版)
在本书中,作者将自己多年形成的编程习惯以及阅读既有代码的体验凝练成了编程中的价值观、原则和77种实现模式。
沟通、简单和灵活的价值观应当被所有开发人员所铭记。局部影响、最小化重复、将逻辑与数据捆绑等原则同样是通用性的指导思想,比价值观更贴近编程场景,在价值观和模式之间搭建了桥梁。在77种实现模式中,每一种模式都覆盖了编写简洁、清晰、易扩展、易维护的代码这一原则的某个方面。它们为日常的编程提供了丰富翔实的参考依据,并告诉大家这些代码如何为降低沟通成本和提高有效产出提供保障。
本书适用于各个阶段的开发者群体。刚刚涉足软件开发领域的新人能够透过大师的眼睛来看待编程,了解编程的价值观与原则;具有丰富经验的资深工程师则可以通过这些模式进行反思,探究成功实践背后的意义。把价值观、原则和开发实践结合之后,日常开发工作便会以崭新而迷人的形式呈现在我们面前。
实现模式概览
实现模式(修订版)
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。
译者序
实现模式(修订版)
这是一本关于如何写好代码的书。
如果你不认为写好代码是一件重要、困难并且有趣的事,请立即放下这本书。
什么是好的代码?可以工作的、性能良好的、不出bug的代码,就是好的代码吗?
所谓好的代码,除了其他所有要求以外,还应该清晰准确地传达写作者的想法。
Martin Fowler在《重构:改善既有代码的设计》里说,“任何一个傻瓜都能写出机器能懂的代码。好的程序员应该写出人能懂的代码。”
如果你不同意这句话,请立即放下这本书。因为这是一本关于如何用代码与他人(而非机器)沟通的书。
任何读到这一行的程序员都应该读完这本书。
Steve McConnell在《代码大全》里说,“不要过早优化,但也不要过早劣化”。这本书将告诉你如何在几乎不引入任何额外成本的前提下避免一些常见的低级错误——它们是常见的,因为几乎每个人都犯过并且还在犯着这些错误。
如果你确实没有时间,至少应该读完第6章“状态”。因为在各种常见的低级错误中最常见的就是关于“什么信息在什么地方”的决策错误。
在这样一本书的序言里说任何废话都将是佛头着粪。
所以,现在就祝你阅读愉快、编程愉快。
是为序。
前言
实现模式(修订版)
这是一本关于编程的书,更具体一点,是关于“如何编写别人能懂的代码”的书。编写出别人能读懂的代码没有任何神奇之处,这就与任何其他形式的写作一样:了解你的阅读者,在脑子里构想一个清晰的整体结构,让每个细节为故事的整体作出贡献。Java提供了一些很好的交流机制,本书介绍的实现模式正是一些Java编程习惯,它们能让你编写出的代码更加易读。
也可以把实现模式看作思考“关于这段代码,我想要告诉阅读者什么?”的一种方式。程序员大部分的时间都在自己的世界里绞尽脑汁,以至于用别人的视角来看待世界对他们来说是一次重大的转变。他们不仅要考虑“计算机会用这段代码做什么”,还要考虑“如何用这段代码与别人沟通我的想法”。这种视角上的转换有利于你的健康,也很可能有利于你的钱包,因为在软件开发中有大量的开销都被用在理解现有代码上了。
有一个叫做Jeopardy的美国游戏节目,由主持人给出问题的答案,参赛观众则来猜问题是什么。“猜一个词,表示扔出窗外。”“是defenestration吗?”“答对了。”
编程就好像Jeopardy游戏:答案用Java的基本语言构造给出,程序员则经常需要找出问题究竟是什么,即这些语言构造究竟是在解决什么问题。比如说,如果答案是“把一个字段声明为Set”,那么问题可能就是“我要怎样告诉其他程序员,这是一个不允许包含重复元素的集合?”本书介绍的实现模式列举了一组常见的编程问题,还有Java解决这些问题的方式。
和软件开发一样,范围的管理对于写书同样重要。我现在就告诉你本书不是什么。它不是编程风格指南,因为其中包含了太多的解释,最终的决定权则完全交给你。它不是设计书籍,因为其中关注的主要是小范围的、程序员每天要做很多次的决策。它不是模式书籍,因为这些实现模式的格式各不相同、随需而变。它不是语言书籍,因为尽管其中谈到了一些Java语言的特性,但我在写作时假设你已经熟悉Java了。
实际上本书建立在一个相当不可靠的前提之上:好的代码是有意义的。我见过太多丑陋的代码给它们的主人赚着大把钞票,所以在我看来,软件要取得商业成功或者被广泛使用,“好的代码质量”既不必要也不充分。即便如此,我仍然相信,尽管代码质量不能保证美好的未来,但它仍然有其意义:有了质量良好的代码以后,业务需求能够被充满信心地开发和交付,软件用户能够及时调整方向以便应对机遇和竞争,开发团队能够在挑战和挫折面前保持高昂的斗志。总而言之,比起质量低劣、错误重重的代码,好的代码更有可能帮助用户取得业务上的成功。
即便不考虑长期的经济效应,我仍然会选择尽我所能地编写出好代码。就算活到古稀之年,你的一生也只有二十多亿秒而已,这宝贵的时间不该被浪费在自己不能引以为傲的工作上。编写好的代码带给我满足感,不仅因为编程本身,还因为知道别人能够理解、欣赏、使用和扩展我的工作。
所以,说到底,这是一本关于责任的书。作为一个程序员,你拥有时间、拥有才华、拥有金钱、拥有机会。对于这些天赐的礼物,你要如何负责地使用?下面的篇幅里包含了我对于这个问题的答案:不仅为我自己、为我的CPU老弟编程,也为其他人编程。
致谢
实现模式(修订版)
我首先、最后并且始终要感谢Cynthia Andres,我的搭档、编辑、支持者和首席讨债鬼。我的朋友Paul Petralia推动了这本书的写作,而且不断给我鼓励的电话。编辑Chris Guzikowski和我通过本书学会了如何在一起工作,他从Pearson的角度给了我一切需要的支持,让我能够完成写作。还要感谢Pearson的制作团队:Julie Nahil、John Fuller和Cynthia Kogut。Jennifer Kohnke的插图不但包含了丰富的信息,而且非常人性化。本书的审阅者给我的书稿提供了清晰而又及时的反馈,为此我要感谢Erich Gamma、Steve Metsker、Diomidis Spinellis、Tom deMarco、Michael Feathers、Doug Lea、Brad Abrams、Cliff Click、Pekka Abrahamson、Gregor Hohpe和Michele Marchesi。感谢David Saff指出“状态”与“行为”之间的平衡。最后,还要感谢我的孩子们,一想到他们乖乖呆在家里,我就有了尽快完成本书的动力。Lincoln、Lindsey、Forrest和Joëlle Andres,感谢你们。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。
目录
前言
第1章 引言
1.1节章节概览
1.2节那么,现在……
第2章 模式
第3章 一种编程理论
3.1节价值观
3.2节原则
3.3节小结
第4章 动机
第5章 类
第6章 状态
第7章 行为
第8章 方法
第9章 容器
第10章 改进框架
附录A 性能度量
参考书目
欢迎来到异步社区!
兑换样书
暂无样书
如何赚取积分
精彩推荐
软件测试技术实战:设计、工具及管理
软件测试技术实战:设计、工具及管理
作者: 顾翔
软件测试高薪之路:UFT/QTP 面试权威指南
软件测试高薪之路:UFT/QTP 面试权威指南
作者: 【印度】Tarun Lalwani(拉尔瓦尼 T.)
译者: 吴鑫 杜翔 赵旭斌
超越需求:敏捷思维模式下的分析
超越需求:敏捷思维模式下的分析
作者: 【美】Kent J. McDonald(肯特 J. 麦克唐纳)
译者: 霍金健
海盗派测试分析:MFQ&PPDCS
海盗派测试分析:MFQ&PPDCS
作者: 邰晓梅
LoadRunner 12七天速成宝典
LoadRunner 12七天速成宝典
作者: 陈霁