为什么现在开发一款软件的时间越来越长

作者

JustinEtheredge策划

万佳为什么开发软件这么贵?为什么我的团队交付软件的速度这么慢?为什么我的软件发布赶不上计划?为什么开发一个软件要花这么长时间?

我们之所以一遍又一遍地听到上述问题,背后是有原因的。为了保持竞争力,企业每天都需要新的软件功能,但随着时间的流逝,我们交付软件的速度似乎停滞不前,或者更糟,变得更慢了。

我想解释为什么会这样。不过,为了探讨这个话题,需要先了解一个我最关心的话题:本质复杂性和偶发复杂性。

1不同类型的复杂性

任何时候,当你在解决一个问题,不仅仅是软件问题,都有两种类型的复杂性:

本质复杂性——这是包含在问题中的复杂性。如果不解决这种复杂性,就无法解决问题。它也被称为内在复杂性。

偶发复杂性——这是用来解决问题的方法和工具所带来的复杂性。这种复杂性不是你要解决的问题的一部分,而是在解决方案中引入的复杂性。它也被称为偶然复杂性。

IBM系统之父FredBrooks在经典论文“没有银弹:软件工程的本质性与附属性工作”中提出了这个概念。可以这么想,如果你要解决一个数学问题,本质复杂性就是指对数学的了解,因为只有懂数学才能解题。如果你想解决这个问题,要么学习所需的数学知识,要么找个懂数学的人帮忙。如果你想解决这个问题,就无法逃过学习数学这一关。

2偶发复杂性

我们假设,这是一个颇具挑战性的数学问题,完全用人脑来解决是徒劳的,所以需要使用计算器。这就是偶发复杂性。还记得第一次使用图形计算器的情形吗?在这个时候,偶发复杂性就是学习如何在计算器上输入所有复杂的数学信息来帮你解决问题。你不一定要使用计算器,但你知道它对你有用,而且不会太难学。

现在,我们假设你对Mathematica很熟悉。Mathematica是一个非常强大和复杂的软件,不过既然你已经知道它了,就决定用它来解决问题。你在学习Mathematica上投入了很多,所以不需要很多额外的努力,只是增加了解决方案的偶发复杂性。

几周后,你的一位同事遇到类似情况,他记得你曾经解决过一个类似问题。他们来找你,看你是如何解决问题的,然后你把Mathematica发给他们。你认为这个时候会发生什么?你认为他们会去学习数学吗?不,他们会想出另一种解决问题的方法,或者试图让你替他们解决问题。

正如你所看到的,这两种复杂性来自不同的地方,但它们之间有着紧密的联系。如果不引入一些偶发复杂性,就无法解决问题。即使是一支铅笔和一张纸也会带来一些微不足道的偶发复杂性。

如果没有偶发复杂性,就无法解决问题。

3它在软件领域是怎样体现的

这可能会让你感到惊讶,在过去20年中,软件领域本质复杂性与偶发复杂性比率在急剧下降。DavidHeinemeierHansson(RubyonRails之父)用“概念压缩(conceptual



转载请注明地址:http://www.henanledxianshiping.com/zxrjkf/20430.html
  • 上一篇文章:
  • 下一篇文章: