本文作者:icy

Golang-Go 开发者调查 2023 年第一季度结果

icy 2023-07-01 1060 抢沙发
Golang-Go 开发者调查 2023 年第一季度结果 摘要: 感谢受访者为我们带来这些见解!我们很高兴与您分享 2023 年 1 月版的结果 进行开发者调查。  感谢 5,844 名受访者与我们分享了如何 他们正在使用 Go...

感谢受访者为我们带来这些见解!

我们很高兴与您分享 2023 年 1 月版的结果 进行开发者调查。  感谢 5,844 名受访者与我们分享了如何 他们正在使用 Go、他们在使用 Go 时面临的最大挑战以及他们的最大挑战 未来改进的优先事项。  这些结果帮助 Go 团队集中精力 在对社区最重要的领域所做的努力,我们希望这些见解 还可以帮助告知其他为 Go 生态系统做出贡献和支持的人。

主要发现

  • Go 新手开发者对 Web 开发感兴趣 。   我们推出了一个  今年根据自我鉴定的经验水平进行了新的细分。  新手表达了与其他经验水平的一些有趣的差异。  最值得注意的是,他们对使用 Go 进行 Web 开发表现出了更大的兴趣。

  • 错误处理和学习是受访者面临的最大挑战 。  从历史上看,缺乏泛型是使用 Go 的最大挑战,但是  自从引入泛型以来,我们已经看到了关于泛型的评论  衰退。   关于错误处理的评论(关于可读性和  冗长)和困难学习最佳实践现在是最常见的  报告了挑战。

  • 优化指南是改进 Go 最有价值的方法  性能 。   当被问及他们将如何在各种方面花费资源时  Go 编译和运行时的改进,受访者在以下方面花费最多  优化指南而不是具体的性能改进,  证明该领域的文档有多少价值。

  • 管理依赖关系和版本控制是开放的最大挑战  来源 Go 模块维护者 。   开源模块维护者面临的问题  保持其依赖项最新并避免中断方面的挑战  由于版本控制和重大更改。   这是我们将要探索的一个领域  进一步帮助维护者提供稳定健康的生态系统。

如何阅读这些结果

在这篇文章中,我们使用调查回复图表来提供支持 我们的研究结果的证据。  所有这些图表都使用类似的格式。  标题 这正是调查受访者看到的问题。  除非另有说明, 问题为多项选择,参与者只能选择一个 响应选择;  每个图表的副标题都会告诉您该问题是否允许 多个响应选项或者是一个开放式文本框而不是多个 选择题。  对于开放式文本响应图表,Go 团队成员 阅读所有回复并手动分类。  许多开放式问题 引起了各种各样的反应;  为了保持图表大小合理,我们 将它们浓缩为前 10-15 个主题,其他主题全部分组 在“其他”下。  如果适用,我们还添加了“无”类别。

为了帮助读者了解每项发现背后的证据的重要性,我们  包括显示响应 95% 置信区间的误差线;   更窄  条形表示信心增加。   有时有两个或多个响应  重叠误差线,这意味着这些响应的相对顺序是  没有统计意义(即,响应有效相关)。   这  每个图表的右下角显示了回答如下的人数  包含在图表中,格式为“ n = [受访者数量] ”。

关于方法论的说明

大多数调查受访者“自行选择”通过访问参与调查 上的链接 Go 博客 通过 @golang  Twitter 或其他社交 Go 渠道。   那些人  不关注这些频道的人可能会 做出 与关注这些频道不同的反应  密切关注他们。   大约四分之一的受访者是随机抽样的,  意味着他们在 VS Code 中看到提示后回复了调查  (2023 年 1 月 18 日至 2 月 8 日期间使用 VS Code Go 插件的每个人都有 10%  收到此随机提示的机会)。   这个随机抽样的群体可以帮助我们  将这些发现推广到更大的 Go 开发者社区。   最多  调查问题显示这些群体之间没有显着差异,但  少数有重要差异的案例,读者会看到图表  将答案分为“随机样本”和“自选”组。

