如果你只是至少20年前,绝望的经理和老板一直欺骗自己说软件开发是一种机械化的生产流程。制定出规格标准,架构师把这些规格标准转化为高层次的技术层面。设计师再把详细的设计文档填入这个框架,然后交给像机器人一样工作的程序员,他们一只手拿着低俗小说,另一只手慵懒地敲入设计执行方案。最后,Inspector 12 收到完整的编码,经测试符合最初的规格标准后,准许通过。
经理们都希望软件开发机械化,这并不是什么奇怪的事。他们了解怎么做好机械化工作。几十年的经验教会了我们如何有效精确地制造有形的东西。所以,把我们从机械化生产中学到的经验运用到软件开发上,我们就可以将其优化成一系列的生产流程。
在这个所谓的软件工厂中,雇员都是专才。他们坐在流水线旁自己的座位上,把Java的部件组合在一起,或者在软件车床上打磨一个VB的应用程序。Inspector 12 是测试员。软件组件随着流水线向下流动,Inspector 12 每天以同样的方式测试这些组件并盖章以示合格。J2EE 设计师设计 J2EE 的应用,C++的编码师在 C++环境下编码。这个工厂中,一切都划分得很分明,安排得有条有序。
但是,这个类比并不成立。软件至少应该适应软件需求。这个行业已经变了,商业人士知道软件很“温柔”,可以根据需求做出改变。但这也就意味着构建,设计,编码和测试环节也要相应地变得更加灵活,这些都是机械化生产过程无法满足的。
在变化如此迅速的环境下,灵活才能制胜。聪明的生意人在碰到难题时,会向身边的专业软件师寻求帮助。那么,你怎么才能成为这些生意人遇到困难时首先想到的“英雄”呢?答案就是—-能够解决一切可能出现的难题。
但是这些难题是什么呢?没错,你我都一样,我们无法预测会产生什么难题。我只知道这些问题非常多样化,诸如严重的设计缺陷需要立刻修补,异构系统的集成,以及 ad hoc 报告的生成。面对这么多种问题,可怜的 Inspector 12 可能会命不久矣了。
有句话是“什么都懂点,但什么都不专”,一般来说,这句话是贬义的,是说这个人没有专注于某一项领域,并深入学习,成为这方面的专家。但是,当你的购物网站“提交订单”出了故障,每个小时你都会损失上百个订单时,那这个“什么都懂点,但什么都不专”的人可能即知道这个程序代码是怎么运行的,还会做些简单的UNIX调试,分析RDMS规范中潜在的性能瓶颈,并能检查网络路由器配置看是否存在某些隐蔽的问题,更重要的是,找出这些问题后,这个人可以很快做出架构和设计决定,纠正代码,部署一个新的系统。这样看来,机械化生产模式看起来就非常奇怪,而且具有很多的缺陷。
另外一个机械化生产模式无法立足的原因是:这种生产线使工作按照稳定的步伐直线进行,而软件项目通常是具有循环性的。不仅项目的流动是循环的,一个项目内部的工作也是循环的。在制定完软件的规格,架构和设计之前,程序员要么坐在椅子上等,要么在这段时间着手做其他项目。(插一句,在实际的开发中,无论是项目还是产品的开发,没事干是不可能的)。但这种同时参加多个项目的问题是,不管这个软件的开发目地是什么,当程序员要大展身手的时候,必须要依赖前后流程和经验。规格,架构和设计文档可能非常出色,但是如果程序员不懂这个系统是用来做什么的,他就不能很好地实现这个系统。
当然,我所说的不仅适用于程序员。软件开发上的任何一个职位都是如此。由于前后流程的问题,同时参加多个项目并不可行(插一句,在国内没有那么绝对)结果是,我们的生产系统是低效率的。在机械化生产模式中,有各种各样的方法尝试解决效率低下的问题。但是,我们还没有想出办法来优化我们的软件工厂,使它变得更有效率。
由于本文比较长,我将在下一次给大家介绍!感谢你的关注!
如果您对我的文章感兴趣的话,请点击这里加我为好友:
唠叨了这么多,希望对年轻的朋友有一点点帮助,也欢迎大家和我交流。(留言更好!)
我的联系方式:
邮箱:water6000@sina.com
MSN:richardzhu1860@hotmail.com
QQ:16698753,630096007
支持网站:www.ityouku.com