导读:外刊IT评论翻译了一篇《关于程序成本的讨论》以下是文章全部内容:

昨天在#SCNA(北美2010软件技术大会)的一个专题小组讨论会上,@chadfowler 提出了这个问题:”有多少项目是因为程序的原因而失败的?“我想,他是想说造成项目失败的主要原因是业务问题,而非技术问题。

今天早上我把这个问题发布在了微博上。很快就有了回复,几乎所有人都认为导致项目失败的原因中业务问题是罪魁祸首。

完全没错,项目会因为成本,需求,进度计划,管理等问题而失败。可同样没错的是,从来没有人在追查失败的原因时会深入到像程序代码这样底层的东西上。所以,Chad的观点 — 如果真像他想的那样 — 是有一定的参考价值的。

我们可以从中得到结论:从长远的角度看,程序代码并不是那么重要,技术人员的劳动也许只是些大量的些微小事。事实上,Chad在#scna上的演讲中希望我们去认真思考这个问题。如果我们按照他的观点去做,我们就应该降低对技术能力的重视,增加对业务,需求,预算,计划和管理工作的重视。

在我反驳这个观点之前,我要说,我碰巧知道好几个因为程序的原因而失败的项目。事实上,我还知道几个因为程序的原因而失败的公司。

相信和理解这种事情并不是非常的困难。我们都知道,当程序代码混乱时,它会变得越来越难以维护和改进。当这种成本超过了一个项目可以承受的能力后,项目就失败了。当这种成本超过了一个公司所能承受的能力后,公司就倒闭了。在我知道的这些案例中,这些事情就是这样真实的发生着。很简单,就是代码的开销超过了它的商业模式的承受能力。

让我们在脑子里做这样一个推演。如果程序代码的生产和维护成本无限的昂贵,项目的哪部分会失败?很显然,由于程序代码过于昂贵,超过任何有限的商业模式的承受能力,所有项目都会失败。

那好,如何程序的生产和维护不会产生任何的代价,那会怎样?项目的什么部分会因为这种程序而失败?同样,答案很明显。如果这种程序代码不会产生任何成本,没有项目会因为此而失败。

什么叫做没有成本代价?这是说当你需要它时你能立即得到。程序已经在那里了,即时的,功能齐全的,没有缺陷。任何时候你想修改它,修改工作能立即完成,自动部署,马上生效。

就好象是你被强盗丢进了一个山洞里,在这个山洞里你发现了一个老实的PC机,带着一个很老式的键盘。你拿起键盘,擦了擦脏兮兮的Enter键。哦,一个精灵出现在了屏幕上,它给予了你能够生产零成本的程序代码的能力!从这时起,还会有什么项目会失败?

你要明白,没有第二个人拥有你这样的能力。没有第二个人能即时的生产出没有缺陷的想要的任意程序代码。没有第二个人能够不费时间的修改和部署变更的程序。你拥有绝对的竞争优势。你还有失败的可能吗?我想我的小狗Petunia也许会弄失败,但任何比它聪明的生物都会因此而成为亿亿万富翁。

如果我们有了这台神奇的PC机,我们就不会再有进度计划和预算问题。管理失误和需求不确定的成本会趋近于零。所有会导致项目失败的因素都会变的无关紧要。

可是我们没有这样神奇的PC机。程序代码的生产和维护会消耗资金。但如果我能拥有这个神奇精灵的一点点能力,我可以去降低代码生产和维护的成本,同时我还能降低由于管理失误、需求不确定、工期紧张、预算紧张所带来的成本和风险。通过降低事情的这些成本,我们降低了犯错的成本,增加了成功的几率!

为什么项目会因为需求不确定、管理混乱、计划不正确、预算有问题而失败?是因为犯错的成本太高。为什么犯错的成本很高?因为程序代码的成本高的可怕。如果程序代码不会带来成本,犯错的成本代价也就会趋近为零。

这种认识在各公司中还是有共识的。他们试图通过压缩程序员来解决这个程序成本问题。他们冒着巨大的风险花大价钱从地球的另一边雇佣具有各种不同文化的编程人员。他们面对着时区和语言的问题,文化的不匹配问题。而选择这一切都是为了降低程序的成本。他们这样做,是因为他们知道这种成本压迫着管理的成本。他们这样做,是因为这种成本会导致项目失败。

