为什么增加人手并不能使项目进度提高到想象的程度?
假定一个项目估算出来,一个人做需要12个月(客户哪能等那么久,黄花菜都凉了);那么增加到4个人来做,是不是就可以3个月来完成呢,因为总共12个人月嘛。答案是否定的。
因为,如果项目真是一个人来做,不存在沟通的问题,不会存在接口的问题,不会有这样的场景出现:
项目经理:我们每周开个例会,讨论一下目前的进度;
技术经理:来,讨论一下设计方案;
程序员甲:这个需求好像不太明确,你自己弄清楚了再来找我;
设计人员:方案有变,得重新讨论一下新方案;
程序员乙:我写的程序没问题,你调用的数据有问题;
......
其实,很多人一起做一个项目,有点类似于现在多核时代的并行处理系统,有个阿姆达尔定律对并行系统的处理能力给出了定量的计算公式:
百度百科 阿姆达尔定律 写道
阿姆达尔曾致力于并行处理系统的研究。对于固定负载情况下描述并行处理效果的加速比s,阿姆达尔经过深入研究给出了如下公式:
S=1/(a+(1-a)/n)
其中,a为串行计算部分所占比例,n为并行处理结点个数。这样,当a=0时,最大加速比s=n;当a=1时,最小加速比s=1;当n→∞时,极限加速比s→ 1/a,这也就是加速比的上限。例如,若串行代码占整个代码的25%,则并行处理的总体性能不可能超过4。这一公式已被学术界所接受,并被称做“阿姆达尔定律”(Amdahl law)。
项目由单个人完成,其实就是一种串行计算模式,一环套一环,一件事情接着一件事情完成;而增加到多个人来完成,就变成了并行计算,需要对工作任务进行并行化设计和分解,某些工作肯定是很难进行并行化的,而且工作任务需要同步,彼此协作才能完成这个项目。(有时候,系统的一些设计方式,就是为了方便多人协作,但往往会增加开销)
假定我们需要串行工作的部分是20%,那么上面一个人12个月完成的事情,在增加到4个人时,会提速多少呢?我们用阿姆达尔定律公式计算如下:
S = 1 / (0.2 + (1-0.2) / 4) = 1 / (0.2 + 0.2) = 1 / 0.4 = 2.5 倍速
意思是说,进度是原来的 2.5 倍,那么原来需要 12个月的,现在 需要
T = 12 / 2.5 = 4.8 月
比原来设想的3个月搞定的计划要落后差不多两个月时间。
那,有人说,那我继续来增加人手,增加到 8个人来干,总能更快些了吧?我们重新来计算:
S = 1 / (0.2 + (1-0.2) / 8) = 1 / (0.2 + 0.1) = 1 / 0.3 = 3.33 倍速
时间
T = 12 / 3.3 = 3.6 月
也就是说,新增加的那4个人带来的效率,就是可能使项目再提前1个月完成。果真如此吗?
我们前面假定a的值是20%,对于只是计算机执行的任务来说也许可以这样来假定,但对于由人组成的“并行”系统呢?计算机的并行系统,比如使用多核处理器,每核的处理能力相同;但每个人的能力都是由差别的,对于项目人员配置,总是技术好的带几个技术一般的(甚至是学徒工),因此每个人对提速的贡献是不同的。而且随着人员的增加,沟通的成本会急剧上升,由于模块之间接口增加,相应的缺陷也会急剧增加,因此 a 的值也会随着人员的增加而变大。我们假定在 8 个人参与项目的时候,a 的值估计为 30%,我们重新来计算:
S = 1 / (0.3 + (1-0.3) / 8) = 2.58 倍速
发现这个结果与4个人参与项目时差不多,也就是说新增加的这4个人,除了增加了人员成本之外,并没有带来项目效率上的提升。(也可以预计到,再增加人手,项目将会更慢更慢些)
这一点,毋庸置疑,增加人手并不能使项目进度加快到想象的速度,甚至相反,Brooks 在《人月神话》中早就提及(有人也把此称之为布鲁克斯定律):
Brooks 人月神话 写道
人月
人月(英语:man-month)指的是“一个人要花几个月”才能完成软件开发的单位,通常用来评估一件软件项目的大小。以成本会计(cost accounting)为基础的进度预估技术,使我们误把工作量和项目进度混为一谈,人月是个危险并很容易就遭到误解的迷思(myth),因为它假设人力和工时可以互换。
Brooks法则
在一个进度已经落后的软件项目中增加人手,只会让它更加落后。根据Brooks法则,增加人员到一个已经延误的项目里,等于是火上加油。除非你可以把工作区分,让新进人员可在不影响他人工作的状况下有所贡献。
把工作切分给更多人做将造成额外的沟通(communication)代价——训练和相互的交流(intercommunication)。欲增加软件项目的人手,总共必须付出的代价可分为三方面:工作重新切分本身所造成的混乱与额外工作量、新进人员的训练、新增加的相互交流。
网上也有人写了文章来讨论“布鲁克斯定律”,比如:
柳记 浅谈软件开发定律系列之布鲁克斯定律 http://eilfei2000.blog.51cto.com/2956473/738324
下面的文章也很不错:做一个艺术品,只有一个人才可以做好。规模庞大的工程,需要多个人来完成。
云风的Blog 软件项目需要很多人一起完成可能是一个骗局 http://blog.codingnow.com/2011/05/solo.html
关于分工合作 http://blog.codingnow.com/2012/01/_oeouoeie.html
PS:为什么会写这么一篇文章呢?因为今天刚好看到最新的《程序员》杂志上的《1024核CPU上的并行编程》一文,突然想到在项目中好像也存在这种并行计算的影子。该文说道“同步所带来的串行化开销是并行程序最大的性能杀手”,同样也可以说“沟通 所带来的时间成本开销是项目的最大进度杀手,但沟通是不可以省略的”。(当然,本文并不是否定团队协作完成项目,因为大多数项目都不可能一个人搞定:一是时间不允许,二是精力不允许,三是能力不允许,四是客户不允许,五是......,最大的原因是没有必要也没有能力一个人扛,钱是公司赚滴,身体是自己的哦)
分享到:
相关推荐
珠心算的学习和应用,不仅能够提高计算速度和准确性,还能促进大脑的发育,提升记忆力、逻辑思维和空间想象力。 珠心算的全称是珠算式心算,它源于中国古代的珠算技术。珠算技术利用算盘这一物理工具进行计算,算盘...
为了确保每个学生都能在课堂上积极参与并从中受益,教师在教学过程中需要对学生的学习进度和理解程度进行观察,并根据实际情况适当调整活动难度。例如,对于理解能力较强的学生,教师可以提出更高层次的问题,引导...
2022年人教版五年级数学上册期中考试题的...通过这份试卷的考试,学生可以自我评估对数学知识的掌握程度,教师也能了解学生的学习进度和存在的弱点。这样的测评对于提高教学质量、促进学生全面发展具有十分重要的意义。
当我们提到“人教版二年级数学上册第四单元测试卷附答案.pdf”,我们就可以预见到这一单元将会覆盖一系列基础而重要的数学知识点,这些知识不仅是为学生打下坚实的数学基础,也是为了培养学生的逻辑思维和问题解决...
在人手紧缺、工作点多面广等压力下,该局的工作效率却并未受到影响。这是 为何? 事实上,两江新区各行政部门从一开始就按照大部制的思路进行组建,其中仅 建设管理局就对应了9个市级部门的职能职责。 "虽然我们都...
9. 评估与反馈:教案应包含对学生学习成果的评估方式,如观察记录、作品展示等,以便教师及时了解孩子的学习进度和理解程度,并据此调整教学策略。 10. 课程整合:此教案可以与语言、艺术、社会等其他学科进行整合...
2020年春季学期,人教版小学一年级数学下册的期中考试,作为基础教育的重要环节,旨在检验学生们在数学学科上的学习成果和掌握程度。本次期中考试试题的设计充分考虑了低年级学生的认知特点,通过多样化题型的设置,...
通过这样的测试,教师能够全面评估学生的学习成果,了解学生对知识点的掌握程度,进而为学生提供针对性的辅导和帮助,同时根据学生的测试结果调整教学方法和教学进度。 综上所述,2020年人教版小学一年级数学上册...
这八套期中复习试卷是针对这个阶段学生的学习进度而设计的,旨在检验学生对本学期所学知识的理解与掌握程度,同时也为教师提供了评估学生学习效果的重要工具。 第一部分:基础知识复习 1. 数的认识与比较:在这一...
24. **实际问题解决**:涉及百分比增加、体积计算、比例应用、工程进度计算、购物优惠计算、圆柱表面积和体积计算等多个实际问题的解决。 这些知识点涵盖了小学六年级数学的主要内容,包括百分比、几何比例、数的...
学生可以通过这份试卷发现自己在数学学习上的不足,并在教师的引导下有针对地进行复习和提高;教师可以通过试卷的答题情况了解学生的学习状况,进而调整教学计划和策略;家长则可以通过试卷的反馈了解自己孩子的学习...
本试题套件涵盖了广泛的数学概念,并以新修订的人教版教材为基准,精心编制了包括选择题、填空题、操作与计算以及解答题在内的多种题型,旨在全面考察和提升学生的数学能力。 **选择题**部分,为评估学生对基础数学...
- **示范性**:老师的言行举止对学生有着深远的影响,即使老师不说什么,学生也会受到熏陶和影响。 ### 34. 字形混淆原因 - **视觉相似性**:初学者容易将形状相似的汉字混淆,如“鸟”与“乌”。 以上知识点涵盖...
- **旁观游戏**:观察其他孩子玩游戏,但自己并不参与。 - **结合游戏**:与其他孩子一起玩,但各自玩自己的游戏。 - **合作游戏**:与其他孩子一起进行有共同目标的游戏。 - **教育意义**:通过观察幼儿在游戏中...
正方体体积变化与棱长的关系,自然数的因数特性,小数乘法竖式对齐的原则,等式的性质,以及因数数量与数值大小的关系,这些题目的设置都是为了让学生能够更深刻地理解数学概念,并能够将其运用到具体的判断中去。...
5. 多项选择题:科学技术对教育的影响体现在多方面,包括改变教育者观念、影响受教育者数量和质量、影响教学内容和方法、影响教学技术,并在一定程度上决定教育的发展方向。 6. 简答题:小学儿童的认知活动发展主要...