为何优秀如程序员,也会构建 Bug 满格的软件?( 七 )

即使在产品构建完成之后,这种知识仍然很重要。假设一个新团队接管了一个不熟悉的代码库,然后很快开始升级该软件。操作系统会更新,业务需求会发生变化,而且还会发现需要修复的安全问题。处理这些复杂的错误往往比构建软件本身的难度都大,因为你需要要对系统的体系结构和设计原则有深入的了解。

在短期内,一个不熟悉的开发团队可以通过权宜之计修复这些问题。但随着时间的推移,由于新添加代码的权宜性,新的bug会不断积累起来。由于新代码不符合设计范例,用户界面会变得混乱,而且整体的系统复杂性也会激增。所以,我们不应该将软件视作静态产品,而是应该当成团队集体理解能力的生动体现。

这就是为什么你很难依靠外部供应商为你开发核心软件的原因。你可以拿到一个运行良好的系统以及代码,但有关该软件的构建及设计抉择的宝贵知识却流失了。这也是为什么将系统交给新的供应商进行“维护”时往往会引发各种问题的原因。即便这个系统有良好的文档记录,但每次交给新团队接管时都会遗失一部分知识。多年以后,该系统就会因为不同代码的拼凑而变得千疮百孔。长此以往,系统的运行就会越来越难,因为没有人真正理解系统的运作。

推荐阅读