重构的词源
2003年9月10日
重构这个词从哪里来?
在写重构这本书的时候,这个问题在我脑海中出现过好几次。我知道这个术语在一个相当小的社区内使用,所以为了发现重构的词源,我和那个群体中的人(沃德·坎宁安、肯特·贝克、比尔·奥普迪克、约翰·布兰特、唐·罗伯茨、拉尔夫·约翰逊……)交谈,以找出是什么促使他们想出这个词的。
显而易见的答案来自数学中的因式分解的概念。你可以将表达式 x^2 + 5x + 6
因式分解为 (x+2)(x+3)
。通过因式分解,你可以使许多数学运算变得更容易。显然,这与将 18 表示为 2*3^2 是一样的。我当然经常听到人们谈论一个程序在被分解成类似的逻辑块后,就被很好地分解了。
当我询问重构的创造者时,他们给出的共同答案是他们不知道。这个词已经存在了一段时间,他们不知道它从哪里来。
我得到的唯一确定的答案来自 比尔·奥普迪克,他撰写了关于重构的 第一篇论文。他记得和拉尔夫·约翰逊一起散步时的一次谈话。他们当时正在讨论软件工厂的概念,这个概念当时很流行。他们推测,由于软件开发更 像设计而不是制造,最好称之为软件重工厂。重工厂后来成为拉尔夫及其同事使用的 咨询组织的名称。
我们今天所说的重构的基础来自 Smalltalk 社区。然而,将程序分解的隐喻也是 Forth 社区的一部分。 比尔·韦克挖出了在利奥·布罗迪的 1984 年出版的《Thinking Forth》一书中首次出现的“重构”一词。我们很确定,这种用法并没有从 Forth 社区传递到 Smalltalk 社区,而是独立发展起来的。