InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

InfoQ中文站翻译之作《实现模式》中文版面市

作者 InfoQ中文站 发布于 2008年12月11日

领域
语言 & 开发,
架构 & 设计,
过程 & 实践,
企业架构
主题
Java ,
架构 ,
Ruby ,
设计模式 ,
敏捷 ,
重用 ,
SOA ,
软件工匠 ,
.NET ,
面向对象设计 ,
语言
标签
模式 ,
模式与实践 ,
图书

Kent Beck著,InfoQ中文站翻译的《实现模式》中文版近日已经面市:http://www.china-pub.com/508887。

这是一本相当靠谱的书。

因为它有一个相当靠谱的作者。

Kent Beck,JUnit测试框架创始人,《测试驱动开发》和《解析极限编程》的作者,软件业中最具创新力,最富盛名的领袖之一。长期以来,他一直致力于挑战软件工程教条,推动模式、测试驱动开发以及极限编程等思想的应用和传播。

优秀的代码绝非仅仅是功能的堆砌:它可以清晰的表述出你的意图,自始至终保持一致性,让其他开发者可以理解并信任你的代码,能够信心十足的修改它。但是这 种代码不会自然而然地产生。它是编程人员每天数百个看似琐碎实则重要无比的决定的产物。在这本书中,Kent Beck将自己多年形成的编程习惯以及阅读既有代码的体验凝练成了编程中的价值观、原则和77种实现模式,帮助人们写出更加简洁、清晰、组织良好且具有更 佳有效产出的代码。

在OOPSLA 2007大会上,Kent Beck在接受InfoQ的采访时说:

这本书有一个前提,就是程序员需要通过代码来跟其他人交流,所以机械式的做法是远远不够的,你需要考虑当别人读你的代码时会有怎样的感受。编程更像是作家 写作,而不仅仅是构造一系列指令让机器运转。其主要原因在于,修改代码要用去编码成本的3倍、4倍或者5倍之多,所以编码时一定要谨慎,别人阅读理解你的 代码,要远远超出你编码所用的时间。

……

我喜欢模式这种形式,是因为你可以通过模式来讨论做事情的动机。市面上有很多有关Java编程的书,那些优秀作品的作者都富有实践经验,曾经认真思考过应 该如何编程;但是我却只能读到一系列的指示,“像这样命名变量,像那样组织代码,等等”,在特定的情形下,这些都是不错的做法,但这样做的理由是什么?我 在书中从来没有看到过答案。它们在什么样的上下文中才能成为正确的做法?前提步骤是什么?又会有什么样的结果?如果我这样做了以后,还应该做些什么事情, 才能让整个系统协调有序?所以会出现不同的个人编程方式。

每一种编程方式都由许多决策组成。它们相互支持,协同工作,从中抽出一条来使用并不一定能有效果。所以通过模式这样一种形式,我就有机会问出这样的问 题,“你怎样给字段命名?”嗯,让我们来看一下,你打算向别人表达些什么东西?如果有人读到一个变量名,他们可能会对这个名字的哪方面感兴趣?在命名方面 有哪些约束?缩写的效果并不太好,但是原因何在?很长的名字也不好,理由又是什么?在以模式的名义写下这些经验时,我就有机会对这一切进行思索。我的变量 命名规则是,用简单的名字描述出变量在计算中所担任的角色,但是如果我把这个规则说出来就完了,有些人就会直接拿来用,不会去想为什么,也体会不到我所体 会到的东西,而且,当这条规则不再正确时,他们不知道规则背后隐藏着什么样的思索,所以也就不知道何时打破规则。

……

如果你尚未决定是否要读这本书,或许你还可以先听一下诸多名家的赞誉之语:

“Kent是用代码来沟通的大师,他的代码不但易于理解,而且阅读起来是一大乐事。我们在创造高质量代码的过程中不断做出微小却重要的决定,本书每一章都是对这些决定的精辟解释和深刻洞察。”

——Erich Gamma,《设计模式》作者

“很多人没体会过代码的可读性能有多高,也没意识到可读性有多大的价值。Kent Beck教过我很多,这本书让所有人都有机会以他为师。”

——Martin Fowler,《重构》、《企业应用架构模式》作者,ThoughtWorks首席科学家

“《实现模式》填补了设计和编码之间的缺口。Beck以价值观和原则为基础,引出了编程领域的一种新的思考方式。”

——Diomidis Spinellis,《Code Reading》和《Code Quality》的作者

