十、不变的只有变化
需求变化最根本的来源是人对于世界的认识规律。人类必须通过实践才能认识世界;同样,软件本身也必须通过使用和开发的实践,才能认识清楚其需求。因为软件的需求往往就是人对世界的认识。
1.软件业正致力于应对需求变化
只有软件被生产并应用起来,人才能真正地对其有正确的认识,基于这些认识,软件中的设计错误才有可能被改正。这个过程循环不止,软件项目本身如果跟不上这个节奏,就可能惨败。如何能以最低成本进行这个循环,减少每次修改造成的浪费,是应对这种反复修改的重要手段。
在人类真正清晰、完整地认识世界之前,需求变化都是不会停止的。所以我们要做的不是去拒绝变化,而是把需求变化看成软件开发中最重要的一环。软件业发展至今,业界已经在软件工程学上取得了很多突破,我们应该去学会使用这些知识,去更好地控制需求变化,让需求变化为软件项目服务,而不是阻碍项目的发展。
需求变化所导致的问题,往往不是狭义的软件开发技术能解决的。于是软件业先辈们苦苦思索解决之道,软件项目管理、软件需求管理、软件开发管理等学科就萌芽了。结构化编程、面向对象分析方法、瀑布式开发模式、敏捷开发模式、持续集成、ITIL等软件管理知识不断被提出并整理出来。
另外,在软件开发语言、开发工具等方面,也有大量为了解决软件开发危机而出现的新技术、新语言。从汇编到C语言,然后到基于虚拟机的Java,再到现在诸多的脚本语言LUA、PYTHON、JS、PHP、RUBY,善于解决并发问题的过程化语言Erlang、Haskell、Scheme,等等,无一不在提高软件开发者的工作效率。开发工具从传统的GCC、Vi、Make到现在的IDE集成环境,再到插件式的IDE——Eclipse平台,都有着长足的进步。而设计模式、架构模式更是在不断地总结各种新环境下解决开发问题的经验。
现在的软件开发,已经从以往的对硬件性能的控制,全面转向以提高软件开发效率这方面。我把这些知识统称为软件工程知识。
2.提高开发效率是根本方法
所有的软件工程知识,最后都是为了达到一个根本目标——提高软件的开发效率。因为只有提高开发效率,才能真正从本质上解决软件项目管理的难题。
开发效率的提升,会让项目进度加快,同样会降低开发工作的强度,进而降低BUG的出现概率。
开发效率提高之后,软件不仅能更快地发布,而且还能更快地获得用户反馈进而能尽快修正开发方向。
同样更高的开发效率能在市场上保持强大的竞争力,不再怕对手的抄袭,因为就算抄也来不及。
开发效率提高还能省出更多的开发人员和资源,用来提高项目的安全性、稳定性、运行性等非功能目标,让软件在另外一个层面产生竞争优势。
然而,提高软件开发效率绝非易事,因为软件开发到现在为止,最主要的“瓶颈”还是开发者本身。至今还没有哪种机器能做到“让一行行的软件代码和数据快速而高质量地生产出来”。而且更要命的是,没有一种作品像软件那样苛刻。比如说,一篇文章有个别用词不当,不会导致文章不可读;图画有一两处败笔还能算一幅图画;音乐演奏的一点点失误也尚可忍受。而软件则要求人类百分之百地去实现逻辑,这种劳动的压力远远大于一般的脑力劳动。
要解决最常见的软件项目的开发难题——需求变更,提高开发效率是根本之道,而开发效率地根本所在是人。只有让人去掌握诸多软件知识,让人去关注开发效率,才能真正地应对需求变更。
以人为本,是软件项目管理的核心。