首页 > 代码库 > 关于软件工程中的银弹

关于软件工程中的银弹

很显然,是没有的。但是,有些身居高位且急于求成的人,会对自己的属下去提这样的要求。

他们要求的内容是:要总结出一种管理办法,非常详细地,就像工艺规程指导工作作业一样,使新来的员工能像螺丝钉一样在管理办法的效用下被拧在项目上。我想很多程序员或者软件开发的管理人员都被要求或者本身也期望有这么一种方式,那么我就根据自己读的书,并结合已有的实践去谈一谈。

如果我们把符合需求或真实提高了业务效率的软件系统定义为成功的系统,那么大多数成功的系统都具有如下的特点:是演进式的,具有良好的设计,具有良好的测试。

除了少数投资巨大、几乎可以称为不计成本的项目,大多数系统的建设和开发应是演进式的,通过不断的迭代反馈,持续校正系统和需求的偏离。这种方式的规律虽然一直,但是每一次迭代的范围、周期,都是要结合具体项目情况去判断的,判断失误将产生极为恶劣的后果。如果应该在早起迭代进系统的功能没能及时添加,后期迭代的很多功能都将受到不同程度的影响。

作为IBM著名的项目经理,布鲁克斯博士发表《人月神话》三十年后,又写了《设计原本》。他同样将成功系统的重要因素推在了一个非常微妙的事情上,那就是设计。架构师、设计师在业务需求和计算机技术中得寻找到一个平衡的点,但很明显,一般想要找到“银弹”的人或公司大概是难以拥有足够这样水平的架构师、设计师的。

作为响当当的程序员,鲍勃大叔比布鲁克斯博士遇到过更多和外包项目性质更类似的工作。由于是一线的程序员,鲍勃大叔解决问题的方式是从自己工作出发的。现在很多程序员自己都认为IT行业加班多是普遍现象,几乎已变为“正常”。鲍勃大叔认为,工作中大多数时间都被浪费在阅读代码和测试上了,理解才能修改,测试才能保证修改正确,这两件事一定并不可少,但是如果我们将测试本身变为自动,而且自动化的测试代码可以间接去解释、帮助我们理解业务代码,那么我们将有更多的时间和资源去迭代软件。

以上是三种软件开发领域自己提供的解决方案。而在其他领域,则有这样一些方法:

今井正明所撰写的《现场管理》中,有一些用于运维系统、改善系统的方式,简称PCDA和SCDA,这两种的含义就不详解了,主要意思就是混乱的阶段首先要确定标准和制度。制定标准和制度后通过对现场的观察和权力决策的下放,不断改善已有做法。

 

但是,制度和标准,是很多单位根本就无力去编制的。而这些单位做事的人少,发言的人却多,需求调研时有很多人的发言观点都是矛盾的,但有一些特殊场景下,这些观点可能也不大好反驳。这个问题布鲁克斯博士提到过,可惜没有提解决办法,只说在这种状态下项目几乎是不可能成功,大概言下之意是奉劝大家如果遇上了,尽量离开这样的项目。而你如果想让自己成为可以随时离开某个项目加入其它项目的人,那么就得好好在水平上下功夫了。

关于软件工程中的银弹