相关阅读:

如何在三年内快速成长为一名技术专家

17届互联网校招薪酬报告:白菜价22W,青菜价30W,神价150W

互联网技术(java框架、分布式、集群)干货视频大全,不看后悔!(免费下载)

英文:Dan Shipper

译者:外刊IT评论

链接: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应用时(或任何类型的软件),我们的基本直观感觉失效了。

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

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

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

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

看完本文有收获?请转发分享给更多人


欢迎关注“互联网架构师”,我们分享最有价值的互联网技术干货文章,助力您成为有思想的全栈架构师,我们只聊互联网、只聊架构,不聊其他!打造最有价值的架构师圈子和社区。

本公众号覆盖中国主要首席架构师、高级架构师、CTO、技术总监、技术负责人等人 群。分享最有价值的架构思想和内容。打造中国互联网圈最有价值的架构师圈子。

  • 长按下方的二维码可以快速关注我们

  • 如想加群讨论学习,请点击右下角的“加群学习”菜单入群

请非技术人员不要对技术人员说这很容易实现相关推荐

  1. 技术人员的赚钱之道3:打工思维向创业思维的转变

    1. 苦逼的程序员与技术人员 程序员只能通过卖出自己的体力.智力换取金钱 程序员停止工作,就没有收入 无尽的加班,用青春换明天 程序员没有资源,辛辛苦苦的做兼职项目,而掌握资源和关系的人,只通过中间倒 ...

  2. 计算机应用能力科目怎么选择,专业技术人员计算机应用能力考试科目类别

    专业技术人员计算机应用能力考试科目类别 计算机系统管理自动化是由操作系统实现的.操作系统的基本目的在于最有效地利用计算机的软件.硬件资源,以提高机器的吞吐能力.解题时效,便利操作使用,改善系统的可靠性 ...

  3. 总结技术人员为什么创业失败率高的N个观点

    上周奔波了三个城市,累但极其充实,在机场的空闲两个小时还见了个技术高手. 飞到上海的当天,去拜访了久违的一个朋友,他也算是开发板行业的元老了,见证了十年来开发板行业的发展和变迁. 慢慢聊起了开发板这个 ...

  4. IT专业技术人员学习网站整理

    1.高端数据资料库 http://www.chiefdatum.com/ (站点介绍: )包含产品数据,学习资料,技术资料,热门图书,眼镜设计,考研,医疗器械等资料为一体的综合性网站,提供专业性下载 ...

  5. 2014年广西专业技术人员计算机应用能力考试的规定,完善专业技术人员计算机应用能力考试有关规定的通知...

    琼人社发[2012]147号 各市.县人力资源社会保障局,洋浦管理局,省直有关部门,有关企事业单位,中央驻琼有关单位: 为进一步提高我省专业技术人员计算机的应用能力,根据<人事部关于全国专业技术 ...

  6. 关于调整专业技术人员职称计算机应用能力考试有关规定的通知,关于完善专业技术人员计算机应用能力考试有关规定的通知...

    海南省人力资源和社会保障厅 关于完善专业技术人员计算机应用能力考试有关规定的通知 琼人社发[2012]147号 各市.县人力资源社会保障局,洋浦管理局,省直有关部门,有关企事业单位,中央驻琼有关单位: ...

  7. 海南省专业技术人员职称计算机,[海南省人力资源和社会保障厅]关于完善专业技术人员计算机应用能力考试有关规定通知琼人社发[2012]147号...

    海南省人力资源和社会保障厅 关于完善专业技术人员计算机应用能力考试有关规定的通知 琼人社发[2012]147号 各市.县人力资源社会保障局,洋浦管理局,省直有关部门,有关企事业单位,中央驻琼有关单位: ...

  8. 技术人员突然离职,如何接手他的项目?

    技术人员,最讨论和最惧怕的,莫过于接手别人的项目.维护历史的遗留项目.尤其是那种没有任何文档.没有工作交接.没有人员协作的项目. 今天来分享一些技巧和工具,教大家在面对技术人员突然离职时,如何快速接手 ...

  9. 远程计算机需要网络级别身份验证,而您的计算机不支持该验证,请联系您的系统管理员或者技术人员来获得帮助...

    故障:"远程计算机需要网络级别身份验证,而您的计算机不支持该验证,请联系您的系统管理员或者技术人员来获得帮助" 故障症状:当您使用Windows XP"远程桌面连接&qu ...

  10. 技术人员的非技术生活

    [今天,去广州东站接人,火车一如即既往的晚点,随便去附近转了转,在图中的后面吃了晚康师傅牛肉面,注意不是快餐面,味道还不错,可惜相机没带,错过了好多美景,这个图是从网上找的] 有几天没有CSDN上写博 ...

最新文章

  1. centos6.5下部署用于生产的hadoop,并使用C语言API连接hadoop
  2. Visual C++ MFC/ATL开发-高级篇(一)
  3. 学习编写用例是开发者走向项目经理的必经之路(《编写有效用例》书评) ——“Jolt大奖精选丛书”有奖征文...
  4. 深入理解 Java 锁与线程阻塞
  5. 【论文学习】mixup系列(mixup、cutMix、manifold mixup、patchUp、saliencyMix、puzzleMix、co-Mixup、FMix)
  6. rxjs里subscribeToArray的一个JavaScript模拟实现
  7. java环境_配置java环境变量
  8. Spring切入点表达式常用写法
  9. Oracle(三):视图、序列、同义词、索引
  10. 阿里云Centos镜像源和EPEL源
  11. core控制器属性注入的用处_asp.net-core – 如何使用Autofac和ASP.NET Core在控制器上启用属性注入?...
  12. Centos8.4 配置本地镜像yum源
  13. python tcl 控件_在Python中解析TCL列表
  14. JDBC高级特性(一)结果集,批量更新
  15. 应用安全 - 代码审计 - JavaScript
  16. 《Android框架揭秘》读书笔记--在Java中调用C库函数
  17. 小米、华为、一加、OPPO接连入场,电视的魅力在哪里?
  18. 电脑卡怎么办?4招帮你解决电脑卡顿的烦恼!
  19. STM32系列(HAL库)——F103C8T6点亮1.44寸TFT-LCD彩屏
  20. “该内存不能为读写”解决方法

热门文章

  1. 《Spring Cloud Netflix》 -- 服务注册和服务发现-Eureka的常用配置
  2. 《移动App测试的22条军规》—App测试综合案例分析23.5节测试微信App的用户体验...
  3. CSS的inherit与auto使用分析
  4. 程序默认用管理员身份打开(vs2010)
  5. 如何在Mac上的一个“预览”窗口中显示若干文件
  6. macOS Big Sur M1机型,如何正确完成软件的系统扩展设置?
  7. 在Mac端的 几种文本操作技巧
  8. AMS Audio Converter如何编辑音频/ MP3的ID3信息?
  9. Mac怎么连接多个蓝牙音箱?
  10. 防止Mac电脑屏幕进入休眠状态,该怎么设置?