Don’t Be Afraid to Break Things
有过从业经验的人都毫无疑问在一个代码库不稳定的项目上工作过。该系统很烂,而且改变任何一件事总要涉及破坏其他无关的特性。不论什么时候添加一个模块,程序员的目标都是尽可能做很小的改变,每次发布时他们都屏住呼吸。这种软件就相当于在摩天大楼里玩I珠型Jenga(堆堆乐),总会招致灾难。
年久失修的原因是由于系统本身太恶心了。它需要一个医生,否则只会更糟糕。你已经知道你的系统出错了,但你惧怕打破鸡蛋来做成荷包蛋。一个有经验的外科医生知道必须要切割是为了进一步手术,但他也知道切割是短暂的并且会很快愈合。初期的疼痛对于手术的最终结果是有价值的,而且病人会很快恢复致比他们做外科手术前还要好的状态。
不要害怕你的代码。谁会在乎你搬东西的时候把某样东西暂时打破了?对改变的惧怕而陷入瘫痪是你的项目从一开始就维持这种状态的原因。投入时间去重构将会在整个项目周期内多次收回(时间)成本。同时受益的是你的团队更有经验去处理这个原本糟糕的系统,是你们所有专家都能了解它是如何工作的。接受这些知识而不是憎恨它。在一个你讨厌的系统上工作可不是每个人都应该浪费的必要时间啊。
重定义内部接口、重构模块、重构“复制粘贴”的代码、以及通过减少依赖来简化你的设计。通过消除极端情况你可以显著降低代码复杂性,这些基本是由不正确的功能连接导致的。慢慢地将旧的结构过渡到新的,并顺着(过渡)这条路测试。试图去“一波流”完成一个庞大的重构,会招致足够多的问题促使你想要半途放弃所有的努力。
作为外科医生是不会害怕切除病变的部分的,要为愈合腾出空间。这种态度具有感染力,会鼓舞其他人开始处理那些他们之前没有清理的项目。为了项目的良好生产,保持一个让团队觉得有价值的“卫生”的任务列表。说服管理层,哪怕这些任务可能无法产生可见的结果,但他们可以降低成本加速发布。永远停止关注生产“健康”的代码。