开发之乱 -- 变化 (序)
很多人喜欢把软件开发比作盖房子,两者都需要需求分析、架构设计、具体实现,整个过程还贯穿质量
检查。软件行业中很关键的一个职位:架构师(architect)就来源于建筑行业。
可是自从1946年第一天计算机问世以来,60多年过去了,软件开发还是存在着种种混乱。绝大部分的
软件都没法按照预期估计的时间发布,以至于每次预期进度的时候都需要加上一些缓冲时间来应付突发事
件。而盖房子基本上都能按预期盖好,甚至还能提前。
仔细想想,盖房子所需的周期比较长,而且盖房子的成本跟房子数目是呈正比的;而软件开发就不太一
样,软件开发完后只需简单复制就可以制造出任意多份软件。时间上大部分房子盖得都差不多,而大部分
的软件都不太一样。经验没法快速的累积,导致盖房子的人可以随时换,而软件开发的人员却不好随意更
换。软件开发过多的依赖于人。但某样事物过多的依赖于主观意识,不混乱才怪呢。
软件开发中进度预估是非常重要的,决定了什么时候市场部门开始做策略,什么时候销售部门开始销售。
可是由于人的因素,即使是相同的项目,相同的团队,在不同的时间开发所需要的时间还是不同的。某个
人感个冒,或者吵个架,工作效率就不一样,最终结果就是开发的进度受到影响。只有拥有足够多的经验,
成熟的团队才有可能将软件进度预估的稍微不离谱些。
当然如果只有这些的话,软件开发还不会那么混乱,毕竟经验可以积累,团队可以锻炼。导致开发混乱
的最本质的因素是变化。和盖房子一样,造桥也是一种公认的设计精密、执行无误的工程项目。可是《梦
断代码》里面提到的美国旧金山海湾大桥,最后也严重延期,开支暴增多倍。主要原因工程设计比原计划
有变化(希望提升工程质量和大桥防震加固能力),工程师们对当初的设计做出不少变动。
而软件开发面临更多变化:新技术的使用,软硬件的更新换代,需求的改变,人员的变动等等。最终导
致了开发的混乱。
随后我将以经历的一个项目讲讲这些变化。