有个人要在客厅里钉一幅画,请邻居来帮忙,画已经在墙上扶好,正准备砸钉子,这个邻居却说:“这样不好,最好钉两块木板,把画挂上面。” 他找来锯子还没有锯两三下,又说:“不行,这锯子,得磨一磨。”于是,他丢下锯子去拿锉刀。锉刀拿来了,他又发现在使用锉刀之前,必须得给锉刀安个把柄。为此,他拿起斧头到屋外的一个灌木丛里去寻找小树。就在要砍树时,他又发现生满老锈的斧头实在是不能用,必须得磨一下……当这个邻居为磨斧头找不到磨石,又去买锯子而忙乎时,画早已钉在了墙上。
有些事情原来并不复杂,可是由于人的思维惯性最终在寻求解决方案的过程中忘记了根本目标,最终里目标越来越远。
当然不是说传统的软件过程是离软件开发的终极目标——创建满足客户需求的可运行的应用程序越来越远了,但是很多软件公司在实施软件过程管理的过程中过于强调文档、过程步骤的作用,以至于许多项目管理人员都把精力放在了监督程序员编写众多中看不中用的文档、报告上面了。这样是不是违反了引入软件工程的初衷呢?
让我们看看敏捷软件开发的宣言吧:
- 个体和交互 胜过 过程和工具
- 可以工作的软件 胜过 面面俱到的文档
- 客户合作 胜过 合同谈判
- 响应变化 胜过 遵循计划
强调这些原则并不是说过程和工具、文档、合同、计划毫无用处,而仅仅是为了警醒世人软件开发的根本目标之所在。
再强调一点,强调前者不是要忽略后者,仅仅说明前者的重要性胜于后者,在进行软件过程敏捷化改造的过程中应该保证前者目标的实现,后者应该是在前者能够被保证遵循的过程上补充的。