软件开发学习:你搞个这样的网站要多久?

  “这个网站相当简单,所有你需要做的就是完成X,Y,Z。你看起来应该是技术很好,所以,我相信,你不需要花费太多时间就能把它搭建起来。”

  我时不时的就会收到这样的Email。写这些邮件的人几乎都是跟技术不沾边的人,或正在研究他们的第一个产品。起初,当听到人们这样的话,我总是十分的恼怒。他们在跟谁辩论软件开发所需要的时间?但后来我意识到,即使我自己对自己的项目预测要花去多少开发时间,我也是一筹莫展。如果连我自己都做不好,我何必对那些人恼怒呢?

  真正让我郁闷的不是他们预估的错误。问题在于他们竟然认为自己可以做出正确的估计。作为开发人员,我们经常会发现,在软件开发的问题上,一个外行人会很自然的把复杂的事情估计的很简单。

  这并不是为我们的愤怒找借口。但这引起了另外一个有趣的问题:为什么我们天生的预测复杂性的能力在遇到编程问题时会失灵?

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

  我们来想想观看一个人弹吉他。即使你从来没有弹过吉他,在观看了一场弹奏《玛丽有只小羊羔》的吉他表演后,你也能大概推测出这很简单,一个人不需要太高的技术就能演奏出来。同样,当观看了有人演奏D大调的《卡农》后,你也很容易推测出,这很复杂,需要很长时间的练习才能演奏的出来。

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

  我们还有另外一个天生的推测依据:体积。想想把一个帐篷和一栋公寓放在一起对比。即使一个人从来没有学过建筑学,他也能告诉你通常设计和建造一个帐篷会比设计和建造一栋公寓要简单。为什么?因为我们天生的会使用物理体积作为事物复杂性的一个指标。

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

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

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

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

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

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

时间: 2024-08-10 21:28:58

软件开发学习:你搞个这样的网站要多久?的相关文章

C#软件开发学习路线

不管学习哪一种编程语言或技术框架,为了避免"迷路",少走弯路,都应当有一条系统的.全面的学习路线,笔者认为应以软件常用功能为主线,由简入繁,逐一实践每一项功能. 笔者曾自学过C.VFP.ASP.VB.NET.PHP.JAVA.JSF.C#.NET.WinForm.ASP.NET及网页开发等编程语言或技术,参与开发的项目有十多个,笔者认为学习软件开发,入门最难,入门不是简单的在电脑屏幕上输出"Hello World!",而应当是了解编程语言的开发环境和工具,学习和掌握

桌面软件开发学习笔记-带着问题出发

最近接触仿真软件比较多,但是感慨于国内相关软件市场的落后,在想自己可以做出什么贡献.我有软件的逻辑知识,但是要怎样将想要的功能实现,还需要软件工程.不认识什么软件开发的朋友,所以打算自己先入门,再找同行学习取经.不然都没有共同话题可聊. 主要想学的内容,现在可以想到的有: 1, 开发桌面软件需要学习哪门或哪几门编程语言,每门语言的优劣? 2,软件开发的一般流程 3,软件开发平台 4,软件测试-------前期学习不是重点 ...还有一些后期的问题,以上的前三个问题都是非常general但是非常重

软件开发学习中所遇问题

1.每个项目都离不开数据库,而数据库的建立过程也是个问题,如何将我们的开发成果移动到运营环境中呢,如何维护以后的更新? 2.每个开发流程都有一定的缺陷,那么如果将其中几个流程的优点集中形成新的开发流程又会不会遇到新的问题? 3.测试人员跟进的时间,是在项目需求开始启动时就跟进,并随之开始测试的一系列活动:还是到测试用例编写阶段才全职投入? 4.在开发软件的进程当中,团队是应该注重交流沟通,还是只专注负责代码的编写而有利于最终软件的交付使用? 5.测试人员与开发人员的比例应该怎样分配,才能维持软件

windows软件开发~学习路线