仔细观察不同的受访者群体

相比没有显着变化 我们的受访者人口统计数据与上次  调查 。   与之前一致  循环中,Go 主要用于科技行业,大约 80%  受访者表示,他们在工作中使用 Go 进行编程。   总体而言,调查受访者  在过去的一年里,人们对 Go 比较满意,92% 的人表示他们很满意  有点或非常满意。 

where.svg

csat.svg

与其他受访者相比,我们的受访者花费大量时间使用 Go 进行编程 语言。  大约三分之一的受访者甚至维护开源 Go 模块。  我们认识到我们的调查受众是由那些 成功采用 Go、经常使用 Go、并且对 Go 的使用大多感到满意。  到 确定满足社区需求方面的潜在差距,我们着眼于不同的 受访者的子群体,了解他们如何以不同的方式使用 Go,或者 有不同的优先级。  例如,今年我们研究了反应如何 不同示例源(即 Go 博客或通过 VS)之间存在差异 代码插件)、不同的工作角色、组织规模和 Go 级别 经验。  最有趣的差异在于经验水平之间。

新手受访者的见解 

go_exp.svg

之前,我们使用了受访者使用 Go 的时间(以月/年为单位) 作为代理来深入了解不同经验水平之间的结果如何变化。 今年我们尝试了一个新的细分问题:“你的 Go 的经验水平?”,看看自我认同是否可能更重要 检验围棋经验的有用方法,而不是把不同的时间间隔放在一起 的时间。  由于“新手”或“专家”等分类术语可能会有所不同 人与人之间,我们提供了描述,以帮助使这些桶更加 客观的。  选项是:

  • 意识:我知道 Go,但如果没有 Go,就无法编写简单的 Go 程序 协助

  • 新手:我可以用 Go 完成简单的编程项目,可能使用 协助

  • 中级:我可以用 Go 完成重要的编程项目 一些帮助

  • 高级:我可以在 Go 中完成重要的编程项目,而无需 协助

  • 专家:我可以提供指导、排除故障并回答相关问题 从其他工程师那里走 

exp_level.svg

我们发现受访者的使用时长之间存在中等相关性 (⍴ = .66) 一直在使用 Go 以及他们自我认定的经验水平。  这意味着 经验水平量表虽然与时间量表类似,但可以给我们一些 关于受访者因经历而有所不同的新见解。  例如, 受访者花在 Go 上写作的时间比例与 他们用其他语言写作的时间与 他们自我认定的经验水平与他们使用的时间相比 去。

在我们使用这种细分的分析中,我们通常排除意识 类别,因为他们不会被认为具有必要的经验 回答问题的人仅占受访者的 1% 左右。

新手受访者比经验丰富的受访者更有可能更喜欢 Windows

我们随机抽样的组中新手受访者的比例高于 自选群体,表明存在更多新地鼠 我们不太常听到这样的消息。  因为它们是通过采样 Go VS Code 插件,我们可能希望这个群体更喜欢 使用 VS Code 或在 Windows 上进行开发比其他经验水平更多。 虽然这是事实,但新手也更有可能在 Windows 上进行开发,而不是在 Windows 上进行开发。 其他经验水平,无论他们是否通过 VS 做出回应 代码插件。 

exp_level_s.svg

editor_self_select_exp.svg

os_dev_exp_s.svg

我们没有看到更高比例的原因可能有很多 经验水平较高的 Windows 用户。  例如,Windows 用户可能是 更有可能遇到困难并停止使用 Go,或者可能会 操作系统使用的更广泛趋势与 Go 无关。  无论如何,我们 在未来的入门研究中应该包括更多的 Windows 用户 与 Go 一起确保我们提供包容性的入职体验。

目前不同经验水平如何使用 Go(以及他们想要使用的其他领域) 

Golang-Go 开发者调查 2023 年第一季度结果

Golang-Go 开发者调查 2023 年第一季度结果

