写点什么

2021 年度 Go 开发者调查

  • 2022-05-05
  • 本文字数:4028 字

    阅读完需:约 13 分钟

2021年度Go开发者调查

本文最初发布于 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 的未来发展。再次感谢所有为本次调查做出贡献的人——没有你们,我们不可能做到这一点。希望明年还可以见到你!

 

查看英文原文:Go Developer Survey 2021 Results

2022-05-05 18:212390

评论

发布
暂无评论
发现更多内容

语音识别技术的现状及发展趋势

来自四九城儿

语音识别技术:从离线到在线的转变

来自四九城儿

Spring Boot 中常见且必备的注解解析

Liam

Java 程序员 Spring Boot 后端 注解

一种提升SQL改写效率的方法

天翼云开发者社区

数据库

如何用装饰者模式代理final方法

程序员万金游

spring aop #java #程序员 #Spring #后端

前端首屏优化 | 提升首屏的 8 个很简单的手段

Yestodorrow

可观测性 网站性能

使用低代码平台提高生产力

高端章鱼哥

低代码平台 JNPF

如何利用Vert.x快速开发你的应用

Kevin_913

得物API元数据中心探索与思考

得物技术

API管理 元数据中心 自动解析

EOS系统合约链账户介绍

BSN研习社

阿里云易立:以云原生之力,实现大模型时代基础设施能力跃升 | KubeCon 主论坛分享

阿里巴巴云原生

阿里云 容器 云原生 KubeCON

KubeCon China 2023 | 华为ICT开源产业与生态发展团队参会精彩回顾

科技热闻

实用帖|打破常规,巧用分层地毯的8种方法!

Finovy Cloud

C4D

与创新者同行!Doris Summit Asia 2023 完整议程公开,首届线下峰会邀你报名!

SelectDB

大数据 数据分析 Doris 峰会 数据库、

基于Java开发的企业人力资源管理系统(招聘、绩效、考勤、酬薪管理)

金陵老街

三个要点,掌握Spring Boot单元测试

互联网工科生

Spring Boot 分层架构 单元测试 JUnit Mockito

什么是API商品数据接口?该怎么使用?

Noah

API 安全 API 文档 API 开发

长沙企业采购云管平台选哪家厂商?联系电话多少?

行云管家

云计算 云服务 云管理平台 云管平台

全面解读 SQL 优化 - 统计信息

KaiwuDB

sql 优化 KaiwuDB

Topaz Video AI for mac(视频增强和修复工具) 3.5.2完整激活版

mac

苹果mac Windows软件 Topaz Video AI 视频增强修复工具

一文带你走进 Linux 小工具 - tmux

KaiwuDB

Linux tmux KaiwuDB

[分组聚合]基于Lucene8进行多值字段分组聚合(多属性字段)

alexgaoyh

lucene Spring Boot 分组聚合 单字段 多属性

供应链透明度的代币开发

区块链软件开发推广运营

交易所开发 dapp开发 区块链开发 NFT开发

首单立减7元华为负一屏买电影票又便宜又快

最新动态

最强大的iOS应用源码保护工具:Ipa Guard,保护你的商业机密代码

雪奈椰子

华秋DFM新功能丨可焊性检查再次升级,抢先体验!

华秋电子

深圳华秋电子有限公司与共熵服务中心缔结战略合作伙伴关系

华秋电子

合作伙伴

支持信创系统的数据库审计系统有哪些?用哪家好?

行云管家

数据库 信创 数据安全 国产化 数据库审计

JAVA OOM异常最佳实践

Yestodorrow

Java 运维 监控 可观测性 系统性能

<em> 和 <strong> 标签的区别

Lee Chen

html 前端

一种通过延迟事务提升数据库性能的方法

天翼云开发者社区

数据库

2021年度Go开发者调查_开源_Alice Merrick_InfoQ精选文章