“在软件中,平均软件开发人员与最佳差异为50:1;也许甚至100:1。“史蒂夫乔布斯
如果您是软件工程师,您可能会同意史蒂夫乔布斯所说的。最好的和平均软件工程师之间的差距非常大,比大多数行业更大。
然而,仍有一些具有与软件工程类似的人才分布的行业。最熟悉的例子是专业运动,前1%的性能比平均值更好。而这种人才差距也反映在atheletes的薪水中,这是完全有意义的。例如,最顶级MLB投手,斯蒂芬斯特拉斯堡,2019年获得3800万美元,而MLB的平均工资是4.3亿美元。
但如果薪水是对运动员的贡献的反映,为什么软件开发人员的薪水的分布不是运动员?
在我看来,原因是,公司无法评估软件工程师,如体育俱乐部如何评估他们的球员。由于大多数职业体育都有非常完整的玩家客观统计,管理人员可以准确地评估玩家。因此,对于那些非常好的人来说,俱乐部的支付更高,因为每个人都知道他们很好。
如果一个俱乐部不想付出这么多,那么其他俱乐部将想要。虽然玩家的价值和价格之间可能存在一些差异,但它们之间的差距永远不会太大。这只是市场在信息非常透明时的工作方式。
另一方面,软件开发市场就像一个完全不同的世界。除非您在延长的一段时间内密切合作,否则您无法真正知道某人是否是一个好的软件工程师。
如果你是一个程序员,你可能有一个可以生产10x,50x比较平均生产力的队友。现在想想如果你是老板的老板会知道他/她是一个10x的工程师?你的首席技术官和首席执行官会知道他们是一位辉煌的工程师,愿意支付10x,比平均水平留给它们吗?
实际上,这10倍的超级工程师获得了10%的薪水,就是这样。根本原因是人们不知道他们有多好,除了有直接的同事。
事实上,您可以看到评估从大科技公司的过程中的软件工程师的努力。程序员最常见的技术面试过程是要求他们解决非常具有挑战性的编程问题。
如果一个受访者从未见过它们之前,那么很多问题都非常难以解决。这就是为什么许多人选择练习(或一点记住)一套可能的面试问题(也称为leetcoding)。
此外,在短时间内解决非常硬的算法问题的能力与在工作中的性能方面并不高度相关。软件工程师实际在工作中做的是如此不同,而不是解决那些非常明确的定义编程问题。这不是一个理想的方式软件工程师的能力。
在工作中需要解决的许多问题非常含糊。了解如何将一个暧昧的问题分解为一些明确的规划下列问题以及如何将业务问题置于一个良好的研究问题,这对于成为一个有效的工程师来说更为重要。
即使在许多公司已经意识到这一招聘流程问题时,他们仍然更喜欢它。为什么?这只是因为没有更好的方法来评估软件开发人员的能力。也许这个传统的面试过程只能衡量软件工程师的20%的与工作相关的能力,这比什么都好。所以你知道它有多难。
我提出了上面的面试示例的原因是详细说明,以可扩展的方式评估软件工程师几乎不可能。现在,我想做一个思考实验,以进一步详细阐述它。
让我们假设它易于测量程序员作为专业运动员的能力。如果这一假设是真的,你的工程师同事应该很好,有些人每年有200万美元,有些人每年获得100万美元。即使他们都知道彼此的工资以及分配的极端是多么极端,它们仍然应该感到公平。因为他们知道那些获得的人20倍的时间比其他人更好。他们应得的。
但是想象一下,如果一家公司真正使其薪酬分布如此,人们不会感到不公平甚至生气?除了这些顶级表演者的亲密同事之外,我肯定会将它们肯定会有遗忘(每天与他们合作的人)。这就是我要做的一点。评估它太难了。
因为它几乎不可能以规模和客观地测量软件工程师。公司更喜欢一种更安全的方法来分发软件工程师的奖励,这可能不相应地反映其生产率。