加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

反正项目都会延期的?

(2016-03-06 22:32:29)
标签:

杂谈

去年参加极客邦科技组织的中国技术力量,我在斯坦福大学做了一次关于创业团队的演讲,其中我提到了一个观点:做好 Code Review 和研发计划,反正项目都会延期的。当时台下的硅谷工程师们露出了会心的微笑,这让我觉得,人有国籍,国有国界,但项目延期是没有国界的。

先做个调查吧,好久不做调查,都不知道读者们是不是程序员和工程师了……

工作了十几年,做过那么多软件项目,无论是他人估算还是自己预测,少有按期完成的项目,要么提前,要么延后,按期完成的,无非是熟门熟路十拿九稳,亦或是运气使然。

为什么软件项目的估算会这么困难呢?不怪老板心比天高,只怪程序员命比纸薄!总结一下,原因大致有三:

  1. 历史长河中累积的经验失效了

由于计算机科学只出现了短短几十年的时间,人类很难按照以前的经验对项目进行判断和预测。

当你看到我老人家在三角钢琴上弹奏一首「两只老虎跑得快」的时候,你会很容易的判断出来,这件事不难,因为能弹出声音的人差不多都能学会这个曲子。当你看到「海上钢琴师」演奏那一曲惊世骇俗的「Enduring Movement」,你会认为那是极度困难的,因为钢琴家弹到了风云变色,众人听到如醉如痴,钢琴家汗出如注,众人鸦雀无声,琴声急如咆哮的海浪,荡人肺腑,撼人心魄,又似玉珠落地,粒粒分明,颗颗透骨。这种技艺,没有数十年的练习和极高的天分,断无可能掌握。

但是编程,你甚至难以从敲击键盘的速度上分别出哪个是优秀的程序员,哪个是打字速记员。是的,搞速记的人,敲键盘的技巧会更加魔幻一些。

同样,我们可以从建筑物的大小、结构的复杂程度上判断,修建一座小桥的难度和工期会远远小于一幢摩天大厦。物理和感官上的认知,总能让我们的大脑去做出正确的判断,我们很少失误,几千年来,我们的基因就是这么告诉我们的。但是,软件没有物理的概念,既没有体积,也没有面积,也没有速度。你写了两万行代码,你的硬盘也不会多重一个毫克,即是从字节的角度衡量,10M 的代码,不一定会比1M 的代码好用。

打开 Google 的官方网站,我们看到的是这样一个极简的页面:

http://ww1/large/53d2bf76jw1f1nija88rsj21160hi0uh.jpg

一个工程师可以花费一个小时的时间把这个页面制作出来并挂在互联网上,但是,Google 却不可复制。这个简洁的搜索界面,就是整个 Google 科技帝国的入口,是浮在浩瀚太平洋上的冰山一角,冰山下面,是数以万计的工程师和庞大的计算机群在支撑着这个极简的页面,涉及的技术包括数十种编程语言、各种算法引擎、应用软件、硬件、运维、安全、工程等等,其复杂程度,常人难以想象,有时候程序员也难以想象。

互联网上有很多类似的简单页面,其中往往蕴藏着千百万台服务器和奔腾鼓噪的代码,就像大江上驶过的大船,出现却又不留痕迹,从江面上看去,杳然无踪。所以程序员们常常收到老板这样的需求:我就想要个淘宝那样的电子商务平台,卖点咱们和合作伙伴的东西,怎么就那么难呢?是的,就那么难,还不知道多长时间能做完!即使你找到的都是优秀的程序员!

因为:

  1. 大部分程序员都是乐天派

我见过的大部分程序员都是乐观、积极、自信,他们沉浸在代码的世界里,事实上,最好的程序员甚至是忽略项目工期的。他们只想把产品做到最好,或者逼近最好,至于时间嘛,应该是项目经理考虑的事情。所以,当项目经理和他们去核对工期的时候,他们会根据自己的经验给出一个非常乐观的期限。和普通人一样,程序员们也会高估自己编程能力和对复杂逻辑的处理能力。甚至,有时候程序员们给出的工期是自己负责的那部分程序编写完成的时间,然而一个功能的完成,包含编译、单元测试、提交代码、集成测试、功能测试、性能测试和上线。如果一个项目包含三个任务,每个任务完成的时间是2天,但整个项目完成,可能需要12天的时间。然而,这些细节往往被湮没在项目经理的时间表里,无法体现。

有一位项目经理告诉我,对于没有做过估算的程序员,他会把他们给出的估算时间乘以π,然后再提高一个数量级,差不多就是项目真正完成的时间,也就是说,如果程序员告诉你这个功能一周内能完成的话,差不多需要3.14月。我对他说,兄弟,你这样搞,难道真的不会被老板干掉吗?他说不会,这样可以提前完成任务!

即使是一个很有估算经验的技术人员,在新项目中也可能会遇到各种各样新的问题,你会惊奇的发现,上一个项目中的方法在新产品中失灵了。另外,开发中遇到的技术瓶颈或难以解决的 bug,会耗费程序员大量的精力和时间,这时候我们能做的只有等待,给他们时间去披荆斩棘,直到问题解决。

  1. 不变只是愿望,变化才是永恒

在当年的互联网浪潮里,唯快不破,不变的只有变化,那么变化会对进度产生哪些影响呢?引用一段知乎的回答:

你去饭店,坐下来。“服务员,给我来份宫保鸡丁!”“好嘞!”——————这叫原始需求大厨做到一半。“服务员,菜里不要放肉。”“不放肉怎么做啊?”“不放肉就行了,其它按正常程序做,不就行了,难吗?”“好的您稍等”——————中途需求变更厨房:大厨:“你大爷,我肉都回锅了”服务员:“顾客非要要求的嘛,你把肉挑出来不就行了吗”大厨:“行你大爷”然而还是一点点挑出来了——————改动太大,部分重构餐厅:“服务员,菜里能给我加点腐竹吗?”“行,这个应该简单。”——————低估改动成本厨房:大厨:“你TMD,不知道腐竹得提前泡水?炒到一半才说?跟他说,想吃腐竹就多等半天”服务员:“啊你怎么不早说?”大厨:“早说个鸡毛我怎么知道他要往宫保鸡丁里放腐竹”然而还是去泡腐竹了——————新需求引入了新研发成本

未完,阅读原文请上知乎。

作者:猫爱吃鱼不吃耗子链接:https://www.zhihu.com/question/40712955/answer/87890964来源:知乎

现在你们知道为什么那么多项目都会延期了吧,也知道为什么《人月神话》这本书会畅销30年了吧,因为人月根本就没有神话!

美酒的酿造需要年头,美食的烹调需要时间;耐心一点,给他们时间,你会享受更多美味,更多佳肴。

如何解决项目延期的问题呢?且听下回分解。

http://ww4/large/53d2bf76jw1f1nil27titj20zk0zkadd.jpg

扫描二维码关注 MacTalk

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有