第二版有几个明显的变化:
1、书中的示例代码语言由Java换成了大家更为熟悉的JavaScript,可以让更多的读者能够轻松的阅读。
2、增加了一些颗粒度更小的重构手法,操作也更细腻。
这些变化的目的,是让这本书更容易理解。代码的重构与书一样,是为了让代码结构更清晰,更易读(主要是指人的读),也更容易扩展。用作者的话说就是:任何一个傻瓜都能写出计算机可以理解的代码,唯有写出人类容易理解的代码,才是优秀的程序员。
学习一门技术、一个手艺,我们要把握两点:概念、规则。
首先我们了解一下重构(refactoring)的定义:
在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构。重构是一种经千锤百炼形成的有条不紊的程序整理方法,可以最大限度地减小整理过程中引入错误的概率。本质上说,重构就是在代码写好之后改进它的设计。
作为一名程序员,内心深处都有一个理想(幻想):如果某一天,有一个需求描述清晰、逻辑严密、文档完善,即使修改需求也是经过反复验证过的;开发时架构设计非常优良,能很方便的扩展新的功能,而且没有任何(极少)bug….
当然,这仅仅是一个理想的状态,现实中谁也没碰到过(据能查到的公开资料来看,是这样的)。
现实世界,“VUCA” (易变、不确定、复杂、模糊)横行,需求的不明确比比皆是,刚开始设计良好的架构,慢慢的变得杂乱无章,在某个角落里,甚至是充满着腐臭(代码的坏味道)。
这个时候怎么办?大部分人/公司的选择是,反正已经这个样子了,也不是我造成的,能将就着用就先用着吧,等到有时间再重构吧。可是这一天总是等不来,也没有人去实施重构,甚至不出问题也不会去测试。直到某一天负责这个项目的负责人实在忍受不了,跟开发团队说我们重构这套系统吧,给一个月的时间。于是开发人员加班加点的开始"重构"这套系统,然而由于基本功的欠缺,做出修改的时候过于乐观,没有测试、没有认真考虑行为保持的修改过程,痛苦回忆又一遍遍重演。最后,这套系统不堪重负,开发团队选择了重写。。。