优秀程序员的薪水被低估了【转载】

原文地址 2007年的文章

我正在和我的一个朋友(我们称他为埃里克)谈论我关于重写软件的文章他提出了一个令人震惊的主张。“我认为你低估了重写应该减少代码大小的数量。我愿意打赌,我可以用原始软件一半的行数重写几乎任何软件。事实上,我会以固定价格投标重写任何多达 25 万行的代码,在一年内完成它,满足他们的编码标准,启动 80% 的测试覆盖率,并完成所有工作我自己。” 这有点难以下咽。一个人一年重写25万行代码?IBM曾经做过一份研究报告指出,平均开发人员每天大约编写10行经过功能测试的代码。Eric 告诉我,他可以以每天接近 1000 行的速度可靠地编写经过测试的代码,几乎是平均值的 100 倍。

我觉得这有点自吹自擂,但埃里克确实是一个非常硬核的人。他已经构建了至少 6 个系统,代码范围在 100,000 到 250,000 行之间,并且他知道这需要什么。他是我的前 5 名开发人员名单中的一员,因为我和他一起工作过很多次,所以我知道他可以持续地以令人难以置信的速度编写出可靠的代码。虽然我怀疑他声称自己可以在一年内重写大多数 25 万行程序(将它们变成 125,000 行程序),但我毫不怀疑他可以在两年内完成。我毫不怀疑,当他完成后,代码会变得更好。

这让我明白了本文的要点,即普通程序员和最好的程序员之间至少存在一个数量级的技能差异,甚至可能两个数量级。我向相当多的程序员和经理提出了这一观察,在听取人们的回答时,我注意到以下几点:

每个人都同意优秀的开发人员比普通开发人员好很多倍,但人们给出的数字差异很大,从 4 倍到 100 倍不等。 每个人都同意,最差的程序员是净负面的(他们实际上减慢了项目的速度)。 估算人员所做的工作类型越复杂,他们选择的乘数就越高。花所有时间编写小型 CRUD 应用程序的人往往会选择 4 倍到 10 倍之间的数字,但在极其复杂或性能关键领域工作的人会选择 10 倍到 100 倍之间的数字。 每个人都同意,较大的团队效率较低(以每个人为基础),但在团队生产力开始下降之前,一个团队最多可以有五到六人工作 大多数人都同意,除非有一位真正优秀的工程师,否则有些问题(尤其是一些性能问题)永远无法解决。 大多数人都认为最好的程序员在开发生命周期的各个方面都表现得更好:分析、设计、编码、调试(但是你想分解它)。 大多数人都认为,最好的程序员编写的代码比普通程序员编写的代码更小,每行包含的错误也更少。 虽然我尊重的一些人可能会对其中一些观点提出异议,但大多数人似乎在某种程度上接受它们,这就引出了一个问题:为什么最好的程序员没有得到更多的报酬?还有很多。

让我们回到埃里克的观点。假设一家公司出于某种原因决定重写大约 250,000 行代码(通常是因为它被破坏了),一方面他们可以选择让由 10 名普通开发人员组成的团队在接下来的两年里继续工作,并最终完成它并支付约 250 万美元的满载成本。由于他们是普通编码员,因此会有很多错误,虽然他们可能会有所改进,但改进将低于预期。如果他们接受埃里克的提议,并且让我们假设(为了争论)埃里克需要引入 2 个同样优秀的朋友(埃里克 2 和埃里克 3)。一个由 10 名普通程序员组成的团队在两年内可以完成的任何事情,三个埃里克可以在一年内完成。如果你给他们 1 美元。整个合同的固定金额为 500 万美元,他们可以在当年年底以每人 50 万美元的价格离开(这可能比他们目前的工资多一点)。最终产品很可能会更好、更小、更快、更可靠。这正是像 Eric 这样的人倾向于编写的代码。事实上,他们必须编写更好的代码,否则他们无法成为埃里克。写出糟糕代码的人会花费一生的时间来修复它。这是他们如此缓慢的一大原因。

同样的逻辑更适用于中等规模的项目(例如 1-200 万行代码)。由 99.7% 的开发人员组成的五到六人团队可以比任何由 40 名平均编码员组成的团队花费更少的时间编写这样的项目。谁不愿意每年向他们每人支付 30 万美元来完成这项工作呢?

实际上,这很难做到。首先,大多数公司无法区分 66% 的开发人员和 99% 的开发人员(有些公司甚至无法区分 50% 的开发人员和 99% 的开发人员),因此这使得这一策略对于他们来执行。其次,许多公司根本不知道如何使用顶级开发人员。他们想方设法让他们陷入会议,不断地打断他们,让他们陷入无用的、没有生产力的任务中。这就是他们无法区分他们的部分原因:他们有一种近乎阴险的能力,可以让每个人都回到“平均”的大堆中。在这些环境中,其他工程师通常都知道优秀的开发人员比其他人都更好,

