重构、重新架构、再设计与重写的区别

稍早的文章评论里,Jon Eaves表达了把重构做为动词过度使用的忧虑。尤其是重构(refactoring)【注1】和重新架构(rearchitecting)之间的界线非常模糊,重构被用作在你回头做第二遍的、任何行为的标签。你明白吗?Jon是对的。

被Martin Fowler定义的重构,是一个非常具体的术语,以数学上等同的具体术语为基础【注2】。重构是关于小的、“行为保留”的增加的、安全步骤。重构不是在应用程序里回头去“填充空白”的借口。

让我们给出一些具体的例子来说明什么不是重构,下面的行为都不被视作重构:

貌似离发布总还有两周

貌似不管我做什么、计划什么和开发什么……我总是离发布Workado还有两周时间。我一直在思考、甚至在说,这就是现在起3个月内最好的阶段。

这违背了我对大部分人说的话:

“先发布,然后再规划后面的。”

幸运的是,它还没有回来在后面咬我。来自Groove的Alex Turnball记录了当它尽量提供未来功能的发布日期时,它是如何伤害了他在一些客户面前的名声的。我没有给我们实际上要发布的工作设置期限,因为那个故事以及我认为它总是错误的。

尽管如此,我确实相信,距离发布第一个web应用程序还有两周是合理的。相较于基于业务的服务,还有一个完全不同的故事,比如《I was able to launch last week after 7 days》。

下面是确实没有根据计划进行的简短情况,我希望有人在某些地方能够吸取我的经验,以克服他们自己的一些延期。

为什么越简单的技术对于开发人员越难

简单 != 容易

从Amazon Web服务到AngularJS之类的web框架,便利性驱动着世界上最好的技术。但是,更加快速地、变得有效率的“便利性”,经常伴随着一个隐藏的价格标签:为了变得真正有效率,你将不得不花些功夫。

伟大的技术经常貌似简单,新手们直觉上不需要太多努力就可以“学习”。当人们认为他们已经掌握了这门技术、而他们真正做的所有工作相当于是一个“hello world”程序的等价物时,问题就出现了。在你归咎于这个工具之前,你往往需要投入时间以正确地使用它。

关于AngularJS的“复杂感受”

让我们用AngularJS做例子。AngularJS是一个web应用程序框架——JavaScript代码类库、模板和其它软件的集合,目的是让开发人员更加容易地开发动态网页或web app。

正如Anand Mani Sankar建议的,问题在于AngularJS入门容易,简单掩盖了框架的力量:

[AngularJS]通过抽象了很多内部的复杂度,而只暴露程序开发人员关心的东东,大大简化了应用程序的开发过程。
...