流传在程序界的两个度量衡


程序量的计量单位:行
行,似乎是很多中国程序员比较常用的计算自己程序的计量单位。
有时候,行,仿佛就是RPG游戏中主角的经验值。行值越高,似乎就能说明某程序员阅历越多,经验越丰富。
但是我却怎么也不能理解,为什么用一个简单的行就能分出个高低上下。
同时为什么单单只有程序界才用行这么个概念来作为评判标准(当然是非正式场合)。
说句笑话:如果文学界用行来作为创作成果的衡量标准,那么古龙的作为将远远超过了金庸。

众所周知,在程序设计中,一个可以运行的程序往往包含数个文件,要计算有多少行,必须跨文件进行统计。
同时,文件中的注释算不算统计范围?为了使用docgen,我写的每个函数开头起码都带有10行注释,多起来20-30行注释也不是什么稀罕事。要是这也算统计范围,那“骗经验值”岂不是太过简单?要是这不算统计范围,那么计算真实代码的行数简直麻烦透顶。
另外,现代IDE工具的发展让程序员免去了很多写框架代码的必要,消息机构,UI代码之类的工作大部分都被IDE代劳了,如果这部分的代码行数也计算在自己的业绩之内,岂不是太过形象工程了一点?
窃以为,用行来表达自己的开发经历,仅限于网上论战之用。在辩论白热化之时,抛出几十万行代码,以图震撼他人,达到壮我士气之目的,且多现于初级程序员。但过后细想,纵使百万行却又如何,我们完全不知道你的代码为何而写,完全不知道你经验了什么实际项目。
与其用行来表达说不清道不明的资历,还不如用实际参与的项目内容能更有说服力得展示自己的经历呢。
例如:开发了FAT12/16/32的实现,开发了MP3/WMA文件的解码,开发了支持N人同时在线访问的某某CRM系统的某某模块等等。

工作量的计量单位:人月
虽然《人月神话》早就说明了这个指标是多么的无聊,但是在实际项目开发中我依然还时不时得看到它的出现。尤其是当被要求把自己的工作量用这个单位来描述时,更为让人恼火。
原本人月企图描述的是人力和月数之间的关系,但是现实的开发环境下无数次证明了,人力的单纯增长并不能缩短所需耗费的时间(月数)。
人月理论或许在纯劳力劳动或者简单技术劳动下有着一定的现实意义(例如:农作物收割或简单劳动品的生产),但是在充满探索和创造的软件开发过程中,人月理论彻底崩溃了。
软件开发的过程可以简单归纳为要求分析、基本设计、实现设计、程序实现、功能测试、功能评价等过程,往细处还能做更复杂的分工。可以说,几乎每一个过程都包含了创作思考的过程。以往的经验只能用来作为借鉴,而不是简单的重复。
在软件开发过程中,每个参与开发的人员的单位时间产出都是一个近似固定的值,在拥有足够并且刚够好的人力之后,需要的仅仅就是时间。
抛开这样的基本,单纯增加人力并不会缩短所需的时间,只会增加无端的沟通成本,最后所有的开发人员都会发现,他们需要花费大量的时间在参加各种各样的会议、发送和回复无数的邮件甚至出差来进行互相确认。
举一个极端的例子:找10个怀胎一个月的孕妇,她们能够在一个月内生出一个健康的宝宝吗?

在软件开发过程中,使用人月作为工作量的计量单位唯一的现实意义就是用来计算软件开发的人力成本。但是也就仅限于此。
任何妄图用人月来进行人力资源划分的努力都是白费。一个100人月的项目,你说应该让10个人工作10个月,还是20个人工作5个月呢?
不同的项目,答案完全大相径庭。

那么既然人月理论在这里没有太大的意义,要缩短项目的开发周期应该如何做呢?
可以想到的唯一的办法就是增加人的单位产出。
简单来说,就是支付更多的酬劳刺激人力的生产率或者直接使用能带来更高生产率的人力。
还是哪句话:一份价钱一分货。

胡思乱想,胡言乱语了一篇。看着滑稽的地方,请一笑而过。

2 thoughts on “流传在程序界的两个度量衡

  1. wayne

    其实就是应该涨工资,哈哈
    这个东西太复杂了,光算是算不出来的,我也一直很迷惑所谓的見積もり
    另外,我到现在也估算不出来我写了多少行代码,因为完全没有感觉。。。

  2. Asterix

    非常有同感。

    缩短项目的开发周期,安全的做法还是开发者自身提高效率。
    一个好的程序员的工作量可以抵得上3个中等水平的程序员或者是10个新人。
    乱填人有可能适得其反,增加了管理消耗并且出错几率也增大。
    当然,那种一个萝卜配几个坑的项目除外。

    行数仅在同类型的项目之间才有比较意义。
    比如同属通信驱动、操作系统也相同的情况下,行数可以用来衡量工作量。

    还是新人的时候曾经问前辈,如何统计有效行?
    前辈提供了个区分方法:在遵守编码规范的前提下,如果删掉就会导致不具合的那些代码行就是有效行。感觉还是有道理的。

发表评论

电子邮件地址不会被公开。