读人月神话的一些感想

1.为什么会加班

在软件项目中,项目滞后是很普遍的事情,解决的办法通常是增加人手,但在书中作者指出了这种做法的错误。像割小麦或者收棉花这种传统行业可以很轻松的将某个任务分解给参与人员,并且这些参与人员不需要有过多的交流,而且这些被分解的任务也基本不存在时间上的依赖关系,而在软件开发中近乎不可能。 软件开发中很多的任务都存在次序上的限制而不能分解,增加人手对进度是没有帮助的。对于可以分解的任务,不同的子任务之间需要相互沟通和交流,增加的人手越多,沟通的成本越高,往往得不到加快进度的目的。而且这些都没有包括对新增加人员培训的时间成本等,所以作者得出结论:向进度落后的项目中增加人手,只会使进度更加落后而对于国内的软件公司通常的做法就是加班,增加人月的工作量,所以在国内加班基本上是普遍现象,而且几乎成了这个行业的代名词。但是这种做法是否真正有效,我持保留意见。
对于项目滞后,作者指出缺乏合理的进度安排是造成这一问题的最主要原因,而且他比其他所有因素加起来的影响还要大。对于软件任务的进度安排,作者在书中给出了他使用很多年的经验法则:
1/3  计划
1/6  编码
1/4  构件测试和早期系统测试
1/4  系统测试、所有的构件已完成
在这里可以看到计划占了整个项目三分之一的时间。项目的时间依赖于顺序上的限制,人员的最大数量依赖于独立子任务的数量。合理的进度安排,合理的人员配置是保证项目按时完成的关键所在,也是解决加班问题的主要办法。

2.青春饭论

程序员只能吃青春饭,这样的结论一直在流传,大概的依据就是需要加班,需要熬夜,年纪一大身体就不行了;这个行业技术更新太快,年纪一大学习能力就差了。所以普遍的认为是程序员到达一定的年龄就不能codeing了,或者转管理,或者转技术支持,或者被淘汰。真的这样吗?在外科手术队伍一章中作者提到优秀的程序员比一般的程序员在生产率上有10:1的差距,而在编程速度和空间上 具有5:1的差异,简单说就是在生产率上20000美刀/年的程序员可能是10000美刀/年的程序员的10倍。也就是说优秀程序员的效率比普通程序员有数量级以上的差异,而对于产出效益比就更不知道高出多少个数量级。而且优秀的程序员其产出造成的bug少,商业损失和事故少,代码优良所以可扩展成本低、维护低等等。所以作者讲到:在可能的情况下,尽量使用优秀的程序员。那么问题来了,优秀程序员和年龄、经验到底有没有关系?实际上没有人可以保证这一点,但下面的一 篇论文却可以得出一些结论。
论文的地址在这: Is Programming Knowledge Related to Age?

这篇论文是两个北卡罗莱纳州立大学计算机科学系的两个人Patrick Morrison 和 Emerson Murphy-Hill 对StackOverflow.com上的用户做了相关的数据挖掘得出来的一些数据。(我们知道StackOverflow.com上的数据是公开的,任何人都可以用来分析和统计,所以这篇论文的真实性是有的)

数据采样和清洗条件如下:(数据全量是1694981用户,平均年龄30.3岁)

  • 15-70岁之间的用户(这年龄段的用户被称做“Working age”),当然,有很多用户没有输入年龄,这些用户都被过滤了。
  • 用户在2012年内都回答过问题。因为StackOverflow在2012年对问题和答案的质量要求得比以前高了一倍,所以更能反映程序员的真实水平。
  • Reputation声望在2-100K之间。(注:StackOverflow的用户Reputation是得到社会认可的,在面试和招聘中是硬通货币。比大学的学分更有价值)

上述的条件一共过滤出84,248名程序员,平均年龄:29.02岁,平均Reputaion在1073.9分。

年龄分布图

下面我们来看一下他们的年龄分布图:我们可以看到程序员年纪的正态分布(高点在25岁左右,但是中点在29岁左右)


能力和年龄分布图

然后,计算每个人每个月的Reputation,这样可以找到这个用户的真正的活跃时间,这样便于计算这个程序员的真实能力。(总声望 / 活跃时间),可以得到他平均每个月得来的Reputation。

我们来看看程序员的能力和年龄段的分布图:(你可能会大吃一惊)

上图中我们可以看到,程序员的能力在从25岁左右开始上升,一直到50岁后才会开始下降。所以说,程序员吃的不是青春饭。只有码农,靠蛮力,用体力而不是用脑力的程序员才是吃青春饭的人。

年纪大的人是否跟不上新技术

论文的作者分析了Tag,用了最近5年内比较流行的技术Tag,然后用了一套比较严谨的算法来查看那些所谓的“老程序员”是否在新技术上跟上不了,所谓跟不上,也就是这些老的程序员在回答这些新技术上并不活跃。所谓老,就是37岁以上的程序员(就是我现在的年纪)。

得到了下表:可以看到,老程序员和年轻的程序员对于一些新技术的学习来说也是差不多的,甚至有些项还超过了年轻的程序员。

结论

论文的结论是:

1)程序员技术能力上升是可以到50岁或60岁的。

2)老程序员在获取新技术上的能力并不比年轻的程序员差。

由此我们完全有理由相信程序员的工作不是吃青春饭的,恰恰相反随着年龄的增长,能力、经验也都会增长。当然这也不是绝对的,你必须热爱这一行业,并且愿意付出时间,愿意继续钻研。
随着移动互联网的到来,以及这一行业的持续火热,程序员的需求也越来越旺盛,所以我们看到越来越多的人跨入这个行业,有人半路出家,有人只是看到了钱景。但当真正入行之后,很多人不是努力继续学习,追求技术的进步,往往开始懈怠,希望可以一劳永逸。所以有人开始抱怨开发太累,实在学不动,开发只是年轻人的事情。我想这些都只是那些不愿意正视自己懒惰、软弱的借口而已。
反观在IT业发展很久的国外,50、60岁以上的比比皆是。所以如果你保持对coding的热爱,对技术提高的执着,我相信一定可以一直写下去。
(完)

注:以上论文的分析借用了酷壳的分析

中国科学技术大学软件学院 王金锐 转载请注明出处


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值