转自:吾爱破解网 首先说明一下,这篇文章写给那些本身是计算机专业但是由于前几年没有学习,到了大三.大四迷茫困惑不知道如何下手去学的同学,还有一些想学编程但是面对巨多的语言和技术不知道从何下手的新手朋友.假如你是我所说的这两种人,请你耐心看完这篇文章,它会帮你少走很多的弯路,一年的时间可以可变很多事. 我虽然是计科专业但是由于种种原因也是没有听课,在自学的路上摸爬滚打,我大一没有学习,基本是玩了一年,大二懵懵懂懂的学了一点,大三认真地猛学了一 年.这一年我看了不少了书和教学视屏,经常去论坛逛.就在

软件开发学习的捷径

1,没有捷径,只有付出才会有收获 2,找一个非常好的导师引导 3,多跟IT业界的前辈交流,多关注IT业界的新闻和IT大佬的一些动态,及时掌握最新的IT的发展趋势和方向 4,借鉴成功的学习路线图是最重要的 5,多分享自己的学习成果跟社区的精英多交流. •IT社区:http://bbs.itcast.cn •传智播客官网:http://www.itcast.cn •黑马官网:http://www.itheima.com •博客园:http://www.cnblogs.cn •CSDN:http://

电脑小白学习软件开发-C#的选择语句、异常捕获,进攻程序员

写代码也要读书,爱全栈,更爱生活.每日更新原创IT编程技术及日常实用视频. 我们的目标是:玩得转服务器Web开发,搞得懂移动端,电脑客户端更是不在话下. 不得不说,C#这门语言是小编以为最好的语言.其优美的语法,最具人性化的新特性,以及无敌的开发工具令人陶醉.接触过不少语言,却一直回味写C#的那种状态. 本人认为目前C#是比较适合入门的语言,最为小白,热衷于电脑编程开发的人,可谓是一个大大的福利. 不管如何写过多少中语言教程,在写C#教程时却是如此的富含感情.为了完成我们的全栈梦,作为服务器端,

电脑小白学习软件开发-C#语言基础之循环重点讲解,习题

写代码也要读书,爱全栈,更爱生活.每日更新原创IT编程技术及日常实用视频. 我们的目标是:玩得转服务器Web开发,搞得懂移动端,电脑客户端更是不在话下. 本教程是基础教程,适合任何有志于学习软件开发的人.当然因为技术的连贯性,推荐按照顺序查看. 上次课程:电脑小白自学软件编程-.Net语法基础之循环语句,纯技巧干货 近期,致力于进行C#语言教程的写作.写一系列可以供电脑小白学习软件开发的文章,帮助更多初学者入门学习IT编程. 课程总目录:因头条无法自定义目录,大家关注:“做全栈攻城狮”微信公众号

程序员开发学习利器篇(下)之文档资料软件-获取软件、资料的最好途径

以下内容,开发初学者看,熟手略过. 论语有言: 工欲善其事 必先利其器 ,意思是工匠想要使他的工作做好,一定要先让工具锋利.比喻要做好一件事,准备工作非常重要. 第二篇我们来说说软件.文档资料.信息获取的高效途径. 首先说句题外话,程序员的软件.资料学习盘 应该是这个样子的: 文件夹视图应该是 详细列表 并且应用到电脑所有文件夹,方便查看文件的全名 最新的修改日期 类型 大小.并且文件显示应该是全名称 包括后缀名,文件目录起名字最好都是英文的,尤其是软件的安装目录,因为有些软件不识别中文的路径.

软件开发入门学习的个人看法。

1.踏实 偶然在网上看到<由C#风潮想起的-给初学编程者的忠告>一文. 其中一个角度:避免"浮躁",倡导"踏实"的学习方法,我是很认同的,但总觉该文作者标题"-给初学编程者的忠告"太大,所以在其文列出的一些具体的"操作方法"上我认为可以探讨,如同自己在某次公司总结会上就<软件开发,我们积累的是什么?>为题跟同事聊了半个多小时后,其中一个同事提到希望我能继续把这个题目细化,就刚入行的他们具体该如何发展有更