本文重点
- 这次 Go 开发者调查,共计收到回复 11840 份。大多数回复与前几年一致。例如,92%的受访者对Go的满意度仍然很高,75%的受访者在工作中使用 Go。
- 今年,我们随机抽取了一些使用 Go VS Code 插件的参与者,这使得调查对象发生了一些变化。
- 缺少关键的库、语言特性和基础设施是使用Go语言最常见的障碍(注意:这个调查是在 Go 1.18 发布泛型之前进行的,泛型是一直以来报告最多的缺失特性)。
- 受访者希望优先改进调试和依赖关系管理。
- 使用模块时最大的挑战是版本控制、使用私有库和多模块工作流(注意:本次调查是在 Go 1.18 发布之前进行的,该版本引入了解决这些问题的工作空间)。
- 81%的受访者对Go项目的长期发展方向有信心。
收到了哪些人的反馈?
调查的人口统计学特征每年都相当稳定(见2020年的结果)。与往年一样,Go 主要用于科技行业。70%的受访者是软件开发人员,少数是 IT 或 DevOps 人员,76%的受访者表示他们在工作中使用 Go 编程。
2021 年一些新的统计学特征:
- 大多数受访者将他们的组织描述为企业(enterprise )或中小型企业,约四分之一的人将他们的组织描述为初创企业。咨询机构和公共机构则少得多。
- 绝大多数受访者在少于 10 人的团队中工作。
- 超过一半(55%)的受访者每天在工作中使用 Go。受访者较少在工作之外使用 Go。
性别认同
我们在调查中加入了性别认同,因为那可以让我们知道结果代表谁,并增加一个衡量社区包容性的维度。Go 团队很重视多样性和包容性,不仅因为这是正确的事情,还因为多样化的声音有助于我们做出更好的决策。今年,我们重新表述了性别认同问题,使其更有包容性。女性认同比例与前些年大致相同(2%)。在随机抽样组中也是如此,表明这不仅仅是由于抽样。
辅助技术
今年,我们再次发现,约 8%的受访者正在使用某种形式的辅助技术。大多数是为了在 Go 相关的网站或其代码编辑器上获得对比度更高的主题, 并增加字体大小;我们计划在今年晚些时候根据网站反馈采取行动。我们在为 Go 生态系统做贡献时应该牢记这些可访问性需求。
进一步了解 Go 采用方面的挑战
今年,针对一些没有采用 Go 的实际案例,为了了解原因,我们修改了问题。首先,我们询问受访者去年是否对使用 Go 之外的其他语言进行了评估。44%的受访者表示,他们评估过切换到 Go,或者从 Go 切换到其他语言,或者采用 Go(之前没有确定语言)。80%的评估主要是出于商业原因。
我们预计,Go 最常见的用例将是在那些评估 Go 的人中最常见的预期用途。到目前为止,API/RPC 服务是最常见的用途,但令人惊讶的是,数据处理是第二常见的用途。
在对 Go 做过评估的受访者中,75%的人最终使用了 Go。(当然,由于几乎所有的调查对象都使用 Go,所以我们可能没有收到评估过但最终决定不使用 Go 的开发人员的反馈。)
对于那些评估过 Go 但没有使用的人,我们接着问他们,是什么挑战阻止了他们使用 Go,哪些是主要障碍。
我们从这些结果中得出的结论支持了之前的发现,即特性缺失和缺乏生态系统/库支持是采用 Go 的最大技术障碍。
我们进一步询问了受访者缺少哪些特性或库,发现泛型是最常见的关键缺失特性——预计在 Go 1.18 引入泛型后,这将不再是一个障碍。第二个最常见的缺失特性与 Go 的类型系统有关。我们想在进行其他更改之前看看,泛型的引入如何影响或解决了 Go 类型系统的底层需求。现在,我们将收集关于这些需求上下文的更多信息,并可能在未来探索满足这些需求的不同方法,例如通过工具、库或对类型系统的修改。
至于缺少的库,对于增加哪些库可以消除大部分想要采用 Go 的人的障碍,目前还没有明确的共识,还需要进一步的探索。
那么,当受访者没有选择 Go 时,他们是用什么代替的呢?
Rust、Python 和 Java 是最常见的选择。Rust和Go的功能集互补,所以当 Go 不能满足项目的功能需求时,Rust 可能是一个很好的选择。使用 Python 的主要原因是 Go 缺少库和基础设施支持,而 Python 庞大的包生态系统可能会增加切换到 Go 的难度。类似地,使用 Java 来替代 Go 的最常见的原因是 Go 缺少一些特性,而 1.18 版本中引入的泛型可能会缓解这种情况。
Go 的使用满意度和相关工作优先级
让我们看看 Go 做得好的地方和可以改进的地方。
与去年一样,92%的受访者表示他们在过去的一年里对 Go 非常满意或有些满意。
社区态度的逐年趋势出现了微小的波动。那些使用 Go 不到 3 个月的人往往不太同意这些说法。越来越多的受访者发现,Go 对他们公司的成功至关重要。
相关工作优先级
过去几年,我们要求受访者对特定领域的满意度以及这些领域对他们的重要性进行评分;我们使用这些信息来识别对受访者来说很重要但他们不满意的领域。然而,这些领域中的大多数在重要性和满意度方面只显示出微小的差异。
今年,我们提出了一个新问题,探索以其他方式对具体领域的工作进行优先级排序。“假设你有 10 个 GopherCoin 用来从以下方面改进 Go。你会怎么分配你的币?”得币最多的两个领域是依赖管理(使用模块)和 Bug 诊断。2022 年,我们将在这两个领域投入资源。
模块使用方面的挑战
在与模块相关的挑战中,最常见的是跨多个模块工作(19%的受访者),其次是关于版本控制(包括对提交到稳定的 v1 API 感到不安)。关于版本控制,9%的回复讨论了版本管理或更新依赖。排名前 5 的挑战还有私有库(特别是使用 GitLab 认证)、记住不同的go mod命令以及理解它们的错误信息。
Go 语言学习
今年,我们采用了一个新的结构来探索不同经验层次的 Go 开发人员的相对生产力。绝大多数受访者(88%)认可他们经常能达到高水平的生产力,85%的人认可他们在用 Go 编码时经常能达到“心流状态”。随着 Go 语言编程经验的增加,认可的比例也会增加。
我们应该从哪个方面改进最佳实践文档?
一半的受访者希望在性能优化和项目目录结构方面获得更多有关最佳实践的指导。不出所料,尽管两组排名靠前的领域一致,但新手(使用 Go 不到一年)比经验丰富的老手需要的指导更多。值得注意的是,与经验更为丰富的老手相比,新手需要更多的并发指导。
开发人员如何学习一门新语言?
大约一半的受访者在工作中学习新语言,但几乎同样多的人(45%)在学校或工作之外学习。回复最多的学习方式是(90%)独自学习。在那些回复说在工作中学习的人中(可能有机会参与团体学习),84%的人是独自学习,而不是参与团体学习。
许多顶级资源都强调了良好文档的重要性,但实时指导对语言学习来说也特别有用。
开发工具和实践
与前几年一样,绝大多数受访者表示它们是在 Linux(63%)和 macOS(55%)系统上使用 Go。随着时间的推移,主要在 Linux 上开发的受访者比例似乎有轻微下降的趋势。
目标平台
超过 90%的受访者以 Linux 为目标平台。尽管在 macOS 上开发的受访者比 Windows 上的多,但他们更多的是部署到 Windows,而不是 macOS。
Fuzzing 测试
大多数受访者不熟悉 Fuzzing,或者认为自己还是个 Fuzzing 新手。基于这一发现,我们计划:(1)确保 Go Fuzzing 的文档清楚阐释了相关概念及具体细节;(2)设计可执行的输出和错误信息,帮助刚接触 Fuzzing 的开发人员成功应用。
云计算
Go 是在现代分布式计算的基础上设计出来的,我们希望继续改善使用 Go 构建云服务的开发体验。今年,在全球三大云服务提供商(亚马逊云科技、谷歌云平台和微软 Azure)部署 Go 程序的受访者比例保持不变,而在本地或公司自有服务器上部署的比例继续下降。
在部署到 AWS 的受访者中,部署到托管 Kubernetes 平台的人数有所增加,在目前向三大云提供商部署的受访者中占 35%。在所有这些云提供商那里,在虚拟机上部署 Go 程序的用户比例都有所下降。
今年有哪些变化?
去年,我们引入了一个模块化调查设计,以便可以在不延长调查的情况下问更多的问题。今年,我们沿用了模块化设计,不过有些问题去掉了,也增加或修改了一些问题。没有受访者看到调查中的所有问题。此外,有些问题的样本量可能要小很多,因为它们是根据前一个问题有选择性地提出的。
在今年的调查中,最大的变化是我们招募参与者的方式。前几年,我们通过 Go 博客宣布了这项调查,并在 Twitter、Reddit 或 Hacker News 等各种社交渠道上发布。今年,除了传统的渠道之外,我们还使用 VS Code Go 插件随机选择用户,向他们显示一条提示信息,询问他们是否愿意参与调查。这形成了一个随机样本,我们用它与来自传统渠道的自我选择的受访者进行对比,并帮助识别自我选择偏差的潜在影响。
将近三分之一的受访者是通过这种方式获得的,他们有可能对我们今年看到的回复产生重大的影响。我们看到,这两组人之间的一些主要区别是:
Go 开发人员增加
在随机抽取的样本中,新手(使用 Go 不到一年的人)比例更高。这可能是因为新手参与 Go 生态系统或社交渠道还比较少,所以他们更有可能在 IDE 中看到调查信息,而不是通过其他途径。不管什么原因,能听到更多 Go 界人士的意见是件好事。
VS Code 用户增加
一点也不奇怪,从 VS Code 插件获得信息并参与调查的受访者中,91%的人喜欢使用 VS Code 进行 Go 编程。因此我们看到,在编辑器偏好方面,VS Code 占比要高得多。排除随机样本后,结果与去年就没有统计学上的差异了,所以我们知道,这是我们样本变化的结果,而不是整体偏好。同样,VS Code 用户也比其他受访者更倾向于在 Windows 上开发,所以我们看到,今年对 Windows 的偏好略有增加。我们还看到,在 VS Code 的使用人群中,某些开发技术的使用也有轻微的变化。
参与途径不同
随机抽取的受访者不太可能将 Go 博客等社交渠道作为回答相关问题的首要途径,因此,他们也就不太可能在这些渠道上看到调查信息。
小结
感谢你和我们一起回顾 2021 年 Go 开发者调查结果。重申一下本次调查的一些关键收获:
- 大部分指标同比保持稳定,大部分变化是因为样本的变化。
- 对 Go 的满意度仍然很高!
- 四分之三的受访者在工作中使用 Go,许多人每天都在使用 Go,所以帮你完成工作是我们的首要任务。
- 我们将优先考虑改进调试和依赖管理工作流。
- 我们将继续努力,使 Go 成为适合各类 Go 开发人员的包容性社区。
了解开发者的体验和挑战有助于我们评估自己的进展,并指导 Go 的未来发展。再次感谢所有为本次调查做出贡献的人——没有你们,我们不可能做到这一点。希望明年还可以见到你!