人员、过程之后,我想说说一个不可忽视的参数:环境。
因为看的多是翻译过来的文章,所以起初搞不清楚这个词多应得英文到底应该是什么。因为以前接触过的可以作此翻译有envirnoment,context等等。应该说在这个地方似乎都还合适。不过我想了想还是选择了enviroment。这个词可以脱离技术远点。更可以解释的丰富点。
如果在软件的领域给“环境”加个前缀的话,我们大体上会选择人文环境,技术环境等等。的确人和人之间营造出来的氛围也是种环境。而且我们对这种环境还特别敏感,不亚于技术环境。就好比一个正常人很难在脏乱差的地方生活好休息好一样,开发,软件生产同样需要各级人员共同努力营造出一个让绝大部分人满意的环境。这里特别强调绝大部分这个前缀。他是团队活动的关键。作为任何一个主管,都应该按照绝大部分人的合理品位去处理,而不是个人品位,如果大家都喜欢业余活动中打羽毛球,而你依靠行政命令,让大家从事不擅长的足球,那么这种矛盾,在工作中产生抵触的情况不可避免。同样,我们决不可以迁就任何一个天才的开发习惯,如果它可以一个人的力量顶替其他人,同时拥有公司绝对的股票,保证它的忠诚度,不然非踏不可。这些都是管理中的软环境,强调管理的艺术。
硬环境,通常说的配置环境。这个环境可是需要公司投入相当大的人力和财力和管理精力。所以它决不是钱可以解决,而是观念的转变。我有个同学所在单位那叫做一个不拿RMB当钱花,领导花了几百万买了套配置环境,仍在一边,据说现在主要用来发mail,那就一个让人心痛阿。。。
为什么配置这么重要?自动化是必须的呢?我想还是和构架优先有关。现代的软件开发观念中,根本没有什么是固定的,不知道是工程的进步还是人类的让步。我们从初始、精华、构建、移交四个步骤可以看出,现在软件工程已经没有显示的活动概念,就是说整个项目从头到尾已经不再按照需求分析,设计,编码等等常用观念来处理整个生命周期,而是强调项目的状态,而每个活动都会出现在各个状态中。在项目的收尾阶段共同达到满意的状态,这就是强调结果导向,中间的都是过渡产品,临时构件。这些临时构件很关键但是不重要,可以迭代向终点前进,在未完成前进行关键迭代,避免正式集成时候发现人力不可挽回的灾难。另外,现在的软件市场已经成为了买方市场,哪里是过去软件公司跟扫盲似的教育客户。客户真他妈难伺候,什么怪问题都有,为了应付这些古怪的问题,我们针对不同的客户需要准备不同的构件。这就是为什么强调构件化开发。每个构件都有不同的版本,我们需要把这些奇奇怪怪的版本记录下来,按照一个的方式予以组合,形成配置基线。这条基线对于回追或者是进化都起着极其重要的作用。我突然发现,我们软件开发的产品开发的产品让很多公司实现了无纸化办公,结果自己常常记了N多东西。
我们虽然对自己充满信心,但是理智告诉我们,我们的产品绝对不可能达到满分的地步,所以缺陷在所难免,无论是客户的合理化建议,还是性能上的自我突破,或者是某些人的特殊爱好,我们都要对系统进行调整,这些调整是需要以可管理的方式开展的,它是以一个叫做SCO(software change order)的冬冬未开始的。这个sco纪录了原因,解决方案,具体措施,消耗成本,当前状态等等。这个对于成本,进度等等是一个非常重要的数据。很多时候直接决定了该软件是否可以release出去,通常是趋势减缓。可是如果没有自动化工具如何开展统计,手工计票?你以为大选阿。
都会UML吗?你学的时候是在纸上画的吗?画错了怎么办?哭。我相信绝对没几个喜欢在word里面画uml图的。大部分都是rose,together或者是play case,gentle等等。画错了,重来吧,说的轻松,看看rose的报价。。。汗。当过QA吗,用excel纪录bug吗,会统计吗?幸运了,excel的确可以做各种报表。用过clear quest吗?还会回去用excel吗?会写sql建表吗?不会,我不会,我会用e-r studo,我保证比你快,关键是修改的比你快。还在用nodepad写程序吗?用vi的不讨论。我喜欢用vc和visual studio 2003。这些工具太重要了,对整个团队的生产力提高发挥了不可磨灭的效能。没有他们叫我怎么活。