软件工程,乃至于所有的工程,其目的都是完成设计目标,达到预期的目的。工程管理就是协调人、工具和过程,使之最终达到需要的结果。具体的说,就是让人使用一定的工具,按照一定的组织过程,最终完成任务的一个体系化的方法。这个大家都是认可的。但是……
但是有好多因素导致这么简单的一个体系化方法展开失败。第一个最主要的因素是工程目标本身。并不是说软件工程的目标有多么不清晰,多么难以琢磨,而是说,大多数人都没有意识到,软件系统是作为现实系统的一个对偶系统存在的,而且,一般情况下,软件系统总是对现存系统的某种改变而不是从0开始构造。所以,我们拿到一个目标以后,不考虑现实的状况而直接分解目标,给出方案的方式是极端错误的。
第二个因素是承接该工程的团队的特性。任何一个团队,都有自己的个性特点,都有自己习惯的过程,都有自己常用的工具,团队成员都是有个性,有弱点,知识结构不是完美的人。而大多数软件工程都希望把方案分派下去以后,所有的人都遵守定义好的过程,采用定义好的工具,在定义好的时间限度内完成。如果这些真的是预先定义好的,为什么需要人来参与?都是死的固定的东西,为什么不能用机器来完成?当然,工程方法总是需要格式化好的人,但是,这个对于程序员尤其不合适。软件工程的过程中,总是需要程序员的创造性劳动的,所谓创造性,就是不可规范的,不可预见的,突发的,跳跃的,甚至是灵光一现的思维活动。这如何能用工程规范出来?当然,我并不排除那种特别熟悉的,没有什么挑战性的项目可以部分的采用工程管理的方法进行。
先到此为止,有什么别的想法以后再加。
但是有好多因素导致这么简单的一个体系化方法展开失败。第一个最主要的因素是工程目标本身。并不是说软件工程的目标有多么不清晰,多么难以琢磨,而是说,大多数人都没有意识到,软件系统是作为现实系统的一个对偶系统存在的,而且,一般情况下,软件系统总是对现存系统的某种改变而不是从0开始构造。所以,我们拿到一个目标以后,不考虑现实的状况而直接分解目标,给出方案的方式是极端错误的。
第二个因素是承接该工程的团队的特性。任何一个团队,都有自己的个性特点,都有自己习惯的过程,都有自己常用的工具,团队成员都是有个性,有弱点,知识结构不是完美的人。而大多数软件工程都希望把方案分派下去以后,所有的人都遵守定义好的过程,采用定义好的工具,在定义好的时间限度内完成。如果这些真的是预先定义好的,为什么需要人来参与?都是死的固定的东西,为什么不能用机器来完成?当然,工程方法总是需要格式化好的人,但是,这个对于程序员尤其不合适。软件工程的过程中,总是需要程序员的创造性劳动的,所谓创造性,就是不可规范的,不可预见的,突发的,跳跃的,甚至是灵光一现的思维活动。这如何能用工程规范出来?当然,我并不排除那种特别熟悉的,没有什么挑战性的项目可以部分的采用工程管理的方法进行。
先到此为止,有什么别的想法以后再加。