1982年,王小波在美国留学,主业是数学,课余就给导师打工,写程序。

他在《革命时代的爱情》中对这段经历做了精彩的描述:

第一次从系里领来了编软件的活儿时,我想道:好!总算有了一个我施展才华的机会了!

虽然那是个大型软件,好几个人合编,但是我想这样更好,可以显出我比别人强。

越是这样想,就越是心绪纷乱,一行源码也写不出来。

所以我就对我老婆说,你出门时,把我锁在屋子里。我就是这样一个变态分子,但是我老婆一点没觉察出来。

锁在房子里时,精力能够集中。所以我编的第一批软件极有诗意,李后主有词云:红豆啄残鹦鹉粒。我的软件就曲折和弹性而言,达到了此句的境界。

后主又有残句云:细雨流湿光。我的软件就有这么简约,别人编十行,我只用一行。

等到交活时,教授看了吃一惊:这么短!能跑(run)吗?

我说你试试嘛。试完了他和我握手道:谢谢!

但是到了开支时,我的钱比别人都少。原来是按行算钱,真把我气死了。

等到交第二批软件时,我就吃棉花屙线屎。古诗云:一个和尚独自归,关门闭户掩柴扉。

我的第二批软件到了这种境界。简言之,别人编一行,我就编了二十行。

等到交活时,教授根本不问能不能run,只说:你这是捣蛋!就打回来让我改短。

资本主义就是这么虚伪。

王小波难题

王小波当年遇到的难题,表面上是:如何给程序员“发钱”?

实质上是:如何评定程序员的绩效。

这个问题很大,从当年到现在,中外组织发明了和演进了很多解决方案:KPI、PBC、OKR……,可谓:引无数英雄竞折腰。

1970年代之前,西方工程界普遍参考了“文字工作者”的经验——作家与记者是按照“字数”来计算产量的;

所以,程序员可以按照代码行来计算产出规模,然后根据规模“发钱”。

但是,这种办法无意地混淆两个重要的概念:工作量与规模

1975年,实践并思考了多年的Brooks发表了著名的《人月神话》,这篇文章反思:用“人月”来度量软件“规模”是“神话”。不过在这篇著名的文章里,他其实也没有给出明确的解决方案。

也就同一个时期,他的同事Allan Albrecht先生正在解决这个“神话”,最后形成即是:“功能点分析”(FPA)方法。

什么是功能点?

功能点分析的“第一性原理”是:

对用户有价值的是软件的功能,这个才是“规模”;而不是过程中的消耗与成本(代码行、工作量)。

功能点分析是站在“用户视角”(而不是开发者视角),将软件的功能需求分解为一系列最基础的功能单元(BFC,basic function component)。

这些基本功能单元,主要分为两大类、五小类。每类功能组件都有逻辑严谨的定义,是最小的、不能再细分的“软件原子”。

数据+行为,是不是有点面向对象的感觉?

我拿在用户在手机上点外卖举个例子,外卖app的BFC如下表:

从这个例子可以看出,“功能点”其实是每类BFC大小的“计量单位”。

上图的例子,就是在我国最常使用的“估算功能点”方法,约定了1个“ILF(内部逻辑文件)”值10个功能点,1个“EI(外部输入)”值4个功能点。

可能有同学马上就想到:同样是ILF,有的业务对象包含了50多个“字段”,有的只有5-6个。难道大小一样,都值10个功能点吗?

答案:在“估算功能点”方法中,就是一样大小的。BFC的固定功能点数值,是经过统计分析、并实证校验得出的。在统计学上来看,50个字段的ILF与5个字段的,其规模大小是没有差别的。

功能点有什么用?

软件度量师只要先分析某个软件包含多少个BFC,然后将他们的功能点数值汇总加起来,就能够数字化这个软件的规模。

就像是在乐高世界,软件就是由五类乐高积木搭成的,每一类乐高积木的重量(质量)都知道;我们只要统计出某个软件各类积木的数量,就能够计算出其总重量。

在统计学上,如此度量出的软件“规模”与开发实际投入的“工作量”之间,有较强的“相关性”。

(国外的文献显示,两者之间的R^2=0.89,spearman相关系数为0.85,对应的P值都低于0.0001。)

在国内也有很多的实践,证明规模与工作量之间的相关性普遍也很高。

由于定义逻辑严谨,且有这些“数字化”证据,功能点分析的方法发布后,很快就被ISO/IEEE认定为国际标准。在我国,基于功能点方法的“软件研发成本度量规范”,也先后成为了工信部标准(2013年)与国家标准(2018年)。

目前,在国内政府、金融、电信等领域,软件的客户购买(或租用)软件,很多都是基于功能点来计算软件规模,在以此计算工作量、合同(预算、结算)金额。

在个体绩效管理层面,很多工程师也承认:在众多KPI中,只有功能点是比较客观的。

当年,如果王小波也知道了这个方法,就可以给他的导师“上一课”了。

我的公司怎么没用功能点呢?

不过可能大家有疑问了:这么好的东西,为什么在互联网公司没用起来呢?为什么大家都习惯用人天来估算工作量呢?

我想主要的原因还是功能点分析法略显复杂,把需求分解成基本功能单元本身就有难度,需要经过一定的训练才可以。

“人天”就简单多了,任何人,拍拍脑袋,想想其中代码实现的难度,很快就能估算出来。

互联网公司的需求变化也快,还没等你实现完,估计又变了,用功能点分析法分析来分析去,累死人。

再说了,互联网公司也擅长工期倒逼法:别给我扯什么方法,下个月必须上线!

这时候,什么方法都不管用了......

