为什么我们永远不会有足够的软件开发人员

Why We Will Never Have Enough Software Developers

我们永远不会有足够的软件开发人员。

尽管努力增加计算机科学毕业生和软件工程师的数量,但开发者仍大量退出这个行业。

 这就是原因。

开发者辍学是真实的

软件开发面临严重的留人问题:

  • 在 26 岁时,59%的工程和计算机科学毕业生从事与其专业相关的职业。到 50 岁时,只有 41%仍在同一领域工作,这意味着在职业中期大约有 30%的人退出了该领域。
  • 相比之下,工程和计算机科学专业的毕业生在毕业后进入不相关领域的留存率要高得多,只有 10-15%的人在 26 岁后转行

工程师们常常离开工程领域,转向非 STEM 的管理职位。毕业后进入管理岗位并不令人惊讶。令人惊讶的是,这些职位并非 STEM 领域。工程师们随着时间的推移,将技术角色换成非技术角色。

这个现象,我称之为“开发者辍学”,是一个真实的问题。背后是什么原因呢?

接收我下一篇长文帖子

对科技的商业和经济进行深思熟虑的分析  订阅

旧技能淘汰,新技能上场

与编程相关的工作技能流动率很高。随着时间的推移,招聘软件开发人员的公司所需的技能类型变化速度比其他任何职业都要快。

为了证明这一点,研究人员分析了 2007 年至 2019 年间超过 40,000 个在线招聘网站和公司网站上的职位发布,控制了雇主、地点和职业。他们将“新”技能定义为在 2007 年稀有或不存在但在 2019 年普遍存在的技能,将“旧”技能定义为在 2007 年普遍存在但在 2019 年稀有或灭绝的技能。

  • 虽然到 2019 年只有 30%的职位空缺要求至少掌握一项新技能,但 47%的计算机和数学类职位要求至少掌握一项新技能(即在 2007 年时并不常见的技能)
  • 这与教育、法律以及社区和社会服务等领域的工作不到 20%相比
  • 此外,2007 年计算机和数学领域的 16%工作岗位要求的技能在 2019 年已过时(即 2007 年常见但 2019 年相对稀缺的技能),这一比例是其他任何职业类别的两倍以上:

大约三分之一的计算机相关职业所需技能的变化是由于特定的新软件所致:

  • 2007 年至 2019 年间增长最快的软件技能包括 Python、R 和 Apache Hadoop
  • 在 2007 年流行但到 2019 年基本过时的软件包括 QuarkXpress、ActionScript、Solaris、IBM Websphere 和 Adobe Flash(啊,终于有一个我认识的名字)

数据科学、机器学习和人工智能在技术密集型工作中也大幅增加。例如,2007 年至 2017 年间,要求具备机器学习和人工智能技能的 STEM 相关工作数量增长了超过 4 倍,超过 15%的 STEM 工作涉及这些技能。

为了更好地比较各职业技能变化的比率,研究人员提出了一种技能变化的衡量标准,该标准跟踪 2007 年至 2019 年间各职业内各种技能的绝对增长或下降。所需技能在招聘信息中迅速变化的职业得分较高,而技能变化不大的工作得分较低:

  • 计算机相关职业的得分远远最高,达到 4.8。请注意,这一指标的均值和标准差分别约为 3 和 1,因此计算机相关工作几乎比美国典型工作高出两个标准差。
  • 与此同时,教育行业和涉及体力劳动的工作技能变化分数非常低,通常低于 2。

我们可以更细致地查看具体的职位角色。这种细节使得差异更加明显(仅显示变化最快的角色):

网络开发在全国所有职业中技能变化率最高。其次是销售工程师,这也是一个常见的技术角色。数据库管理员、计算机网络架构师、系统管理员和应用程序开发人员都进入了前十名,我们在前 30 名中还看到了许多其他技术角色。这里的均值和标准差相似,使得网络开发在技能变化方面比美国典型职业高出超过 3 个标准差。

可以说,软件开发是一个快速变化的职业。

然而,你可能会认为,随着经验的积累,技能变化最终会趋于稳定。

