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

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

The most productive programmers are orders of magnitude more productive than average programmers. But salaries usually fall within a fairly small range in any company. Even across the entire profession, salaries don’t vary that much. If some programmers are 10x more productive than others, why aren’t they paid 10x as much? Joel Spolsky gave a couple answers to this question in his most recent podcast. First, programmer productivity varies tremendously across the profession, but it may not vary so much within a given company. Someone who is 10x more productive than his colleagues is likely to leave, either to work with other very talented programmers or to start his own business. Second, extreme productivity may not be obvious. This post elaborates on this second reason.

一个人的工作效率比同伴高10倍怎么可能不被察觉呢?在某些行业里,这种差别是显而易见的。一个销售人员的效率是他的同伴的10倍,这很容易看出来,而且他也能得到相应的报酬。销售成绩容易测量,就比如有些销售人员销售额会是其他人的数十倍。一个泥瓦匠的工作效率是其同伴的10倍,这也很容易看出,但这种事情不会发生:最好的泥瓦匠也不可能比一个一般的泥瓦匠快10倍。软件的产出不可能像销售或砌砖那样容易的测量。最好的程序员并不是能写10倍多的代码,他们也不是能多干10倍多小时的工作。 程序员在避免写代码时才体现出最高的效率。他们能认识到人们要求他们解决的问题并不需要解决,他们能知道客户并不清楚自己想要的东西是什么。他们知道什么地方可以重复利用或可修改来解决问题。他们会欺骗客户。但是,当他们做到了最高的效率时,没有人会说“哇塞!这比用那笨办法做会省事100倍。你应该涨工资。”顶多人们会说“这个主意不错!”然后继续干活。你需要很长的时间才能发现有些人经常性的显现出省时省力的睿智。或者反过来说,你需要很长的时间才能认识到有些人虽然经常加班加点的编程却没有什么产出。 对超级程序员形象的一种具有浪漫主义色彩的描绘是:他开启Emacs编辑器,敲起代码来就像打机枪,把一个软件从无到有开发成没有任何缺陷的最终产品。而一个更精确的描绘是:他静静的望着太空几分钟,然后说“咦,这好像以前在什么地方见过呀。”

How can someone be 10x more productive than his peers without being noticed? In some professions such a difference would be obvious. A salesman who sells 10x as much as his peers will be noticed, and compensated accordingly. Sales are easy to measure, and some salesmen make orders of magnitude more money than others. If a bricklayer were 10x more productive than his peers this would be obvious too, but it doesn’t happen: the best bricklayers cannot lay 10x as much brick as average bricklayers. Software output cannot be measured as easily as dollars or bricks. The best programmers do not write 10x as many lines of code and they certainly do not work 10x longer hours. Programmers are most effective when they avoid writing code. They may realize the problem they’re being asked to solve doesn’t need to be solved, that the client doesn’t actually want what they’re asking for. They may know where to find reusable or re-editable code that solves their problem. They may cheat. But just when they are being their most productive, nobody says “Wow! You were just 100x more productive than if you’d done this the hard way. You deserve a raise.” At best they say “Good idea!” and go on. It may take a while to realize that someone routinely comes up with such time-saving insights. Or to put it negatively, it may take a long time to realize that others are programming with sound and fury but producing nothing. The romantic image of an über-programmer is someone who fires up Emacs, types like a machine gun, and delivers a flawless final product from scratch. A more accurate image would be someone who stares quietly into space for a few minutes and then says “Hmm. I think I’ve seen something like this before.”

posted on 2011-12-25 00:44  Milton  阅读(182)  评论(0编辑  收藏  举报

导航