不幸的是,这种策略并不像我们希望的那样奏效。可能有些这样事情做的不错,但大部分外包的效果令人失望。于是程序的成本仍然居高不下,同样,失败的风险也高居不下。

再回到我们最初的问题上。有多少项目因为程序代码的原因而失败?根据上面的讨论,所有的失败都是由于程序的成本导致的。有多少项目因为程序代码的原因而失败?全部。

更重要的是,唯一有效的能增加项目成功的机会的方法是什么?是改进需求?管理工作?进度计划和预算?这些方法都有帮助,但对于导致项目失败的原因,他们都是次要的,都比不上:程序的成本。

后续调查

Uncle Bob (@unclebobmartin)后来做了一次简单的微博调查,我和其他很多人都参与了。调查的结果是,赞成项目失败的责任主要归咎于业务问题、而非技 术问题的占了绝大多数。Bob感到这么多人选择这样的观点表明了从长远角度看,程序不是那么的重要,因此,技术人员也一样显的不那么重要。Bob认真了提出了一些很好的论据来说明为什么程序很重要,来说明事实上,程序不仅能使项目失败,而且会使整个公司倒闭。我在这里不做更多的复述,我强烈推荐你们去读一下Bob的这篇文章,“The Cost of Code?” ,Bob在这篇文章里的大部分观点我都赞同。程序的成本很大。但我不认为所有的项目的失败都归咎于程序, 但他用来说明这个观点的例子都很有价值。

原因和责任 证据确凿

一个人死了,一颗子弹击中了他的胸膛。一个项目失败了,只剩下一堆没有的程序码。对于我们来说也许事实很清楚,一颗子弹杀死了这个人。对于 我们来说也许事实很清楚,糟糕的程序杀死了这个项目。在没有举出其它可能的论证、在现有缺少证据的情况下,我承认这两种认定。人被一颗子弹杀死,项目被糟 糕的程序害死。

是的,从技术上讲,项目的失败归咎于程序。

扣动扳机的人

我们的悲剧并没有结束。我们不能够用消灭子弹来阻止谋杀,我们更不能用禁止对程序代码的依赖来挽救项目。虽然子弹和程序是原因,但它们都只是表象。

在大型项目中,要想找到一个受谴责的对象,你不能不提及那些自以为是的人。在大型项目中,通常都是众多的人为因素要对失败负责。如果我们要对大多数失败的项目进行考古发掘,我可以自信的说,我们会发现失败的原因都在人身上。我可以自信的说,我们会发现这些都是交流不畅的失败。这不是一种失败,是成百上千种的,大的或小的失败。缺乏远见,缺乏透明度。由于缺乏远见和透明度而导致的缺乏凝聚力。缺乏清楚的预期。责任不清。当不同意时缄口不言。 以非建设性的方式发表反对。讨论起来像打仗。用煽动性的语言制造分裂。避而不谈失误。用发邮件来替代打电话。用打电话来代替面对面交流。过度强调交货日 期。对时间和速度的认识截然相反。不重视周边工作。没热情——这个清单还有很多。

对于软件项目,程序是关键。你不可能制作一个没有代码的软件项目。程序代码越糟,项目的风险越大。当糟到一定程度,项目就会失败。更严重的是,公司也可能会因为这个项目而倒闭。

但我不会忘记,是我们写了这些程序。

是我们扣动了扳机。

原文链接:http://thecleancoder.blogspot.com/2010/10/cost-of-code.html

原文链接:http://www.aqee.net/2010/12/27/the-cost-of-code