根据受访者目前使用 Go 的方式,经验丰富的 Gopher 倾向于 将 Go 用于更多类型的应用程序。  例如,普通专家 至少在四个领域使用过 Go,而普通新手仅在两个领域使用过 Go 地区。  这就是为什么新手和新手的比例存在很大差异的原因。 专家在每个用例中使用 Go。  前两个用途,API / RPC 服务和 然而,CLI 是所有经验级别的首要用例。

我们看到 GUI 和网站/Web 服务有更多有趣的趋势(返回 HTML)。  所有使用 Go 桌面/GUI 应用程序的经验水平大致相同 速度。  这向我们证明了对 GUI 的渴望不仅仅来自于新的 地鼠正在寻找一个有趣的入门项目,但从整个经验来看 光谱。

返回 HTML 的网站/服务也显示出类似的趋势。  一种解释可以 这是在某人的 Go 旅程早期的一个常见用例(因为它是 对于新手来说最常见的前 3 种),或者新手更有可能 在返回 HTML 的网站或 Web 服务上工作。  在后来的调查中,我们 询问受访者,“您在哪些领域(如果有的话)不使用 Go,但会使用 Go 最喜欢?”  尽管许多受访者 (29%) 表示他们已经使用 Go 无论他们想去哪里,扩展使用的最重要的两个领域是 GUI / 桌面和 AI / ML 应用程序。  这在各组中是一致的 组织规模和工作角色不同,但经验水平不同。  这 新手更愿意使用 Go 的第一个领域是网站/网络 返回 HTML 的服务。 

app_opportunities_exp.svg

在开放文本问题中,29 名受访者中有 12 名表示愿意 使用 Go 访问返回 HTML 的网站/网络服务,表示它们被阻止 因为其他语言有框架可以更好地支持这个用例。  它 可能是更有经验的 Go 开发人员不会尝试或期望将 Go 用于 当其他语言已经有满足这些要求的框架时,这个用例 需要。  正如一位受访者所说,

