记忆 2 - 我们对问题的思考

我们对问题的思考

怎么解决这些问题呢?实施软件工程当然是解决“软件危机”的最好方案。问题的关键是怎么实施?

客观上,大多数的公司都会选择实施软件工程,这可以提高项目成功率,降低成本以提升竞争力;对于软件开发人员,也会对实施好的实践和新的方法以提高效率增长知识而激动不已。但是主观上,公司规范的实施软件工程可能需要投资,短期内看不到收益,所以迟迟不推行;开发人员也是,软件工程内容较多而且有些难度,有些过程和方法有些条条框框,不能坚持工作也不够自由,慢慢的就会有一些惰性和恶习。

软件工程经过30多年的发展,已经有非常多的成果和实践,不可能每个公司都能学习并且消化,有很多公司还年轻,没有很多积累。举一个例子,图书里有很多的书籍,不代表我们都很有知识。另外,对于软件过程,方法和工具,流派很多,选择太多。但是,不管怎样,我们必须实践,公司必须有积累,必须重用过去的成果。


下面是需要努力的方向:

提高软件质量,以此来规范市场体制,培育竞争机制,认识软件开发的规律。在一个论坛上面看到过这样一个故事:

“一个牙疼的病人走进医院,一位导医小姐立即热情地走过来,了解到病人的病情后,向病人推荐了三个医生。病人说:让他们三人来我这里挂个号吧,挂号费两元,再交一百元押金!三个医生向病人买了挂号纸。得到病人的许可后,三个医生轮番对病人进行检查(检查是免费的!)。医生甲对病人做过例行检查后,又拍了X光片,诊断要把坏牙拔掉,否则会进一步影响周围的好牙。医生乙做过例行检查后,病人不再同意做X光检查,医生乙给出的建议是先消炎,同时服用一些止疼药。医生丙也只是用牙科的器械做个常规检查,然后建议消炎、补牙。病人在朋友中找来几个略通医道的“专家”,对三个治疗方案进行一番“评审”,结果以多数的意见选择了医生甲的治疗方案——要把牙拔掉。病人于是退回了医生乙和医生丙的押金一百元,从医生甲的押金中扣除20元作为评审费分给了几个“专家”,同时同意医生甲进入治疗阶段。治疗完毕,又过了一个月(保用期),病人对这次治疗确实感到满意,付了治疗费和药费,归还了医生甲剩余的80元押金。您一定觉得滑稽,天底下哪有这样看病的地方?可是软件公司每天都在重复着这样的故事。”

还好看的是牙齿,如果是肚子痛,心脏痛,是不是每个医生都去捅一刀,各自进行检查,然后选择一个医生来看病?这个故事虽然有点夸张离奇,客户和开发公司之间的关系也不见得是医生和病人的关系,但是这也确实道出了一些开发过程中的不合理现象。

 

软件的实施失败率这么高,试问一下,我们的客户他们是怎么想的?

为什么会出现第一个故事的这种情况?我再一次问自己这个问题的时候,认为是质量问题。没有质量保证,客户所采取的方案就是多做选择。我们不能给他定论,那么他只能自己决定。

但是,我们知道,这种方案是不合理的。无论是客户,还是软件开发组织,都需要正确的认识软件开发的规律。项目失败对谁都没有好处。提高软件质量,双方共同努力,一起努力促成市场的成熟。

很多人会说,这个市场不是我们一家公司努力就可以的。的确,但是,不努力永远不会有好的结果,等谁来规范呢。记得小时候听到过一个故事,内容大概是这样的:有个树丛里晚上栖息着很多麻雀,农夫就拿着网罩在树丛上面,麻雀受到惊吓就飞起来,刚好也就网在了网内,飞不到多远,麻雀和网就掉在地上。不是麻雀飞不动了,而是每个麻雀都越飞越底,以为可以乘机跑掉,结果是,都被抓。这个故事告诉我们,不要等待别人先努力,你怎么想的,别人也是怎么想的。主动一点,市场需要大家来规范,恶性竞争的后果大家都知道。

