复杂性的本质与应对策略
1 引言
编写计算机软件是人类历史上最纯粹的创造性活动之一。程序员不受物理定律等实际限制的束缚,可以创造出激动人心的虚拟世界。编程不需要像芭蕾舞或篮球那样的高超身体技能或协调能力。编程所需的一切就是一个创造性的头脑和组织思路的能力。如果你能想象一个系统,你可能就能在计算机程序中实现它。
这意味着编写软件的最大限制是我们的理解能力,即我们正在创建的系统。随着程序的演变和获得更多功能,它变得复杂,其组件之间存在微妙的依赖关系。随着时间的推移,复杂性逐渐积累,程序员在修改系统时越来越难以将所有相关因素记在心里。这会减慢开发速度并导致错误,这些错误会进一步减慢开发并增加其成本。任何程序的生命周期中,复杂性不可避免地增加。程序越大,参与开发的人越多,管理复杂性就越困难。
2 复杂性的定义
复杂性是指与软件系统的结构相关的任何事物,这些事物使得理解并修改系统变得困难。复杂性可以有多种形式。例如,理解一段代码的工作原理可能很困难;实现一个小的改进可能需要大量的努力;或者不清楚需要修改系统的哪些部分以进行改进;在修复一个错误时可能会遇到困难,而不会引入另一个错误。如果一个软件系统难以理解和修改,那么它是复杂的;如果它易于理解和修改,那么它是简单的。
你也可以从成本和收益的角度来考虑复杂性。在一个复杂系统中,即使实施小小的改进也需要大量的工作