程序员的工作不能用“生产效率”这个词来衡量

http://www.aqee.net/theres-no-such-thing-as-software-productivity/

通过反复的交谈,Bill Caputo最终说服了我,让我相信了一些不可思议的事情。这些事情改变了我整个看问题的方式,也让我重新思考如何更好的工作。

软件开发中没有“生产效率”。

几乎正如10年前Martin Fowler 发现的,用生产效率来衡量软件开发工作没有任何意义。原因就在于,它们不属于同一范畴。换句话说,生产效率不具有作为衡量软件开发工作的适用性。“今天创造了多少代码/软件?”这是一个没有意义的问题。即使可以这样测量,软件开发工作上的生产效率也不能以任何有意义的方式估计出它的商业价值。

这是因为,软件开发这种工作并不一定非要生产出什么东西。让我来举个例子:比如说,碰巧有两个程序员分别在开发两个完全一样的项目,他们在同一天被分配了相同的任务。第一个人,弗兰克,回到电脑前,写出了一个有1000行代码的框架,完美的解决了问题。代码规范书写,全面测试,有详细的文档描述部署和操作的流程。第二个程序员,皮特,转身去了公园,在哪里,他一边喂鸽子一边思考问题。大概在下午4:45分,皮特溜达回办公室,删掉了200行代码,并部署了他的修改…问题就这样解决了。

这两个程序员,今天的“生产效率”谁的更高?答案是:这无关紧要。紧要的是,皮特解决了问题,同时为团队消减了长期维护的成本。弗兰克同时也解决了问题,但他因为生产了代码,提高了维护成本,所以,(在其它方面完全等效的情况下)他的方案差一些。而把皮特称作更有“生产效率”,则完全从实效性上扭曲了这个比喻。

我认为,优秀的程序员,他所做的事情应该是去除问题。而相对的则是生产出什么。所以,技术上的生产产物,例代码,文档,数据等,对于实现“去除问题”的目标来说,都是必要但有害的。这就是为什么有时候,这最有效的解决方案是5分钟的交流沟通。

对这种思考模式最有力的支持:当你用这种思维去看待软件开发后,很多棘手的、能看得到但无法测量的问题突然间变得很容易理解。例如,为什么当程序员和他们的客户隔离开时会显得缺乏效率。难道让他们避免打搅不会提高工作效率吗?答案是不会,按常理这会使他们更有效率…但也会造成他们更没效率。因为他们的工作是为客户解决问题,与客户的隔绝导致他们无法找到问题,确定问题。相反,跟有问题的人保持沟通能更有效的解决问题,甚至有时候你一天8小时手指根本不需要碰键盘。

这将我们引向了另外一个问题:为什么软件开发中维护成本相比起其它方面的成本显得很难接受?为什么我们永远无法在第一次做出“正确”的东西?一种解释就是,软件是一个对可能变化的问题的固定解决方案。当问题发生变化时(或我们对它的理解发生变化时),问题和解决方案之间就出现了裂痕。这种随着问题的演变而不停的修补产生的缝隙的活动代价高昂。这也解释了为什么相对于其它软件项目,视频游戏通常的维护成本较低。这是因为它们需要解决的问题(让人们去买这个游戏,玩这个游戏)基本上是根据人类心理学,而这是不常变化的。

好的程序员和坏的程序员之间10倍之差的“生产效率”又是从何说起?每个人都说这是事实,但事实上没有人能直接的测评。我们的理论同样能解释这个问题。相比起工作效率来说,“解决问题”是一种更容易“调控”(金融词汇)的东西,使得产生一个数量级差别的效果很容易实现。解决问题需要的是信息和洞察力。你要么有,要么没有。不需要原材料,没有生产能力限制。并不是差的程序员打字速度慢。并不是如果他们努力就能做得更好。他们是缺乏这种高效解决问题的眼界和必要的信息。也许无法测量好程序员和差程序员在生产效率上的差别的原因就在于没有东西可测量

还有很多现象都可以用这个理论来解释。如果你去找,一定能发现一些。最近我一直在搜罗这方面的案例….试一试,看看这个理论是否也体现在你的工作中。每当发现自己在说提高“生产效率/工作效率”时,问问自己是否是在用正确的方式解决问题。铭记在心:如果不通过生产任何东西就能解决问题,那生产出的任何东西都是一种浪费。

本文由“外刊IT评论”网(www.aqee.net)荣誉出品

[英文原文:There‘s No Such Thing As Software Productivity ]

时间: 2024-11-05 00:17:43

程序员的工作不能用“生产效率”这个词来衡量的相关文章

如何让程序员幸福工作:细节决定成败

众所周知,优秀的程序员不但代码写得快,而且 bug 少.如何发现和留住这些人才,如果一个企业想要做大做强,那么这绝对是一个挑战.除了加薪和晋升以外,有时候一些细微的地方也能加分.虽然看上去并不重 要,但是要知道压死骆驼只需要最后一根稻草就够了.那么这些“细微的地方”指的又是什么呢? 合适的硬件 请注意这里有个形容词“合适”.编程需要有计算机是毋庸置疑的.不过企业也没有必要倾尽全力去配备最高端的设备.购置 CPU.内存.硬盘等设备应该根据实际情况量力而行.决策要明智,因为足够与奢侈之间只有一步之遥