“通常使用其他语言(例如 PHP 或 红宝石。  部分原因是这些语言中存在优秀的框架。”

新手对 Web 开发感兴趣的另一个重要解释可能是 与他们对 JavaScript / TypeScript 的使用有关。  新手花费更多 他们用 JavaScript / TypeScript 编写的时间比更有经验的人多 受访者。  对网络的更高兴趣可能与以下因素有关 新手受访者目前正在使用其他语言,或者可以指出 对网络技术的普遍兴趣。  未来我们想了解更多 关于这个用例以及我们如何帮助新 Gophers 开始使用 Go 对他们最有用的领域。 

language_time_exp.svg

受访者面临一系列挑战

每个调查周期我们都会询问受访者他们最大的挑战是什么 使用Go。  从历史上看,缺乏仿制药是最常被引用的 挑战——例如,这是 2020 年最常见的回应,并提到 约 18% 的受访者表示。  自从引入泛型以来,错误 处理(12%)和学习/最佳实践/文档(11%)已经出现在 面对一长串问题,而不是任何单一问题变得越来越多 频繁。 

text_biggest_challenge.svg

为什么错误处理如此具有挑战性?

关于错误处理的反馈通常将问题描述为冗长。  上 从表面上看,这可能反映出编写重复的代码很无聊或者 恼人的。  然而,不仅仅是编写样板文件的烦恼,错误 处理也可能影响受访者的调试能力。

一位受访者简洁地说明了这个问题:

“错误处理会造成混乱,如果不这样做,很容易掩盖问题 正确(没有堆栈跟踪)”

努力学习最佳实践

“有效地使用 Go。  学习容易,掌握难。”

我们听说 Go 很容易学习, 之前的一项调查显示,超过  70% 的受访者认为  在第一年使用 Go 很有成效,但学习 Go 最佳实践  被认为是使用 Go 的最大挑战之一。   今年受访者  告诉我们围绕 代码结构的 最佳实践和 推荐的工具  而且图书馆 没有很好的文档记录,给初学者带来了挑战  团队保持代码一致。   学习编写惯用的 Go 可以  对于来自其他编程范式的人来说尤其具有挑战性。  对 Go 有更丰富经验的受访者证明,当开发人员  不要遵循编写惯用的 Go 的最佳实践,这会损害一致性  以及共享项目的质量。

模块维护人员面临的最大挑战

Go 模块维护者是 Go 社区的重要成员,帮助 发展并维持我们的包装生态系统的健康。  今年我们计划 与模块维护者进行研究,以确定支持的机会 包生态系统的稳定性和增长,并有助于提高 Go 在内部的采用率 组织。  为了为本研究提供信息,我们在调查中提出了一个问题 了解开源维护者当前面临的最大挑战。 

text_maintainer_challenge.svg

维护人员面临的最大挑战是保持依赖项最新并 版本控制方面的困难,包括避免、识别或了解 何时引入重大变更。  这些见解以及结果 未来的研究将有助于提供支持维护者保持不变的策略 Go生态系统稳定、安全。

部署 Go 代码时面临的最大挑战

今年我们询问受访者在部署 Go 时面临的最大挑战是什么 代码。  “易于部署”经常被认为是使用 Go 的一个原因,但我们 在最近的一项研究中收到了相互矛盾的反馈,促使我们 探索部署 Go 代码时的潜在问题。  在我们的开放文本回复中, 到目前为止,最常见的主题是与 cgo 交叉编译困难(16%), 对 WebAssembly 或 WASI 的支持远远落后于第二位 (7%)。 

text_deploy_challenge.svg

社区优先事项:受访者最想要什么

今年我们使用了之前调查中使用过的优先顺序问题 基于购买功能的优先级方法。  受访者给出了 10 “gophercoins”并要求将它们分发到他们想看到的区域 改进。  受访者被随机分配到三种可能的选择之一 问题,每个问题包含与工具、安全或相关的七个项目 编译器和运行时。  这种方法使我们能够询问与 每个重点领域,而不会给受访者带来三组负担 认知要求较高的优先顺序问题。

在练习结束时,我们给受访者一个开放的文本提示,让他们告诉我们 关于他们认为 Go 团队下一步的首要任务的任何领域 年,无论他们将硬币花在哪些物品上。  例如,如果一个 受访者被展示了安全部分,但他们并不太关心 关于安全,他们仍然有机会告诉我们,在公开场合 文本区域。

安全

我们选择这些项目来测试我们对相对重要性的假设 社区的安全实践。  这些是所描述的七项 致参与者:

  • pkg.go.dev 识别维护不善的软件包(例如, 对问题没有反应,无法更新其依赖项,仍然存在 长时间处于脆弱状态)

  • pkg.go.dev 识别进行重大 API 更改的软件包(即 需要在将这些软件包升级到更新版本时修复这些 API 的使用 版本)

  • 支持抑制 govulncheck 中的漏洞

  • 跟踪敏感数据如何流经 Go 程序的工具(检测 PII 泄漏)

  • 安全最佳实践指南(例如,如何选择和更新 依赖关系;  如何设置模糊测试、漏洞检查和线程 消毒剂;  如何使用加密货币)

  • 默认安全的 Web 和 SQL 库可帮助用户避免引入 Web 服务器代码中的漏洞

  • 符合 FIPS-140 的加密库 

    prioritization_security.svg

  • 获得最高资助的安全功能是 Web 和 SQL 库的安全 默认情况下是为了避免在 Web 服务器代码中引入漏洞,但是 前四个特征都与避免引入漏洞有关。 对安全默认值的渴望与之前的安全研究是一致的 这表明开发人员希望在安全性上“左移”:开发团队 通常没有时间或资源来解决安全问题,并且 因此,重视工具,减少将它们引入的可能性 第一名。  第二个最常见的项目是安全最佳实践指南, 强调最佳实践文档与新文档相比的高价值 向大多数受访者提供的工具或功能。

  • 工具

  • 我们在此问题中包含的项目受到 VS Code 反馈的启发 插件用户。  我们想知道哪些工具和 IDE 改进将是 对于可能使用其他 IDE 或编辑器的更广泛的受众来说最有帮助。

  • 更好的重构工具(例如,支持自动代码转换: 重命名、函数提取、API迁移等)

  • 更好地支持代码编辑器/IDE 中的测试(例如,健壮且 可扩展的测试资源管理器 UI、第 3 方测试框架、子测试支持、代码 覆盖范围)

  • 更好地支持在代码编辑器/IDE 中处理多个模块 (例如,编辑模块A和B,其中模块A依赖于模块B)

  • pkg.go.dev 中的依赖关系洞察(例如漏洞、重大更改、 记分卡)

  • 代码编辑器/IDE 中的依赖性洞察(例如,漏洞、破坏 变化、记分卡)

  • 支持使用新模块路径发布模块(例如,存储库所有权 不可触摸)

  • 支持查找实现接口的类型和已实现的接口 通过代码编辑器/IDE 中的类型 

  • prioritization_tooling.svg

条形图的位置
 受访者在工具上花费最多

资助最多的编辑器功能是 支持查找实现的类型  一个接口以及由类型 重构工具 实现的接口。   我们  还发现受访者使用地鼠币的方式存在有趣的差异  根据首选编辑器用法。   最值得注意的是,VS Code 用户花费了更多  gophercoins 在重构上比 GoLand 用户多,建议自动代码  目前,GoLand 中比 VS Code 更好地支持转换。

编译器和运行时

我们本节的关键问题是确定受访者是否想要 默认情况下更好的性能,更好的优化工具,或者只是更好的 了解如何编写高性能的 Go 代码。

  • 降低计算成本

  • 减少内存使用

  • 减少二进制大小

  • 减少构建时间

  • 更好的性能调试工具

  • 优化指南(如何提高性能并降低成本,涵盖 Go的实现和性能调试工具)

  • 交叉编译时更好地支持使用 cgo 

    prioritization_core.svg

到目前为止,该列表中资助最多的项目是优化指南。  这是 跨组织规模、工作角色和经验水平保持一致。  我们问 另一个问题是受访者是否担心资源成本。 大多数受访者 (55%) 表示他们没有任何成本担忧,但那些 对资源成本感到担忧,在以下方面花费了更多地鼠币(平均 2.0) 与没有这样做的人相比,减少了计算成本和内存成本。  然而,即使 那些担心资源成本的人仍然在 优化指南(平均1.9 gophercoins)。  这是一个强烈的信号 为 Go 开发人员理解和优化 Go 性能提供指导 目前比额外的编译器和运行时性能更有价值 改进。

结论

感谢您与我们一起审查我们第一位开发人员的结果 2023年调查!  了解开发人员的经验和挑战有助于我们 优先考虑如何最好地服务 Go 社区。  我们发现的一些要点 特别有用:

  • Go 新手开发者对 Web 开发的兴趣比 其他经验水平的受访者。  这是我们想要的一个领域 进一步探索以确保我们满足新的 Go 开发人员的需求。

  • 安全默认设置、安全和优化的最佳实践指南,以及 IDE 中更多的重构帮助将是对 社区。

  • 错误处理是社区的一个高优先级问题,并创建 冗长性和可调试性方面的挑战。  Go团队没有 目前要分享的公开提案,但正在继续探索选择方案 以改进错误处理。

  • 入职和学习最佳实践是面临的最大挑战之一 受访者并将成为未来研究的领域。

  • 对于 Go 模块维护者来说,保持依赖项是最新的、模块 版本控制以及识别或避免重大更改是最重要的 挑战。  帮助维护者提供稳定健康的生态系统是 进一步用户体验研究的另一个有趣的主题。

再次感谢所有对本次调查做出回应和贡献的人——我们 没有你我不可能做到这一点。  我们希望在今年晚些时候见到您  

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

分享

发表评论

快捷回复:

评论列表 (暂无评论,1060人围观)参与讨论

还没有评论,来说两句吧...