当逃生路线变成收费公路:透视开发者的编程语言迁移路径
TL;DR:本文分享了 2025 年开发者生态系统调查中关于语言迁移的发现。总体而言,项目需求仍然是开发者切换语言最常见的原因。但其中有一个例外:Kotlin。人们转向 Kotlin 不是因为不得不转,而是因为使用 Kotlin 的体验确实更好——它带来了更出色的开发体验和更现代的语言特性。C 语言的流失率高得惊人,Java 开发者则倾向于转向 Python 和 TypeScript。HTML/CSS 开发者学习 JavaScript 是为了改善就业机会,而 JavaScript 开发者出于同样的原因,几乎会转向其他所有语言。
编程语言的历史,在某种程度上就是一部“逃离”的历史
艾达·洛夫莱斯(Ada Lovelace)为一种当时尚不能实际运行的机器编写程序。一个世纪后,程序员们面对的是布满开关、打孔卡和原始数值指令的机器。然后汇编语言出现了,软件史上的第一次伟大交换也随之而来:放弃一点点与机器的亲密,换来一点点人类思维的空间。但历史不会停滞。随着新语言的出现和语境的变化,既有语言中的一些方面开始成为阻碍。
有一种语言已经抽象到如此高的程度,以至于它在机器物理现实中的效率开始无法维持。与此同时,快速发展的物联网意味着程序现在必须运行在咖啡机上,而这里的“运行”不再是比喻。有些地方缺少开发速度,有些地方缺少安全性。
我们逃离汇编进入 C,逃离 C 进入托管运行时,逃离仪式感十足的企业级 Java 进入 Kotlin,逃离动态语言的自由进入 TypeScript,逃离不安全的系统代码进入 Rust,逃离笨重的框架进入更轻量的云原生工具。乍看之下,所有迁移通道似乎都很清晰。但这与现实吻合吗?
相当多的材料,都以某种方式衡量编程语言随时间的流行度变化。但似乎还没有人真正从更宏观的角度观察程序员如何在语言之间流动——不是从软件开发的全球趋势出发,而是从个人路径出发。
对于 JetBrains 来说,我们更想从程序员视角理解正在发生的事情,而不是从编程史学家或职业顾问的视角。这也是我们最看重的视角。本着这一精神,我们在设计“State of Developer Ecosystem”调查时,目标就是揭示真实程序员的路径。以下是我们在 2025 年的发现。
首先,我们必须承认,语言之间的路径几乎可以是任何样子。没错,最常见的路线发生在主流语言之间:从 Python 到 Java 再回到 Python,按绝对人数计算,Java 到 Kotlin 位列第三。但人们的迁移方向遍布所有可能的方向。
但我们已经有点超前了。让我们一步一步来。
我们之前做了什么,2025 年又得到了什么
从开发者生态系统调查开始以来,我们一直使用这样的问题:“你计划在未来 12 个月内采用或迁移到其他语言吗?如果是,是哪些?”但我们很快发现,这并不是预测未来语言迁移的好指标。计划尝试 Rust 或从 Java 切换到 Kotlin 是一回事;但即使对于非常常见的迁移,真正付诸实践的开发者人数也远低于有计划的人数。比如,即使我们维护旧 Java 8 代码库遇到问题,也不意味着我们真的会离开它。
因此,去年我们新增了一组关于受访者既往编程语言经验的问题。我们决定通过“12 个月前你的主要编程语言是什么?”以及其他相关问题,来评估过去一年中的实际迁移。本报告基于我们收集的 8,837 份回答,讨论这些问题以及整个编程语言版图的现状。
作为参考,以下术语对应相应问题的回答:
- 使用过的语言(Used language)——“在过去 12 个月中,你使用过哪些编程语言?”
- 主要语言(Primary language)——“你的主要编程语言是什么?(最多 3 种)”
- 主语言(Main language)——“你的主语言是什么?”
[LOADING...]
这张图表基于“在过去 12 个月中,你使用过哪些编程语言?”这一问题的回答。Java 和 Kotlin 份额的上升很可能是样本变化的结果,而不是真实趋势。主要快速上升的语言是 TypeScript 和 Rust,正如我们在 2024 年开发者生态系统信息图 中所描述的那样。我们还预测 Python、Go 和 Lua 会有所增长,但实际上只有 Go 出现了增长。
JetBrains 语言前景指数(Language Promise Index)
[LOADING...]
语言前景指数基于我们所掌握的关于正向或负向迁移动态稳定性的数据,以及希望学习该语言的人数,以任意单位追踪语言的迁移前景。Lua 过去是该类别中的顶级语言之一,但它的增长显然已经达到了某个天花板,不再是领先者。
TypeScript、Rust、Python 和 Go 仍然具有很大的增长潜力。我们预计,很多人会将自己的主语言从 JavaScript 改为 TypeScript,同时继续将 JS 作为第二语言使用。
[LOADING...]
如你所见,尽管 JavaScript 按整体使用量来说是最流行的语言,但它只是 6% 软件开发者的主语言,而 Java 作为主语言的受欢迎程度要高得多。
不幸的是,对于大多数编程语言,我们没有足够的回答,因此下面的表格只包括最流行的语言。
[LOADING...]
100% 代表所有报告称一年前将该语言作为主语言的受访者。
忠诚者(Loyals)+ 流失者(Churners)= 100%。
净增长(Net Growth)= 新加入者(Newcomers)+ 切换者(Switchers)– 流失者(Churners)。
新加入者——一年前未使用任何编程语言,但今年报告使用了该语言的受访者。
切换者——一年前使用另一种主语言,之后切换为该语言的受访者。
忠诚者——去年和今年都继续使用同一主语言的受访者。
流失者——一年前将该语言作为主语言,但此后切换为其他语言的受访者。
令人惊讶的是,C 的保持率最低。去年说 C 是其主语言的受访者中,约有一半已经切换到其他语言。这有点奇怪。最初,我们假设这部分流动可能主要是通过教育学习 C、随后又转向其他语言的学生。然而,经验水平的影响很小。放弃 C 的人中,有一半选择“我想学习一门新语言”作为改变的原因,这一比例高于其他语言的切换者——后者大多选择“我正在做的项目需要使用新语言”。
但是,我们去年没有提出这些问题,而且根据与前一年数据的份额比较,我们并没有看到 C 出现这么大的流失(今年作为主语言的比例为 2.1%,去年为 2.0%)。不过,这样的流失率也许能很好地预测未来的变化。
开发者为什么离开——又去了哪里
首先,我们必须说明,我们并没有关于所有流失者的数据——退休或转行的开发者通常不会回答我们的开发者调查。尽管如此,我们仍然有足够的信息来得出一些关于人们为什么决定从一种语言切换到另一种语言的结论。
[LOADING...]
注意:C、Kotlin 和 PHP 的样本量非常小(不足 100)。
从这些数据中可以发现:
- 项目需求是切换语言最常见的原因。
- 如前所述,对于 C 语言,“我想学习一门新语言”和“更现代的语言特性”是非常常见的切换原因,这可能表明开发者普遍不满,以及这门语言正在老化。
- 对于 JavaScript,人们离开的原因往往是“更好的就业市场机会”。
- 性能和可扩展性限制常常是从 PHP 切换的原因。
- Kotlin 流失者中有 18% 选择了“其他”原因。根据他们的回答,他们正在换公司,或者在业余爱好与专业使用之间切换。
以下表格的行和列都列有相同的编程语言,需要额外说明。每个表都描绘了受访者主语言的转变。在第一个表中,列按去年对某语言的回答划分,行显示受访者已迁移到的语言。反过来,第二个表追踪新语言用户的来源,列按受访者当前的主语言划分,行显示他们之前的回答。每列总计为 100%,因为它在一年内追踪的是同一人群。
这些表格展示的是从把一种语言视为“主语言”到把另一种语言视为“主语言”的转变。这并不意味着人们完全不再使用被“抛弃”的语言,只是意味着它不再是他们的主语言。
[LOADING...]
该表根据受访者之前的语言显示他们的去向。Python 是除 C(其用户更倾向于转向 Java 和 C++)和 TypeScript(最热门的目标语言是 Java、JavaScript 和 C#)以外所有语言的主要切换目的地。
开发者为什么采用——又来自哪里
让我们从人们迁移到的语言这个反向视角来看。
[LOADING...]
从这些数据中可以发现:
- 令人惊讶的是,JavaScript 既是人们为了更好的就业市场机会而离开的主要语言,也是人们为了同样原因迁入的语言。但这些流动并不相同:JavaScript 增长的主要来源之一是 HTML/CSS。所以,这种模式看起来有点像传送带:HTML → JavaScript → TypeScript。
- 项目需求是切换到 C# 和 C++ 时非常常见的原因,说明许多开发者仅仅因为不得不这样做才切换到这些语言。
- 人们转向 Kotlin 不是因为不得不,而是因为它提供了更好的开发体验和更现代的语言特性。
- 性能和可扩展性是 Go 的主要吸引力,而生态和库支持对 Python 的吸引力更大。
乍看之下,下面的表格可能和上面那张主语言流失表很像。但实际上,它们完全不同,含义也不一样。
在这里,受访者在回答问题时视为自己主语言的语言被计为 100%。相应地,对角线显示了所谓的持续率(continuity rate):现在将该语言作为主语言并且一年前也将其作为主语言的人所占比例。假设我们有 150 名受访者。其中 100 人说他们今年使用某种语言作为主语言,而 125 人说他们去年使用它作为主语言。75 人在一年前和调查时都使用这种语言作为主语言。
在这种情况下,保持率(retention rate)是 75%,而持续率是 60%。需要注意的是,其余的人并不一定是这门语言的“新用户”。他们很可能以前就使用过这种语言,只是没有把它作为主语言。
[LOADING...]
就增长来源而言,Python 是 C、C#、C++、Go、Java 和 JavaScript 的主要来源,这并不奇怪,因为它是最流行的语言之一。
对于 Kotlin,主要增长来源是 Java;而对于 PHP 和 TypeScript,主要增长来源是 JavaScript。
对于 Python 本身,主要增长来源是 Java。
结论
通过关注实际迁移而不是计划,我们从意图转向行动——不是看开发者说了什么,而是看他们做了什么。生态系统数据不再是一张快照,而开始看起来像一张流动地图。
项目需求仍然是最大的推动力。驱动许多切换的是必要性,而非选择,但并非全部切换都是如此。有些语言在特定工作上取胜,有些则靠性能或生态取胜。还有很多开发者是按链条迁移的:从 HTML/CSS 到 JavaScript,再继续前进——这是一条技能传送带,每一步都会开启下一步。
流失讲述了一个更清晰的故事。C 语言的人才流失比预期更快,即使它的总体数字看起来仍然稳定。Java 仍然是一个枢纽,但其外流主要流向 Python 和 TypeScript,而不是 Kotlin。Python 则像一个“无所不包”的目的地。TypeScript 和 Rust 看起来仍然处于前沿。
Kotlin,我们自己的语言,玩的是一场不同的游戏——而且玩得很好。开发者不是因为不得不来,而是因为想来;他们被更简洁的语法、更少的粗糙边缘,以及一种感觉更好的开发体验所吸引。它靠“拉力”而不是“推力”取胜。然而,来自 Java 的流入比预期要弱,甚至还有一些开发者会切回去。
最终浮现的图景很简单:推力、拉力与漂移。借助这些新数据,我们不仅看到哪些语言在增长或萎缩,还看到这一切是如何发生的——哪些语言顺应潮流,哪些语言必须逆流而上。
让我们看看 DevEco'26 会揭示什么。