这篇文章给他X的中肯

「这个网站相当简单,你要做的就是完成X、Y、Z。你看起来技术很好,所以,我相信,你不需要花费太多时间就能把它做出来。」
这个网站相当简单,你要做的就是完成X、Y、Z。你看起来技术很好,所以,我相信,你不需要花费太多时间就能把它做出来。」

我不时的就会收到这样的Email。写这些信的人几乎都是跟技术沾不上边的人,或正在研究他们的第一个产品。一开始,当听到人们这样讲,我总是十分的恼怒。他们以为是在跟谁讨论软体开发所需时间?

但后来我发觉,即使我自己对自己的计划预测要花多少开发时间,我也是没那么有把握。如果连我自己都做不好,我何必对那些人恼怒呢?真正让我觉得闷的不是他们预估的错误。问题在于他们竟然认为自己可以做出正确的估计。作为开发人员,我们经常会发现,在软体开发的问题上,一个外行人会很自然的把複杂的事情估计的很简单。

这并不是为我们的愤怒找藉口,但倒是提醒了我们另外一个有趣的问题:为什么我们天生预测複杂性的能力在遇到程式开发时会失灵?

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

我们来想想,观看某人演奏吉他。即使你从来没有弹过吉他,在看了一场弹奏「玛丽有只小羊(Mary had a Little Lamb)」的吉他表演后,你也能大概推测出这很简单,一个人不需要好的技巧就能演奏出来。同样,当观看某人演奏D大调的「卡农(Pachabel's Canon)」后,你也很容易推测出,这很複杂,需要很长时间的练习才能演奏的出来。

为什么我们能够很迅速準确的预估这两首曲子的複杂性呢?这跟我们用来判断一个事情简单和还是複杂的方法有关。

我们大脑有一些现成的模式来完成这些事情,首先一个就是根据速度。这种情况下,大脑会辨别每秒钟演奏的东西。根据每秒钟演奏了多少东西,我们很容易有一个直观判断,来决定曲子的複杂度。因为用吉他演奏一首歌是一种物理过程、一种感官上的活动,我们的大脑很容易依此来推测速度,继而转换成複杂度。

我们还有另外一个天生的推测依据:体积。想想把一个帐篷和一栋公寓放在一起对比。即使一个人从来没有学过建筑学,他也能告诉你通常设计建造一个帐篷会比设计建造一栋公寓要简单。

为什么?因为我们天生的会使用物理体积作为事物複杂性的一个指标。

当然。上面说的这两种逻辑分析并不总是100%有效。但大多数情况下,人们就是这样做,而且很奏效。大多数情况中,我们在对物理过程评估时,我们的大脑会对物理事物进行有效的关联,不需要依赖之前的经验。

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

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

有时候,这种评估手段确实有效,面对一个静态网站,没有特别的设计要求,外行人很容易用这种方法估计出开发时间。但是,通常情况下,对于软体开发,体积​​并不能真实有效的反映複杂度。不幸的是,对于软体的複杂度,唯一有效的推测方法是依据经验。而且还不是每次都好用。

作为一个程式开发者,我知道,根据我之前开发过的相似的功能,我可以估算出现在的这些功能各自要多少开发时间。然后,我把总时间加起来,这就得到了完成整个计划需要的大概时间。然而,事实情况中,每个计划在开发过程中都会遇到二、三个瓶颈。这些瓶颈会肆意的消耗开发者的大量时间,你在遇到它们之前根本不会料想到。它们会拖住整个计划,使得开发时间延后数週甚至数月。

这些是没有经验的人在评估複杂度时不会理解的。他们不明白在其他事情上都有效的方法,为什么放到软体开发上就不灵了。所以,下一次当你听到有人说「我想你几天时间就能把它开发出来」时,不管是谁说的,都不要懊恼。深呼吸一下,给他这篇文章的连结,然后继续做自己该做的事。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章