程序员提高工作效率的15个技巧【Facebook】

程序员提高工作效率的15个技巧[Facebook] 作者: habadog 日期: 2015 年 02 月 13 日发表评论 (0)查看评论 1,Days always fill up. Only plan for 4-5 hours of real work per day.其实每天只有4-5个小时能专心编码,充分利用这些时间. 2,Work more when you’re in the zone. Relax when you’re not.在状态的时候多干一些,不在状态时可以就去做个大保

为什么程序员的工作效率跟他们的工资不成比例(转)

英文原文:Why programmers are not paid in proportion to their productivity 最有效率的程序员会比一般的程序员的编程效率高上几个数量级.但在任何公司里,他们的工资水平却只会出现很小的浮动差距.甚至在整个行业内,这种差距也不是很大.如果一个程序员的效率能达到其他人的10倍,为什么他不能得到10倍高的报酬呢? Joel Spolsky在最近的他的一个演讲里就这个问题给出了一系列的答案.首先,程序员的工作效率在整个行业内千差万别,但在一个公

为什么程序员的工作效率跟他们的工资不成比例

最有效率的程序员会比一般的程序员的编程效率高上几个数量级.但在任何公司里,他们的工资水平却只会出现很小的浮动差距.甚至在整个行业内,这种差距也不是很大.如果一个程序员的效率能达到其他人的10倍,为什么他不能得到10倍高的报酬呢? Joel Spolsky在最近的他的一个演讲里 就这个问题给出了一系列的答案.首先,程序员的工作效率在整个行业内千差万别,但在一个公司里却不会有太大的差距.如果一个人比他的同事的效率高10倍, 那他基本上会离开,要么去找更有天赋的人一起工作,要么去创业开公司.第二,极高

程序员的工作、学习与绩效

工作中,碰到一些这样的例子,总有人提出疑问,为什么一个同事工作勤勉,完成了很多事情,季度绩效评定很高,但晋升却碰壁了.之前已经写过一篇<技术晋升的评定与博弈>,基本就能解答这个问题.但隐藏在背后的更深层次的本质却是:工作.学习与绩效的关系. 工作 程序员的主要工作是:编程,产出代码,完成需求,交付软件系统. 程序员按其工作技能和经验,大体又分为三个阶段:初.中.高级.三个级别的程序员的主要工作都是编程与产出代码,产出代码的数量也许相差不大,但产出代码的属性可能有明显差别. 在曾经的文章中提出过

程序员的工作态度

朱光潜曾谈过对古松的三种态度,科学的,实用的,美感的 其实这也是人们对所有其他事物能够产生的情感 三种情感对人的生活都很重要 科学的追求是真,实用的追求是善,美感的追求是美 我们对工作应该同时抱有这三种态度 拿程序员的工作来说,我们工作是为了赚钱,这是对工作实用的态度,是为了生存 我们工作大多数时间在写程序,写程序需要科学严谨的态度,要不然bug可够你受得 只有这两种态度还不够,只有真正我们把自己的代码当成一件艺术品,我们才能真正的做好它,这就是对代码美感的追求 三足鼎立,缺一不可

为什么程序员的工作效率跟工资不成比例!

最有效率的程序员会比一般的程序员的编程效率高上几个数量级.但在任何公司里,他们的工资水平却只会出现很小的浮动差距. 甚至在整个行业内,这种差距也不是很大.如果一个程序员的效率能达到其他人的10倍,为什么他不能得到10倍高的报酬呢? Joel Spolsky在他的一个演讲里 就这个问题给出了一系列的答案.首先,程序员的工作效率在整个行业内千差万别,但在一个公司里却不会有太大的差距.如果一个人比他的同事的效率高10倍, 那他基本上会离开,要么去找更有天赋的人一起工作,要么去创业开公司.第二,极高的工

小小程序员找工作的一路经历

小小程序员找工作的一路经历 昨天下午把三方给了TP-LINK之后,为期将近两个月的找工作过程也算是告一个段落.两个月一路走来,压力巨大.人生的下一站到底会在哪里,无法预测.面对事业.家庭.爱情,总想找到一个最好的平衡点.选择Android开发,选择TP-LINK,选择深圳,这一路的选择必然会对未来产生极大的影响,而影响总是具有两面性.未来的路应该怎么走,如何把命运掌握在自己的手里,这值得深思. 感谢家人的支持,感谢女友的相伴,感谢朋友的建议,是你们让我有一种持续战斗的激情:同样感谢腾讯,是你让我

程序员在工作中遇到最郁闷的事情

1:自我感觉很牛X的领导 2:自我感觉什么都会的开发程序员 3:没有架构的软件 4:没有任何文档的开发 5:没有注释的程序 6:自己开发完后自己都搞不懂的代码 7:需求不断的变更 8:加班加到吐 9:突击完成项目后.但是公司减掉你的加班时间,并且还说你效率不行 10:"我写代码的时候一个BUG都没有"的牛人 11:辛辛苦苦工作,到发工资的时候拖很长时间 其它的希望程序猿们可以补充.天下奇葩事情很多.为什么程序猿要很受伤. 程序员在工作中遇到最郁闷的事情