负起责任,适当培训客户。客户可能已经不再信任我们了,因为软件质量不高,因为太多的项目失败给他们留下的阴影。有句话经常说:“客户至上”。说得很好。但是,这句话的意义不在于客户说什么我们就做什么,不管后果。这句话的真正意义在于为客户创造实际的价值。一个项目失败了,没有为客户创造一丁点价值,那还叫客户至上?这叫推卸责任。软件开发公司,作为软件开发的专家,需要负起责任,适当的培训客户,引导客户。如果开发公司和客户意见相左,并且培训客户的努力失败,那么需要拿出勇气,如实的和客户说明,开发公司应该主动退出。

现状是什么,你说什么都可以,只要把单子给我。最后项目失败了,就互相扯皮,开发公司会说,当时我说要这样的嘛,你偏要那样,我都按你的意思去做了,现在项目作不好,又不是我的错。把项目的失败归咎于客户的过失。开发公司之间也是,你不做,我做,他要100万,我这里80万。还有一个说,我40万。这样子的竞争,最后的结果,大家心里明了。完成一件事情,需要有成本,有句话叫一份价钱一份货,不要贪小便宜。无论是客户或者开发公司,都需要正确的认识软件开发的规律,各自负起自己的责任,而不要自欺欺人。

一个合理的项目目标非常重要,在开发过程中,软件开发公司和客户必须建立平等,合作,信任的关系,一同为解决问题努力,少了谁都不行。软件工程师不是业务专家,用户可能也不是计算机专家,所以,这两者必须通力合作。

接受系统的教育。软件开发公司并不是不愿意实践软件工程,而是实施的好不好的问题。开发人员自学,或者仅仅是把某些人送出去培训,那不能解决问题。我们为什么要去学校呢?而不是自学?软件开发公司同样需要接受教育,所有人都需要接受系统的教育,而并不是某些开发人员。《第五项修炼》说,公司需要成为学习型的公司。

教育和培训的区别,引用WALKER ROYCE的《软件项目管理》里的一个例子来说明,“设想你14岁的女儿放学回家后问道,爸爸妈妈,我应该选学校的性教育课吗。你会给她应有的建议。但是如果她这样问,我可以接受学校的性培训吗。那么你的反映可能会不同。”

失败是成功之母,没有错,但是,我们没有时间失败,我们需要在别人的失败中吸取教训。虽然我们都有自学能力,我们还是需要接受学校系统的教育,我们才能成才。公司也需要接受系统的教育,而并不是某些人接受培训就可以了。公司对软件工程的实施,必须系统的执行。

用好公司最大的资产,人。团队的建设,人员的激励,是项目管理中的内容。这里单独提出来,是说明人的重要性。很多产品是流水线的结果,也就是机器生产的结果,软件是工程的结果,几乎完全是徒手完成的。在软件开发公司,对人需要有更大的关注,以为只要重视技术就可以,那大大的错了。对人的认识,请参阅Tom DeMarco & Timothy Lister的《Peopleware,Productive Projects and Teams》和Watts S. Humphrey的《Managing Technical People,innovation,teamwork,And the Software Process》。我肯定没有他们讲的好,就不多写了。

系统的长期的积累以达到复用。Ivar Jacobson在《Software Reuse, Architecture, Process and Organization for Business Success》写道,成功意味着自己的软件“更快,更好,更便宜”,而满足这些目标有2个途径,第一是提高软件生产机构的效率,第二是复用。在"软件复用-SilverBullet"中会独立的描述这个问题,这里只作提及。

公司之间分工合作。亚当斯密在《国富论》中说,分工是社会进步的根本。不要期望每个公司都能自己解决所有问题,也不要期望每个开发人员都能成为软件工程高手。全世界知名的化妆品公司,没有公司是自己做瓶子的。现在是协作的时代,专业的事情让专业的人或公司来做,不要再保留自给自足小农思想。软件公司之间的关系,不能只局限于买卖2进制的软件包的关系。很有可能是一起开发一个项目。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值