复制:不懂技术的人不要对懂技术的人说这很容易实现

原文复制:http://www.vaikan.com/im-sure-it-will-only-take-you-a-few-days-to-code/程序员

这个网站至关简单,全部你须要作的就是完成X,Y,Z。你看起来应该是技术很好,因此,我相信,你不须要花费太多时间就能把它搭建起来。”

我时不时的就会收到这样的Email。写这些邮件的人几乎都是跟技术不沾边的人,或正在研究他们的第一个产品。起初,当听到人们这样的话,我老是十分的恼怒。他们在跟谁辩论软件开发所须要的时间?但后来我意识到,即便我本身对本身的项目预测要花去多少开发时间,我也是束手无策。若是连我本身都作很差,我何须对那些人恼怒呢?

真正让我郁闷的不是他们预估的错误。问题在于他们居然认为本身能够作出正确的估计。做为开发人员,咱们常常会发现,在软件开发的问题上,一个外行人会很天然的把复杂的事情估计的很简单。

这并非为咱们的愤怒找借口。但这引发了另一个有趣的问题:为何咱们天生的预测复杂性的能力在遇到编程问题时会失灵?

为了回答这个问题,让咱们来认识一下咱们的大脑如何估计事情的。有些事情对于一些没有经验的人也很容易预估正确,但有些事情则否则。

咱们来想一想观看一我的弹吉他。即便你历来没有弹过吉他,在观看了一场弹奏《玛丽有只小羊羔(Mary had a Little Lamb)》的吉他表演后,你也能大概推测出这很简单,一我的不须要过高的技术就能演奏出来。一样,当观看了有人演奏D大调的《卡农(Pachabel’s Canon)》后,你也很容易推测出,这很复杂,须要很长时间的练习才能演奏的出来。

为何咱们可以很迅速准确的预估这两首曲子的复杂性呢?这是跟咱们用来判断一个事情简单和仍是复杂的方法有关的。咱们的大脑有一些现成的模式来完成这些事情,首先一个就是根据速度。这种状况下,大脑会辨别每秒钟演奏的东西。根据每秒钟演奏了多少东西,咱们很容易有一个直观的判断曲子的复杂度。由于用吉他演奏一首歌是一种物理过程,一种感官上的活动,咱们的大脑很容易依此来推测速度,继而转换成复杂度。

咱们还有另一个天生的推测依据:体积。想一想把一个账篷和一栋公寓放在一块儿对比。即便一我的历来没有学过建筑学,他也能告诉你一般设计和建造一个账篷会比设计和建造一栋公寓要简单。为何?由于咱们天生的会使用物理体积做为事物复杂性的一个指标。

固然。上面说的这两种逻辑分析并非老是100%的有效。但大多数状况下,人们就是这样干,并且很成功。大多数状况中,咱们在对物理过程评估时,咱们的大脑会对物理事物进行有效的关联,不须要依赖以前的经验。

如今让咱们来谈谈软件。当一个不懂技术的人试图对软件开发时间进行评估时,有两个很基本的直观指标在辅助他们:以体积为指标的复杂度和以速度为指标的复杂度。但他们没有意识到,软件跟他们想象的不同。软件本质上不是有形物质。没有体积和速度。它的极小的组成部分可能会时不时的在电脑屏幕上闪现。正由于如此,当面对开发一个web应用时(或任何类型的软件),咱们的基本直观感受失效了。

这第一点,速度,很显然根本不可能被外行人拿来对软件进行评估。因而很天然的,他们倾向于使用体积指标进行评估。要么是根据描述文档的页数,要么是根据软件的功能用例数或特征数。

有时候,这种评估手段确实有效!当面对一个静态网站,没有特别的设计要求,外行人很容易用这种方法估计出开发时间。可是,一般状况下,对于软件开发,体积并不能真实有效的反映复杂度。

不幸的是,对于软件的复杂度,惟一有效的推测方法是依据经验。并且还不是时时都好用。做为一个程序员,我知道,根据我以前开发过的类似的功能特征,我能够估计出如今的这些功能特征各自要多少开发时间。而后,我把总时间加起来,这就获得了完成整个项目须要的大体时间。然而,事实状况中,每一个项目在开发过程当中都遇到2、三个瓶颈。这些瓶颈会肆意的消耗程序员的大量时间,你在遇到它们以前根本不会有所预见。它们会拖住整个项目,导致工期延后数周甚至数月。

这些是没有经验的人在评估复杂度时不会理解的。他们不明白在其余事情上都很灵的方法,为何放到软件开发上就不灵了。因此,下一次当你听到有人说“我想你几天时间就能把它开发出来”时,不论是谁说的,都不要懊恼。深呼吸一下,告诉他这篇文章的地址,本身该干什么还干什么。web

相关文章
相关标签/搜索