你错了。软件工程职位所需的技能在整个职业生命周期中变化迅速:

  • 在计算机和工程职业的入门级职位到需要 12 年以上经验的职位中,2019 年要求至少掌握一项新技能的职位发布比例基本相同,均为 40-45%
  • 相比之下,2019 年 29%的入门级非计算机和工程职位要求至少掌握一项新技能,但对于需要四年以上经验的职位,这一比例下降至 24%

这意味着,2019 年寻求就业的经验丰富的 STEM 工作者通常需要具备在 2007 年或更早进入劳动力市场时并不需要的技能。

软件工程师永远无法逃脱技能变化的漩涡,即使在他们的职业生涯中已经很多年。经验丰富的工程师必须学习和采用在他们刚开始时甚至不存在的技术。开发者必须不断地重新调整自己,即使在他们的正式教育结束后很久。

没什么改变,只有我的零钱变了

与快速变化的工作相关的大学专业在早期薪资更高。

  • 在技能变化增加一个标准差的职业中,前几年薪资大约高出 30%
  • 如果我们排除变化最快和最慢的领域(高端的工程/计算机科学,低端的健康/教育),那么快速变化角色的早期收入溢价增加到约 60%:

快速变化的领域薪资更高。

然而请注意,薪酬优势随着时间的推移而下降。当一个人接近 50 岁时,在快速变化领域工作的薪酬溢价会大幅下降,仅为 20-30%,而在变化较慢的职业中则保持较高水平。

这是另一个观察薪资优势下降的方式。下面的图表模拟了 2016 年美元中,平均工人在 23 岁到 50 岁之间按大学学位类别的收入。

  • 计算机科学和工程专业的毕业生相比其他专业起步时有很大的优势
  • 然而,这种溢价随着时间的推移而下降,因为计算机科学和工程专业毕业生的收入随着时间的推移趋于平稳,而他们的同龄人的收入则增长得更快,持续时间更长
  • 事实上,生命科学和物理科学专业的毕业生在 40 岁时的收入超过了他们的计算机和工程专业同学:

排除商科专业,软件工程的收入溢价在百分比和绝对美元方面随着时间的推移而下降,甚至到工程师的收入几乎只比社会科学专业的学生高一点的地步:

但对大学专业的关注有些误导。这种现象与一个人的学习领域关系不大,更与职业选择有关。

为了说明这一点,研究人员绘制了不同类别工人的收入溢价,相对于那些拥有非工程/计算机科学专业并在非工程/计算机科学职位工作的工人。

  • 主修工程或计算机科学的工人在不相关领域工作,实际上会随着时间的推移,他们的收入优势会不断增加,而不是下降
  • 另一方面,无论专业如何,从事工程或计算机科学工作的个人,其收入优势随着时间的推移而逐渐减弱:

相对收益下降是 STEM 工作的一个特征,而不是专业。非 STEM 专业在 STEM 职业中的收入溢价起初接近 40%,但在十年内下降到 20%。相比之下,计算机科学和工程专业在非 STEM 职业中的相对收入优势随着时间的推移而增长。

软件开发职业推动了收入溢价的下降,而不是大学专业。

事实上,计算机科学专业的学生在非计算机科学领域工作的经历与他们的非开发者同龄人正好相反——他们的相对收入溢价随着职业发展而上升。一个选择不从事该行业的计算机科学专业学生,起初的收入与其他相似的非计算机科学专业学生差不多,但最终的收入比他们高出近 20%。

好的,关于发生了什么已经够了。现在我们来看看为什么会发生这些。

人力资本也会贬值

想象一个简单的模型,工人选择他们的职业以最大化收入,而收入是他们自身技能或人力资本的衍生物。随着时间的推移,工人获得新技能,而由于时代变化,他们现有技能的价值会有所贬值。

一些具备更高能力的工人学习速度比其他人快,以更快的速度掌握技能。这些工人往往会最初进入高技能、快速变化的职业,从而最大化他们早期的职业收入。而表现不那么出色的工人则会进入低技能、变化较慢的职业。

在一个人力资本永不贬值的世界里,我们可以想象像软件开发者这样的高技能个体将保持相对的人力资本(和收入)优势,导致薪资持续增长和稳定的相对溢价:

但是,如果人力资本随着时间的推移而贬值,并且在像软件开发这样的快速变化领域中贬值的速度更快,那么开发者的初始优势将随着时间的推移而减弱,从而缩小与非开发者之间的差距:

