我经常听到“这个网站相当简单的,所有你需要做的就是完成abc。你看起来应该是技术很好,所以,我相信,你不需要花费太多时间就能把它开发完成。”
说这些话的人几乎都是跟技术不沾边的人,或正在研究他们的第一个网站。起初,当听到他们这样的话,我总是十分的恼怒。他们在跟谁辩论网站项目开发所需要的时间?但后来我意识到,即使我跟对方说的再专业对方也还是不明白,还很容易让对方尴尬,想想我何必对那些人恼怒呢?我报我的价格就是了,对方能接受,说明也值得我付出这份努力及精力。不接受正好一拍二散,总不能做亏本生意吧!生意不成仁义还在。真不用跟对方说死。
他们真正让我郁闷的不是他们预估的错误,问题在于他们竟然认为自己可以做出正确的估计。作为网站程序开发人员,我们经常会发现,在项目开发的问题上,一个外行人会很自然的把复杂的事情估计的很简单。
这并不是为我们的愤怒找借口。
现在让我们来谈谈网站项目。当一个不懂技术的人试图对软件开发时间进行评估时,有两个很基本的直观指标在辅助他们:以体积为指标的复杂度和以速度为指标的复杂度。但他们没有意识到,网站程序跟他们想象的不一样。程序本质上不是有形物质。有时候,这种评估手段确实有效!当面对一个静态网站,没有特别的设计要求,外行人很容易用这种方法估计出开发时间。但是,通常情况下,对于程序开发,体积并不能真实有效的反映复杂度。
不幸的是,对于软件的复杂度,唯一有效的推测方法是依据经验。而且还不是时时都好用。作为一个程序员,我知道,根据我之前开发过的相似的功能特征,我可以估计出现在的这些功能特征各自要多少开发时间。然后,我把总时间加起来,这就得到了完成整个项目需要的大致时间。然而,事实情况中,每个项目在开发过程中都遇到二、三个瓶颈。这些瓶颈会肆意的消耗程序员的大量时间,你在遇到它们之前根本不会有所预见。它们会拖住整个项目,致使工期延后数周甚至数月。
先前的项目里我有遇到过一个时间判断问题,按我们自己工作室的程序规则都是记录的datetime类型数据在mysql数据库,不是以时间戳数据记录。那么问题来了,要实现时间对比如何方便快捷呢!这个问题让我卡了三天多时间,差点就决定把自己的网站程序推倒重新设计数据库。
这些是没有经验的人在评估复杂度时不会理解的。他们不明白在其他事情上都很灵的方法,为什么放到网站程序开发上就不灵了。所以,下一次当你听到有人说“我想你很快就能把它开发出来”时,不管是谁说的,都不要懊恼。深呼吸一下,告诉他这篇文章的地址,自己该干什么还干什么。