让软件像树一样成长起来而非像房子一样建造起来
——Fred Brooks
学了这么久的软件设计模式和软件体系结构,今天看到这句话,确实有些话想说,观点不一定正确,仁者见仁,智者见智!
软件工程与其它所有的传统工程领域都不一样,没有办法事先将设计做得非常完美,用户的需求随时可能发生变化,这在其它工程领域中是无法想像的。比如建筑工程中,一旦设计图纸定了,工程开始施工之后,用户如果需要更改需求,这几乎是不可能的事,这样产生的高昂的成本代价是任何一家建筑公司无法承受的。事实上,在传统工程领域中,用户需要对需求做出临时更改的情况并不多见,用户的脑海中也不会有随时改变需求的意识和想法。
软件工程是从其它传统工程领域概念中搬过来的概念,这不得不说是一项划时代的进步,把传统软件行业从小作坊生产方式推向了高度工业化模式。
然而,软件工程发展到今天,业内人士又发现了一个巨大的问题,其它工程的概念并不能完全适用于软件工程,在一些具体的项目中甚至会严重的水土不服。造成这种现象的根本原因就在于——需求变化,这点非常重要。文章开头举的例子可以看出来。
但是,用户去并不明白这些或者说即使明白他们也不会在意,在用户看来,软件工程内所谓的需求变化只不过是增加、删除或者修改代码罢了,这在用户看来并没有什么了不起的,也不会关心这样做的成本问题。用户不会给建筑公司提要求让他们在事先拟定的报酬范围内为已经完工或者快要完工的建筑加一个地下室,如果真的有客户这样做了,建筑公司肯定会怀疑这个客户是不是刚刚从精神病院也来。但是这个问题放在软件领域将会出现另一番现象,用户能够理直气壮的针对一款软件产品对软件公司提出一些需求变化,不管这款软件的开发处于什么时期,这并不会给用户带来丝毫的心理负担。当然我需要声明的是,对于软件产品来说,用户的合理的需求变化是正常的,毕竟用户事先也并不能考虑到所有方面。
上述的情况对软件工程提出了新的要求,我们设计的系统、软件要尽可能的适应更多维度的需求变化,这对软件(系统)框架的设计来说至关重要。在当今这个以信奉“用户就是上帝”的市场经济时代,Fred Brooks所说的应该是我们的终极追求,虽然这很难,但大家不都正在向这个目标迈进,不是吗?