Go 博客
2021 年 Go 开发者调查结果
衷心感谢社区的积极响应!
2021 年,我们于 10 月 26 日至 11 月 16 日进行了 Go 开发者调查,共收到 11,840 份回复,创下了我们六年开展调查以来的最高参与人数!感谢您抽出宝贵时间,分享您使用 Go 的经验,为社区提供宝贵的见解。
亮点
- 大多数回复与往年一致。例如,Go 的满意度仍然很高,达到 92%,75% 的受访者在工作中使用 Go。
- 今年我们随机抽取了一些使用 Go VS Code 插件的参与者,这导致了受访者构成发生了一些变化。
- 缺少关键库、语言特性和基础设施是使用 Go 的最常见障碍。(注:本次调查在 Go 1.18 发布泛型之前进行,泛型是排名第一的缺失功能)
- 受访者希望优先改进调试和依赖管理。
- 使用模块时最大的挑战涉及版本控制、使用私有仓库和多模块工作流程。(注:本次调查在 Go 1.18 之前进行,Go 1.18 引入了工作区以解决许多这些问题)。
- 81% 的受访者对Go 项目的长期发展方向充满信心。
我们听取了谁的意见?
我们的用户画像多年来一直保持稳定(查看 2020 年结果)。与往年一致,Go 主要用于科技行业。70% 的受访者是软件开发者,少数在 IT 或 DevOps 领域工作,76% 的受访者表示他们在工作中使用 Go 进行编程。
2021 年的一些新用户画像
- 大多数受访者将其组织描述为企业或中小型企业,约四分之一将其组织描述为初创企业。咨询公司和公共机构则不太常见。
- 绝大多数受访者在不足十人的团队中工作。
- 超过一半 (55%) 的受访者每天在工作中使用 Go。受访者在工作之外使用 Go 的频率较低。
性别认同
我们在调查中询问性别认同,因为它能让我们了解调查结果代表的人群,并为衡量社区包容性增加一个维度。Go 团队重视多样性和包容性,不仅因为这是正确的做法,还因为不同的声音能帮助我们做出更好的决策。今年我们重新措辞了性别认同问题,以更好地包含其他性别身份。与往年一样,认为自己是女性的比例大致相同(2%)。随机抽样组也是如此,这表明这不仅仅是抽样造成的。
辅助技术
今年我们再次发现约 8% 的受访者正在使用某种形式的辅助技术。大多数挑战涉及对 Go 相关网站或其代码编辑器中更高对比度主题和更大字体大小的需求;我们计划在今年晚些时候根据网站反馈采取行动。这些无障碍需求是我们所有人在为 Go 生态系统贡献时都应该牢记的。
深入了解 Go 采用面临的挑战
今年我们修订了问题,以便针对实际未采用 Go 的情况及其原因。首先,我们询问受访者在去年是否曾将 Go 与其他语言进行过评估。43% 的受访者表示他们曾评估过切换到 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 的主要原因是缺少库和现有的基础设施支持,因此 Python 庞大的包生态系统可能使切换到 Go 变得困难。类似地,选择 Java 而非 Go 的最常见原因是 Go 缺少功能,这在 1.18 版本引入泛型后可能会得到缓解。
Go 满意度和优先级
让我们看看 Go 表现良好的方面以及可以改进的地方。
与去年一致,92% 的受访者表示过去一年中对使用 Go 非常满意或有些满意。
社区态度的年度趋势显示出轻微波动。使用 Go 不足 3 个月的人往往不太同意这些说法。受访者越来越认为 Go 对其公司的成功至关重要。
优先级
过去几年,我们要求受访者对特定领域进行满意度和重要性评分;我们利用这些信息来找出对受访者重要但他们不满意的领域。然而,这些领域中的大多数在重要性和满意度方面都只显示出微小差异。
今年我们引入了一个新问题,以探索在特定领域优先开展工作的替代方式。“假设您有 10 个 GopherCoin,用于改进使用 Go 的以下方面。您将如何分配您的 GopherCoin?” 两个获得显着更多 GopherCoin 的领域是依赖管理(使用模块)和诊断错误,这两个领域将在 2022 年投入资源进行改进。
使用模块时的挑战
最常见的模块相关挑战是跨多个模块工作(占受访者的 19%),其次是关于版本控制的评论(包括对提交稳定 v1 API 的担忧)。与版本控制相关的是,9% 的回复讨论了版本管理或更新依赖。排在前 5 位的其他挑战包括私有仓库(特别是 GitLab 的身份验证)以及记住不同的 go mod
命令并理解其错误消息。
学习 Go
今年我们采用了新的结构来探索不同 Go 经验水平之间的相对生产力。绝大多数受访者(88%)同意他们能够经常达到高水平的生产力,85% 同意他们在编写 Go 代码时通常能够达到心流状态。随着 Go 经验的增加,同意的比例也随之增加。
我们应该在哪些领域投入精力编写最佳实践文档?
一半的受访者希望在性能优化和项目目录结构方面获得更多最佳实践指导。不出所料,新 Go 用户(使用 Go 不足 1 年)比经验丰富的 Go 用户需要更多指导,尽管两类人群最关注的领域是一致的。值得注意的是,新 Go 用户在并发方面寻求的指导比经验丰富的 Go 用户更多。
开发者如何学习一门新语言?
约一半的受访者在工作中学习了一门新语言,但几乎同样多 (45%) 的人在学校或工作之外学习。受访者最常 (90%) 表示独自学习。在那些表示他们在工作中学习的人中,虽然可能存在集体学习的机会,但 84% 的人选择独自学习而不是集体学习。
许多顶级的学习资源都强调了良好文档的重要性,但现场教学作为语言学习的资源也显得尤为有用。
开发者工具和实践
与往年一样,绝大多数调查受访者表示在 Linux (63%) 和 macOS (55%) 系统上使用 Go。主要在 Linux 上进行开发的受访者比例似乎随着时间推移略有下降。
目标平台
超过 90% 的受访者以 Linux 为目标平台!尽管在 macOS 上开发的受访者多于 Windows,但他们部署到 Windows 的频率高于 macOS。
模糊测试
大多数受访者不熟悉模糊测试,或者仍然认为自己是模糊测试的新手。基于这一发现,我们计划 1) 确保 Go 的模糊测试文档除了 Go 中模糊测试的具体内容外,也解释模糊测试的概念,以及 2) 设计输出和错误消息使其具有可操作性,以便帮助模糊测试新手成功应用它。
云计算
Go 在设计时就考虑到了现代分布式计算,我们希望继续改进使用 Go 构建云服务的开发者体验。今年,将 Go 程序部署到全球三大云提供商(Amazon Web Services、Google Cloud Platform 和 Microsoft Azure)的受访者比例保持大致相同,而部署到自建或公司自有服务器的比例持续下降。
部署到 AWS 的受访者中,部署到托管 Kubernetes 平台的比例有所增加,现在在部署到三大云提供商任一提供商的用户中占 35%。所有这些云提供商都看到将 Go 程序部署到虚拟机的用户比例下降。
今年的变化
去年我们引入了模块化调查设计,以便在不延长调查时间的情况下提出更多问题。今年我们继续采用模块化设计,尽管有些问题被取消,有些则被添加或修改。没有受访者看到了调查中的所有问题。此外,某些问题的样本量可能小得多,因为它们是根据前一个问题选择性地提出的。
今年调查中最显著的变化在于我们招募参与者的方式。往年,我们通过 Go 博客宣布调查,并在 Twitter、Reddit 或 Hacker News 等各种社交渠道上被转载。今年,除了传统渠道,我们还利用 VS Code Go 插件随机选择用户显示一个提示,询问他们是否愿意参与调查。这创建了一个随机样本,我们用它来与来自传统渠道的自我选择受访者进行比较,并帮助识别自我选择偏差的潜在影响。
将近三分之一的受访者是通过这种方式获得的,因此他们的回答有可能对今年我们看到的整体回复产生显著影响。这两组之间的一些关键差异包括:
更多新 Go 用户
随机抽样组中新 Go 用户(使用 Go 不足一年)的比例更高。这可能是因为新 Go 用户与 Go 生态系统或社交渠道的联系较少,因此他们更有可能在 IDE 中看到调查广告,而不是通过其他方式发现。无论原因如何,很高兴能听到更广泛的 Go 社区的声音。
更多 VS Code 用户
毫不奇怪,通过 VS Code 插件参与调查的受访者中有 91% 在使用 Go 时更喜欢使用 VS Code。因此,今年我们看到 VS Code 的编辑器偏好显著更高。当我们排除随机样本时,结果与去年没有统计学上的差异,因此我们知道这是样本变化的结果,而不是整体偏好。同样,VS Code 用户也比其他受访者更有可能在 Windows 上进行开发,因此我们看到今年对 Windows 的偏好略有增加。我们还看到某些与 VS Code 编辑器使用相关的开发者技术的使用方式略有变化。
不同的资源
随机抽样组将 Go 博客等社交渠道评为回答 Go 相关问题的首选资源的比例较低,因此他们可能不太可能在这些渠道上看到调查广告。
结论
感谢您与我们一起回顾 2021 年开发者调查的结果!重申一下,一些主要收获是:
- 我们的多数年度指标保持稳定,大多数变化源于样本的变化。
- 对 Go 的满意度仍然很高!
- 四分之三的受访者在工作中使用 Go,许多人每天使用 Go,因此帮助您完成工作是我们的首要任务。
- 我们将优先改进调试和依赖管理工作流程。
- 我们将继续努力,使 Go 成为一个包容所有 Go 用户的社区。
了解开发者的经验和挑战有助于我们衡量进展并指导 Go 的未来。再次感谢所有为本次调查做出贡献的人——没有你们,我们不可能完成这项工作。希望明年再见!
下一篇文章:分享您关于使用 Go 开发的反馈
上一篇文章:何时使用泛型
博客索引