频率降低难度
2011年7月28日
我最喜欢的妙语之一是:如果它让你痛苦,就更频繁地去做它。这句话表面上看起来很荒谬,但当你深入挖掘时,就会发现它蕴含着一些有价值的意义。
这方面的一个例子是集成。大多数程序员很早就知道,将他们的工作与他人集成是一件令人沮丧和痛苦的事情。因此,人类自然的反应是尽可能地推迟这样做。
然而,问题是,如果我们能够绘制出痛苦与集成之间的时间关系图,我们会看到这样一条曲线:
如果你有这种指数关系,那么如果你更频繁地做这件事,你就可以大大减少痛苦。这就是持续集成的作用——通过每天集成,集成的痛苦几乎消失了。它曾经让你痛苦,所以你更频繁地去做它,现在它不再让你痛苦了。
这种更频繁地做痛苦的事情的想法在敏捷思维中经常出现。测试、重构、数据库迁移、与客户交谈、计划、发布——所有这些活动都更加频繁地进行。
是什么导致了这种效果?我认为有三个主要原因。首先,大多数这些任务随着工作量的增加而变得更加困难,但如果分解成更小的块,它们就很容易组合。数据库迁移就是一个很好的例子。指定一个涉及多个表的大型数据库迁移既困难又容易出错。但如果你一次只做一个小改动,那么每次都做对就容易多了。此外,你可以很容易地将小的迁移串联成一个序列。因此,当你把一个大的迁移分解成一系列小的迁移时,所有的事情都变得更容易处理。这就是数据库重构的本质。
反馈是第二个原因。敏捷思维的很大一部分是建立反馈循环,以便我们能够更快地学习。反馈是极限编程的一个明确价值观,也是Ken Schwaber 讨论定义性流程控制和经验性流程控制之间区别的核心。在一个复杂的流程中,比如软件开发,你必须经常检查你的位置并进行路线修正。要做到这一点,你必须寻找一切机会来增加反馈循环,并提高你获得反馈的频率,以便你能更快地调整。
第三个原因是练习。对于任何活动,我们做得越多,就会做得越好。人们常说,做好手术的关键是找到一位经常做这种手术的外科医生。练习可以帮助你消除流程中的缺陷,并让你更加熟悉出现问题的迹象。如果你反思你正在做的事情,你也会想出改进你的实践的方法。对于软件来说,还有自动化的潜力。一旦你做了一些事情几次,就更容易看到如何自动化它,你也更有动力去自动化它。自动化特别有用,因为它可以提高速度并减少出错的机会。
所以,每当你面对一项痛苦的活动时,问问自己这些力量是否适用。如果是这样,增加频率可以让你更有效率,并消除压力的来源。