事实上,任何人都几乎不可能面试前百分之一的人。编程技巧和面试技巧之间有太多区别,无法有如此精细的流程。通过工作,你可以淘汰掉糟糕的和一般的工程师,但获得优秀的工程师却极其困难。这意味着找到真正杰出工程师的唯一可靠方法就是了解他们。与他们一起工作并看到他们的行动。既然你不能面试伟大的人,那么还有两个选择:第一种方法是保罗·格雷厄姆的方法,让他们几乎不花钱就创办一家初创公司,如果他们结果很伟大,你就会知道(即使启动失败)。第二种方法是伙伴系统:在街区呆了一段时间后,打电话给你认识的五名最好的工程师并说服他们加入你。然后,如果您还需要更多,请让他们给他们认识的五个最好的开发人员打电话。很快你就拥有了一支非常强大的团队。

好友系统有其局限性。在扩散效应将您从前 1% 提升到前 10% 之前,您最多可能无法通过这种方式获得超过 15 名左右的人。这假设您实际上已经接触过足够多的优秀公司,可以跻身前百分之一。然而,好友系统的更大问题是如何让这五个人加入以及加入后如何处理他们。一种可能性是创建一家初创公司。不幸的是,无论工程师多么优秀,初创公司都不能保证成功。许多拥有平庸工程师的公司都取得了成功,而另一些拥有优秀工程师的公司却失败了。编码只是难题的一小部分,许多顶级程序员都知道这一点。另一种选择是成立一家咨询公司,但咨询是一项销售驱动的活动,仅仅因为您实际上拥有一支由六位出色的程序员组成的优秀团队,并不意味着您可以说服某些大公司支付 300 万美元来为他们编写一个大型软件。每家咨询公司都声称拥有世界上最好的程序员。一家无法在内部聘用顶级程序员的公司在外部挑选顶级程序员方面也不会有任何进步。除非你手头有合同,否则让你认识的五名最好的程序员加入你的团队将会有点困难。一家无法在内部聘用顶级程序员的公司在外部挑选顶级程序员方面也不会有任何进步。除非你手头有合同,否则让你认识的五名最好的程序员加入你的团队将会有点困难。一家无法在内部聘用顶级程序员的公司在外部挑选顶级程序员方面也不会有任何进步。除非你手头有合同,否则让你认识的五名最好的程序员加入你的团队将会有点困难。

因此,也许将一小群顶级程序员聚集在一起并保证他们获得接近其应得的报酬是一个挑战,但为什么真正的顶级程序员不能向他们所在的公司提出更多要求呢?公司难道不会为了留住他们而付出很大的代价吗?答案几乎肯定是否定的。假设该公司是一家大公司,但大多数编码员都是平庸的。在这种情况下,他们可能有相当固定的薪资结构,而特定经理支付远高于或低于标准的薪资的能力有限。即使经理同意每年支付 30 万美元,他们也几乎不可能获得批准。此外,经理认识工程师技能的能力可能相当有限。他们可能知道程序员更好,

小公司也做不到。即使经理认识到开发人员确实很棒,但很可能公司中的所有开发人员都相当优秀。因此,虽然他们总体上可能比平均编码员好 10 倍或 15 倍,但他们可能只比公司的平均编码员好 2 倍或 3 倍。此外,如果他们同意支付更多费用,那么公司中的每个人很有可能很快就会要求更多费用,而这不是他们负担得起的。失去一位优秀的程序员比向另外 20 名程序员多付 25% 或 50% 的费用要好。伟大的开发人员无法获得比他周围的人多 3 倍的最后一个原因是,他可能不知道自己有多伟大。真正伟大的开发人员知道他们很优秀,但很少有人知道他们比同行好多少。

最终,这意味着真正优秀的程序员的薪水将继续低于其应有的价值,而普通的程序员将继续获得更高的薪水,因此高技能的经济利益将主要流向拥有最优秀员工的公司,而不是员工。他们自己。公平吗?不,但这就是市场的运作方式。谁曾说过公平可以或应该被纳入考虑因素。当然,我很乐意接到电话,要求我找到五位最好的程序员,以 300 万美元的价格编写一百万行应用程序,但我当然不会浪费任何时间坐在电话旁等待


作者:spike

分类: 互联网

创作时间:2023-06-26

更新时间:2024-12-09

联系方式放在中括号之中例如[[email protected]],回复评论在开头加上标号例如:#1