讨论:有多少项目是因为程序的原因而失败的相关推荐

  1. java 怎么向串口发送指令_idea ssm项目java程序使用十六进制rxtx包向串口发送指令的方法...

    1.前提 idea ssm项目环境要配好,这里就不多赘述了,自己配好 2.下载配置rxtx包 官网下载:http://rxtx.qbang.org/wiki/index.php/Download 根据 ...

  2. 如何定位Release程序崩溃原因

    [转]如何定位Release程序崩溃原因 Posted on 2011-08-19 10:44 单鱼游弋 阅读(2162) 评论(1) 编辑 收藏 1       案例描述 作为Windows程序员, ...

  3. Idea运行项目提示程序包找不到

    Idea运行项目提示程序包找不到 不止一次的遇到了idea中项目不报错,但是一启动就启动不成功,提示一堆找不到xxx程序包,但是那些jar包明明都maven引入了的,也能通过报错的地方,跳转到相应的j ...

  4. 严重性代码说明项目文件行禁止显示状态错误项目 Common 的 NuGet 包还原失败: 找不到“X.X.X”版本的程序包“XXXXXX”。

    NuGet 包还原失败 文章目录 NuGet 包还原失败 前言 一.原因 二.添加镜像地址 三.寻找包下载指令 四.启动指令自动添加安装需求包 前言 VS错误:严重性代码说明项目文件行禁止显示状态错误 ...

  5. 唐筛的准确率这么低为什么还要做_为什么很多孕妈唐筛低危还要做无创DNA?不仅仅是因为准确率的原因...

    原标题:为什么很多孕妈唐筛低危还要做无创DNA?不仅仅是因为准确率的原因 文 | 迩文基因科技 (预约香港115项DNA产前检测可咨询EmanJY) 作为一项筛查21三体.18三体以及神经管畸形的产检 ...

  6. qxidc项目/crtsurfdata程序 杀青总结

    遇到问题 与 解决办法 1. 关于文件类打开操作函数不自动创建不存在的父目录问题 1. crtsurfdata.cpp中,有用到CFile类的成员函数Open**这里出现了一个问题**,如果所打开的文 ...

  7. 三菱fx5u plc项目模板程序(含触摸屏程序) 程序注释全面,用的三菱fx5u系列plc和威纶触摸屏

    三菱fx5u plc项目模板程序(含触摸屏程序) 程序注释全面,用的三菱fx5u系列plc和威纶触摸屏,本程序可做三菱fx5u编程框架模板,自己辛苦编写的程序,借鉴价值高,是新手入门级三菱fx5u编程 ...

  8. 从零开始—仿牛客网讨论社区项目(一)

    主要技术架构: SpringBoot Spring SpringMVC MyBatis Redis Kakfa Elasticsearch Spring Security Spring Actator ...

  9. 代码项目好程序员的标准

    这两天一直在学习代码项目之类的题问,上午正好有机会和大家共享一下. 序 决解题问的力能 知识积聚 自学力能 品尝 解了确准的事做方法 通沟的力能 对作工负责, 对代码有求追 怎么高提自己决解题问的力能 ...

最新文章

  1. React Diff 算法
  2. 西游之路——python全栈——上传文件
  3. 【bzoj3289】 Mato的文件管理
  4. oracle 酒店客户数量,浅谈经济型酒店行业的数据分析(二)
  5. h5配合css和js如何自定义单选框
  6. java 简化判断_简化Java内存分析
  7. java 1.6.0.11_ubuntu 11.10安装java1.6(转)
  8. floor mod sqlserver_ORACLE和SQLServer-SQL语句的区别
  9. python在windows上创建虚拟环境
  10. 火山视窗多窗口交互操作
  11. vue显示农历_vue农历日历
  12. [Spark机器学习]基于Spark 2.0 机器学习之推荐系统实现
  13. DDoS 攻击防御方法
  14. 先试后买!解析购物新体验背后的移动AI+AR技术
  15. JMM内存模型 多线程三大特性
  16. 盘古开源:计算机信息安全中大数据技术的应用策略
  17. 算法LeetCode自主学习------猜数字
  18. CHIL-SQL-GROUP BY 语句
  19. php 读取文件指定行,在PHP中读取文件的特定行
  20. 下载资源前请务必先阅读!

热门文章

  1. SAP HUM 如何查询一个HU号码是否被软分配给了某个销售订单 ?
  2. 全美人工智能研究生院排名出炉:CMU第一,MIT第二
  3. python读写excel(合并单元格)
  4. 世界一流大学如何建设人工智能学科
  5. 《2021年全球创新指数报告》发布!
  6. 为什么要学数学?因为这是一场战略性的投资
  7. 了解因果论:从珀尔的《为什么》开始
  8. 美科学基金会欲向公众征集想法
  9. 2018 年最值得期待的学术进展——致人工智能研究者们的年终总结
  10. 在分析了AI顶会上的6163篇论文后,我们能发现怎样的发展趋势与变化……