或者,也可以读一下译者序:

这是一本关于如何写好代码的书。

如果你不认为写好代码是一件重要、困难并且有趣的事,请立即放下这本书。

什么是好的代码?可以工作的、性能良好的、不出bug的代码,就是好的代码吗?

所谓好的代码,除了其他所有要求以外,还应该清晰准确地传达写作者的想法。

Martin Fowler在《重构》里说:“任何一个傻瓜都能写出机器能懂的代码。好的程序员应该写出人能懂的代码。”

如果你不同意这句话,请立即放下这本书。因为这是一本关于如何用代码与他人(而非机器)沟通的书。

任何读到这一行的程序员都应该读完这本书。

Steve McConnell在《代码大全》里说:“不要过早优化,但也不要过早劣化。”这本书将告诉你如何在几乎不引入任何额外成本的前提下避免一些常见的低级错误——它们是常见的,因为几乎每个人都犯过并且还在犯着这些错误。

如果你确实没有时间,至少应该读完第6章“状态”。因为在各种常见的低级错误中最常见者就是关于“什么信息在什么地方”的决策错误。

在这样一本书的序言里说任何废话都将是佛头着粪。

所以,现在就祝你阅读愉快、编程愉快。

是为序。

InfoQ独家提供样章:欢迎下载第3章《一种编程理论》

本书的译者为:

李剑,Ethos资深工程师,InfoQ中文站敏捷社区首席编辑,译作有《深入浅出Struts2》《硝烟中的Scrum和XP》

熊节,ThoughtWorks资深咨询师,InfoQ中文站敏捷社区编辑,译作有《重构:改善既有代码的设计》《J2EE核心模式》《Contributing to Eclipse》

郭晓刚,InfoQ中文站架构社区首席编辑,独立开发者,10年工作经验。

买过英文版了 发表人 Cui Anders 发表于
没有样章? 发表人 Moon Shinson 发表于
Re: 没有样章? 发表人 刘 申 发表于
为什么当当没有卖得? 发表人 shen shibo 发表于
Re: 为什么当当没有卖得? 发表人 小刀 凉粉 发表于
上穷碧落啥意思? 发表人 Pazzini Giampaolo 发表于
Re: 上穷碧落啥意思? 发表人 小刀 凉粉 发表于
Re: 上穷碧落啥意思? 发表人 peng xiao 发表于
  1. 返回顶部

    买过英文版了

    发表人 Cui Anders

    前几天刚买的英文版,一直很喜欢Kent的风格:)

  2. 返回顶部

    没有样章?

    发表人 Moon Shinson

    给几段样章看看:)

  3. 返回顶部

    Re: 没有样章?

    发表人 刘 申

    增加了一个样章:)

  4. 返回顶部

    为什么当当没有卖得?

    发表人 shen shibo

    为什么只有china-pub有卖得?这个网站超级恶,我在那买本书邮了80天才邮到,希望当当也能有卖得

  5. 返回顶部

    Re: 为什么当当没有卖得?

    发表人 小刀 凉粉

    当当的购书地址在这里:

    product.dangdang.com/product.aspx?product_id=20...

  6. 返回顶部

    上穷碧落啥意思?

    发表人 Pazzini Giampaolo

    基本上我觉得吧是古文

  7. 返回顶部

    Re: 上穷碧落啥意思?

    发表人 小刀 凉粉

    长恨歌:上穷碧落下黄泉,两处茫茫皆不见

  8. 返回顶部

    Re: 上穷碧落啥意思?

    发表人 peng xiao

    刚看到样章,就来个“上穷碧落”,这,这。。。

    貌似小刀的 古文造诣相当的不错,不过还是认为在这样的技术书籍中弄个这样的句子出来有点不合适。。。

深度内容

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。

解析JDK 7的动态类型语言支持

随着JDK 7的发布,字节码指令集终于迎来了第一位新成员——invokedynamic指令。这条新增加的指令是JDK 7实现“动态类型语言(Dynamically Typed Language)”支持而进行的改进之一,也是为JDK 8可以顺利实现Lambda表达式做技术准备。在这篇文章中,我们将去了解JDK 7这项新特性的出现前因后果和它的意义。

Java Remoting远程服务(下)

随着互联网应用的发展,Java分布式远程服务技术受到越来越多的关注,本文将对各种相关实现以示例的形式逐一介绍,并总结其中的优缺点,使读者能够在技术选型时有所准备。这是文章的下篇。