(完)

点击下方图片,查看更多精彩

王小波:资本主义居然用代码行发工资,真虚伪!相关推荐

  1. 不可思议,作家王小波居然是国内第一代程序员!

    很多人知道王小波是小说家,却很少有人知道王小波也是中国最早期的程序员之一. 1982年,王二在美国留学,不是学习现代文学,而是--数学.课余的时候,就给导师做高级打工仔--写程序.他应该是我国第一代码 ...

  2. 第一代程序员王小波 (送书活动)

    整理 : 叶子 | 出品 :OSC开源社区(ID:oschina2013) 文末送书活动,记得看完啊 ! 前两天,#王小波逝世25周年#的话题登上热搜,这位英年早逝的天才的过往不由浮现在我脑海. 说起 ...

  3. 第一代程序员作家--王小波

    第一代程序员作家-- 王小波 喜欢读书的人,对王小波都不陌生,他是中国最富创造性的作家之一,他是中国近半世纪的苦难和荒谬所结晶出来的天才,他英年早逝.他的作品对我们生活中所有的荒谬和苦难作出最彻底的反 ...

  4. 小波从此逝,江海寄余生,不但是文坛巨擘还是不世出的编程奇才,王小波离世25周年

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_211 二十五年前的今天,王小波先生因病于北京逝世,享年四十四周岁.喜爱他的人,都知道他是一个特立独行的人,拥有谦虚与自豪并存的强大 ...

  5. 第一代程序员王小波,逝世 25 周年

    大家好,我是校长. 说实话,我非常喜欢作家王小波,他写的书籍真的是天马行空,脑洞非常大,尤其是思维比较跳跃,这种跳跃性的思维一点都不像程序员的严谨的逻辑思维的风格.但是,其实,王小波还是我们中国的第一 ...

  6. [宋史学习]王小波,李顺起义

    摘录 淳化五年正月中旬,李顺攻占成都,建立政权,称大蜀王,建元应运.同月下旬,宋太宗得知川西的严峻形势,随即任命亲信宦官王继恩为剑南两川招安使,率军征讨.二月初,宋太宗才得知成都陷落,于是又加派马步军 ...

  7. 《沉默的大多数》王小波——读后感

    这本书是在 KU 热门区看到的,关于"沉默的大多数"这个词,已经听过很多年了,只是一直不知道还有本书,所以就好奇想看看,对王小波的印象也不多,只知道他是个有趣的人,还知道他是个浪漫 ...

  8. 几个男儿是丈夫――评王小波《黄金时代》

    我从你的梦里来,将要打碎你的梦. 如果大家不喜欢面对这种残酷,建议不要看我的胡言乱语了,美梦变成恶梦终究不是令人愉快的事情.王小波在<我是哪一种女权主义者>说:"作为一个男人,我 ...

  9. 【黑客故事】程序员作家王小波

    目录 1 写文章与开发软件的相同之处 2 黑客王小波的工作 作家王小波 图片来源:来自网络 今天是程序员作家王小波逝世25周年的日子,谨以这些文字纪念王小波给我的启发,也希望启发大家. 1 写文章与开 ...

  10. 用Python分析下王小波与李银河写情书最爱用哪些词

    作家王小波其实也是我国最早期的程序员,突发奇想,王小波写情书最喜欢用哪些词呢?用Python词云分析下! 直接上代码吧,有注释很好理解.输出的图片设置的比较大,所以运行的比较慢,可以适当把图片尺寸改小 ...

最新文章

  1. HDU5977 Garden of Eden 【FMT】【树形DP】
  2. cad vba 打开文件对话框_CAD文件损坏?无法打开?别急,这八种方法或许能帮到你...
  3. C++中重载与重写函数区别及虚函数(转载)
  4. mysql 触发器定义变量_MySQL 函数存储过程触发器定义简单示例
  5. SDP协议 学习笔记
  6. 机器学习】LDA线性判别分析
  7. [转载]用UglifyJS2合并压缩混淆JS代码——javascript系列
  8. Linux 用户组权限讲解
  9. 三维ICP-SVD配准
  10. selenium 获取不了标签文本的解决方法
  11. 手把手教你安装破解IAR For ARM 6.3
  12. shc在嵌入式Linux上的使用
  13. openoffice java_java代码实现开启openoffice服务和关闭sffice.exe进程
  14. 【开源访谈】ECharts 作者 林峰 访谈实录
  15. go-cms golang内容管理系统, vue分离+自动代码生成
  16. 复化梯形公式c语言实验,实验4_数值积分与数值微分(完成版).doc
  17. Cglib入门到使用
  18. AcWing蓝桥杯AB组辅导课07、贪心
  19. WordPress+Php+MySQL刹那间配置成功
  20. python对象的生命周期_python对象的生命周期

热门文章

  1. OC 需求 检测手机是否安装某个App,app是否安装(删除)appmusic
  2. 伽罗华有限域_伽罗华域(Galois Field,GF,有限域)乘法运算 - MengBoy的专栏 - CSDN博客...
  3. 邱锡鹏《神经网络与深度学习》—— 部分习题答案整理
  4. 适合包邮地区的 省市选择 jquery插件
  5. java jersey 搭建_Jersey搭建Rest web服务
  6. 面试时要怎么做自我介绍呢?
  7. 计算机按()的程序进行工作,2016计算机一级考试WPS练习题及答案
  8. 使用JS将PDF文档转成图片,一页文档对应一张图片,并支持将图片批量导出!
  9. 将markdown文档转化为pdf格式
  10. 机器学习(2): K-means (k均值) 聚类算法 小结