第1章 概述 随着岁月的推移,软件系统无论是规模还是复杂度都在呈数量级增长。作为软件的构建者,这种非凡的变化带给我们的惊叹远甚于恐慌。设想我们采用同样的方式让篮球比赛不停地扩大规模,在10年内,从*初的5名球员,增加到50名球员,再到500名球员……该是多么困难。正是因为这样的高速发展,**之软件系统无论是规模,还是复杂度,均远远超出过去构建的任何系统。 软件***常常陷入与复杂度和规模这些宿敌斗争的泥沼。但正所谓“魔高一尺,道高一丈”,无论对手变得多么强大,***总能绝处逢生,甚至大获全胜。他们是如何做到的? 一种答案是,软件工程的进展已经与软件规模及复杂度的增长相当。汇编语言编程(assembly language programming)已让位于更**的语言及结构化编程。在许多领域,过程已让位于对象。软件重用在过去仅仅意味着子例程(subroutine),而现在却代表种类繁多的程序库及框架。 如今,***与软件复杂度之间的战争似乎陷入了僵持状态,这并非巧合。由于***无法平添智慧,因此转而改良他们的武器。武器的改良给了***两种选择:是更容易解决昨日之难题,还是准备与明日之敌作战?尽管我们并不比前辈***更加聪明,但是改良了的武器使得我们能够构建规模更大、复杂度更高的软件。 软件***总是善于运用一些有形的武器,例如,集成开发环境(integrateddevelopment environments,IDEs)和编程语言,然而,无形的武器带来的影响可以说更为深远。回到篮球比赛的隐喻。假设教练和新手(初出茅庐的新队员)正在观看同一场比赛。教练所能察觉到的内容会远远超过新手。这并非是因为教练火眼金睛,而是因为他掌握了某种无形的武器。通过建立一整套思维抽象,教练能够透过现象看到本质,把对原始现象的感知转换为对目前局势简明扼要的理解。……