前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《重构》再版——听Martin Fowler聊聊新版的故事

《重构》再版——听Martin Fowler聊聊新版的故事

作者头像
ThoughtWorks
发布2019-01-02 16:56:46
1.2K0
发布2019-01-02 16:56:46
举报
文章被收录于专栏:ThoughtWorks

本文取自Martin Fowler近日的博客与直播,他在其中分享了自己再版《重构》的想法以及新书中的细节,在此汉化以飨读者。目前,本书正由熊节和林从羽进行翻译,而Martin Fowler也将在明年来到中国,在3月15日的“技术雷达十周年峰会”现场与大家分享过去十年来技术领域的趋势变化,欢迎扫码或点击阅读原文购票。

在这个一小时的访谈中,Martin从以下几个方面表达了对重构的看法:

  • 为什么重构仍然是开发人员重要的技能组成部分
  • 如何最好地通过重构来改进代码
  • 在过去的二十年里,重构发生了怎样的变化

现在这本书的纸质版以及各种电子版本都可以在InformIt购买,很快也会在亚马逊上线。购买该书让你也可以访问标准网络版,其中有纸质版或电子版中没有的附加资料。

我有幸与Kent Beck共同参与了提出“极限编程”概念的C3项目。我从Kent那里学到了很多(现在依然在学习),其中最突出的一点是他不断重写代码库以保证代码库能正常运行,这种方法被命名为“重构”——当时还籍籍无名。在另一项咨询工作中,我强调过这项技术的价值,当时并没有可以用来学习这项技术的书,于是我决定自己动手,撰写了《重构》并在上世纪末出版。

如今,近20年过去,这项技术已经广为人知,虽然远远没有达到应有的效果。这本书也算经受了时间的验证,现在你依然可以拿着这本旧书像多年前那样学习如何重构。但这本书毕竟上了年纪,就像java.util.Vector一般,脸上布满岁月的痕迹。

这些年来我一直在考虑修订它,但我也有点不太情愿。毕竟,它仍然可以很好地教授这一技巧,而且一般来说,第二版在原版的基础上并不会有实质上的改变,这是一个可怕的陋习。但另一股力量一直在推动着我,在我写这本书的时候,把“类”看作是构建代码机制的主要结构已经成为主流。然而,现在我们看到其他结构发挥了更大的作用。在我看来,类仍然很有价值,但是重构要更少地以类为中心。我们要意识到,随着代码被构建成新的结构,类可以存在也可以消失。

从2015年到2016年初,我写了一系列文章来探讨重构的各种情况,这帮助我明确是否应该重写。如果要重写,又应该如何进行。到2016年年中,我已经做好了重写这本书的准备。所以你应该了解了为什么我没有像以前那样频繁的在博客撰文,那是因为从那以后我的精力一直集中在重写这本书上。

第二版的变化

这些变化很细微,但是涉及到方方面面。变化细微是因为书的基本结构没有改变。书的开篇是一个开放式的例子、一个章节的原则、一个“代码坏味道”的调查和一个测试的介绍。这本书的主体仍然是重构,原来有68个重构示例,我保留了其中10个,新增了17个(点此查看详情)。

虽然书的整体结构变化不大,但是文字的变化却很多。每一个章节和重构示例都几乎是从零开始重写,我几乎没有复制粘贴旧版中的文字。

新版重新调整重心,将重点更少地放在类上。虽然这听起来可能就像将“提取方法”的名称更改为“提取函数”一样简单,但它确实需要重新思考每个重构的所有方面。我需要重新考虑动机,经常需要重新设计。至少结构需要详细审查,通常都需要完全重写。对此我没有做详细的记录,但我觉得引用一个相对简单的旧的重构,就要重新考虑两个重构。

另一个变化在某种程度上并不重要,但必然会引起极大关注,那就是示例不再使用Java。

当我在写作中选择一种语言作为示例时,我主要从读者角度进行考虑。我想“哪种语言能帮助大多数读者理解这本书中的概念?”《重构》并不是一本限定语言的书,书中的示例可以通过Java来佐证,但是重构本身适用于大多数语言。我之前选择Java,是因为我觉得如果用Java编写代码,能够方便大多数人进行理解。1997年确实是这样,但2018年仍是这样吗?

我曾考虑使用多种语言,以弱化与某一语言强相关的偏见。但我意识到这会让读者更加困惑,使用同一种语言有助于让读者习惯一致的表达方式。那么哪一种语言是读者最能接受的呢?这种语言要广泛流行,要在流行语言调查中名列前茅。使用基于C语言的语法确实很有帮助,因为大多数程序员会识别基本的代码结构。鉴于此,有两种语言脱颖而出。一种是Java,它仍然使用广泛并且易于理解。但我选择了另一种:JavaScript。

选择JavaScript对我来说颇具讽刺意味,正如许多读者所知,我并不是它的粉丝。它有太多尴尬的边界案例和笨拙的习语。ECMAScript 2015(ES6)引入了一个相当好的类模型,它使得许多面向对象的重构更容易表达,但从最开始,恼人的泥坑就成为了语言的结构的一部分。但是,我不选择Java而选择它的一个重要原因是它不完全以类为中心。它有顶层函数,也经常使用一级函数。即使脱离类的语境,重构也显得很容易。

一本网络优先的书

互联网对我们的社会产生了巨大的影响,尤其影响了我们收集信息的方式。在我首次出版这本书时,大部分关于软件开发的知识都是通过书本传递的。而现在人们习惯于在互联网上收集大部分资料,这对像我这样的作家提出了挑战,纸质书还有它的位置吗?它们的位置又应该是怎样的?

我相信像《重构》这样的书仍然有它的位置,但是需要改变。书的价值体现在用连贯的方式组合大量的知识。在写这本书的时候,我需要收集大量的重构案例,并以一种一致且完整的方式把它们组织起来。

这样的组织方式就像一部抽象的文学作品,虽然传统意义上以书本为代表,但将来却并不需要这样的书本。大多数图书行业仍然将纸质书视为主流。虽然我们已经满腔热情地采用了电子书,但它们只是基于纸质原创作品的电子表现形式而已。

我正在通过这本书探索一种不同的方式。我认为网上阅读可以作为这本书的典型形式。纸质书是把网站上精选的材料以合适的方式印刷出来。我并未试图在纸质书中囊括所有的重构,特别是因为将来我可能会在标准网络版中添加更多的重构。

我们的目的是,当你购买《重构》的第二版时,不仅可以在书店购买它的纸质版,也可以在网上购买它任何形式的电子版,在阅读的过程中随时在需要时访问网站,这份对网站的访问权也是你花钱买到的最重要的东西。

这就提出了一个问题,即电子书(如epub和kindle格式)应该扮演什么样的角色。一个有力论点是:电子书应该包含网站上的所有内容。毕竟物理容量并不是一个限制因素,而且如果有新增资料,电子书可以很容易地更新。然而,图书行业并不这么认为,他们希望电子书和实体书的内容相同,所以《重构》的电子版将遵循这一原则,至少目前是这样

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ThoughtWorks洞见 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第二版的变化
  • 一本网络优先的书
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档