赠书:百万畅销书《重构》再版,听Martin Fowler聊聊新版的故事_编程语言

 

今天,我们异步社区的老朋友、百万级畅销书《重构》的作者Martin Fowler,给你送来了 2019 年的第一个惊喜。

那就是——《重构》再版。

第二个惊喜是3月15日,Martin来华,共享技术盛宴,你是不是跟小编一样的期待呢?注意,下方有《重构》(第2版)中文版剧透,一起来看~

“重构”这个概念来自Smalltalk圈子,没多久就进入了其他语言阵营之中。由于重构是框架开发中不可缺少的一部分,所以当框架开发人员讨论自己的工作时,这个术语就诞生了。重构,一言以蔽之,就是在不改变外部行为的前提下,有条不紊地改善代码。多年前,正是《重构》原版的出版,使重构终于从编程高手们的小圈子走出,成为众多普通程序员日常开发工作中不可或缺的一部分。本书也因此成为与《设计模式》齐名的经典著作,被译为中、德、俄、日等众多语言,在世界范围内畅销不衰。 

《重构》凝聚了软件开发社区专家多年摸索而获得的宝贵经验,拥有不因时光流逝而磨灭的价值。今天,无论是重构本身,业界对重构的理解,还是开发工具对重构的支持力度,都与本书最初出版时不可同日而语,但书中所蕴涵的意味和精华,依然值得反复咀嚼,而且往往能够常读常新。这本书在豆瓣评分高达9.3分。 

今天,重构已成为靠谱程序员的一项必备技能,如果你不知道重构理念,显然还不能称为一位成熟靠谱的程序员。《重构》一书也成为了每一位程序员必读经典之一。

重构是避免不了的,程序员永远需要在好的架构和不停变更的需求中做取舍,通过不断重构消化掉脏代码。你需要避免的是代码彻底超出掌控之后完全重构这个过程。

赠书:百万畅销书《重构》再版,听Martin Fowler聊聊新版的故事_人工智能_02

《重构》豆瓣评分9.3

时隔20年,《重构》新版即将出版,作者在他的社交平台上发布了新书的细节,让我们一起期待一下吧。当然在文末留言你对《重构(第2版)》中文版的建议,我们还会有礼物送出。

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

在这个一小时的访谈中,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格式)应该扮演什么样的角色。一个有力论点是:电子书应该包含网站上的所有内容。毕竟物理容量并不是一个限制因素,而且如果有新增资料,电子书可以很容易地更新。然而,图书行业并不这么认为,他们希望电子书和实体书的内容相同,所以《重构》的电子版将遵循这一原则,至少目前是这样。

《重构》(第2版)中文版出版计划

重构(第2版)中文版计划2019年3月15日同步出版,将抢先推出平装版,如果你想购买精装版可以留言预定,同步推出企业定制版,同样接受预定。

赠书:百万畅销书《重构》再版,听Martin Fowler聊聊新版的故事_编程语言_03

《重构(第2版)》英文版封面

《重构》(第2版)中文版,计划在北京、上海、广州、成都举办4场技术分享会,届时会邀请国内重构领域大咖专家做分享,干货满满,相信你一定会有所收获。