这个简单模型帮助解释我们在数据中看到的内容——随着有效人力资本差距的缩小,软件工程的收入优势消失。

应用专业如计算机科学、工程和商业教授特定的技能,这些技能随着新技能逐渐引入职场而变得不那么有价值。

软件开发中的具体技能很快就会过时。编程语言和开发框架会变得不再流行。Hadoop 在某一年很火,下一年就成了过时的新闻。就像一辆快速且昂贵的汽车,在城市中行驶后迅速贬值,软件工程师的技能和人力资本如果没有持续且昂贵的维护,就会迅速衰退。

直观地说,高淘汰率的职业要求工人每年学习许多新任务,这减少了学习收益并降低了经验的回报。

快速学习者是快速辍学者

打击并没有停止。具有讽刺意味的是,学习最快的人也是辍学最快的人。

要理解原因,请回想一下我们刚才概述的模型。快速学习者比他们的慢速同龄人更快地积累人力资本,这意味着当某些技能或能力失宠时,他们损失最大。事实上,在技能变化率低的工作中,成为快速学习者的回报更高,因为学习的成果可以随着时间的推移而积累,而不是逐渐失去相关性。

高能力的员工在所有工作中都是更快的学习者。然而,能力的相对回报在变化较少的职业中更高,因为学习的收益会累积。

换句话说,在快速变化的领域工作的机会成本对最优秀的学习者来说是最高的。这给人们带来了巨大的压力,促使他们放弃软件工程和其他快速变化的职业,转向更稳定的角色和行业。

研究人员通过将 STEM 工作状态与多个其他变量进行回归来展示这一点,包括年龄与武装部队资格测试(AFQT)得分之间的交互作用,这是一个常见的认知能力衡量标准。系数为负且具有统计显著性,这意味着在任何给定年龄从事 STEM 工作的相对概率随着认知能力的提高而下降(下方的第 1 列和第 2 列):

结果表明,认知能力高于平均水平一个标准差的工人在 23 岁时更有可能从事 STEM 工作,增加了 4.9 个百分点,但到 34 岁时在 STEM 职位工作的可能性仅增加了 1.6 个百分点。

事实上,到 40 岁时,回归分析预测具有更高认知能力的工人比具有较低认知能力的工人更不可能从事 STEM 工作。

简单来说,具有更高认知能力的专业人士更早、更快地退出 STEM 职业

… STEM 专业的学生在武装部队资格测试(AFQT)上的得分更高——这是一种广泛使用的学术能力代理指标——更常在年轻时离开 STEM 职业。

暗示:扩大软件工程人才库比你想的要难

我想强调两点:

首先——软件开发存在人员流动问题。

增加软件开发人员的供应并非易事,因为该领域已经面临高水平的开发人员流失和离职,如果该领域进一步扩大,这种情况只会加剧。更大的软件开发劳动力市场可能会压低工资,进一步鼓励更多开发人员转行,尤其是那些职业生涯已过中期的开发人员。在收入曲线的平坦部分,继续作为开发人员的动力充其量是微弱的。

第二 — 软件开发也存在选择问题。

最高能力、学习速度最快的人随着时间的推移不成比例地离开这个领域。他们有多种其他方式可以盈利地利用他们的智力和技能。软件开发带来了严重的机会成本。再说一次,这很讽刺,因为人们通常会期望最优秀的人留下,而最差的人离开,但这并不是我们在数据中看到的情况。随着任何特定群体的成熟,软件开发人才库的组成向较低的认知能力倾斜。

综合来看,这些观点表明,软件开发可能注定会面临长期的劳动力短缺,除非变革的步伐足够放缓。

… 快速的技术变革可能导致技术技能的短暂有效期。技术特定技能与通用技能之间的权衡是政策制定者和高校在培养当今工人时,同时也为下一代培养技能时需要考虑的重要因素。

总之,我强调:高技能的人在长期内更倾向于选择高度稳定的职业。这让他们的相对能力和人力资本优势随着时间的推移而复合。技能的快速退化不断拉平竞争环境,阻止最优秀的人脱颖而出。在这种情况下,提前退出比赛比被卷入混战更有意义。

感谢 David Deming、Kadeem Noray,以及本论文大部分内容来源的研究作者。

原文作者为 Nnamdi Iregbulem,内容经 ONES 翻译整理