感谢受访者为我们带来这些见解!
我们很高兴与您分享 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% 的人表示他们很满意 有点或非常满意。
与其他受访者相比,我们的受访者花费大量时间使用 Go 进行编程 语言。 大约三分之一的受访者甚至维护开源 Go 模块。 我们认识到我们的调查受众是由那些 成功采用 Go、经常使用 Go、并且对 Go 的使用大多感到满意。 到 确定满足社区需求方面的潜在差距,我们着眼于不同的 受访者的子群体,了解他们如何以不同的方式使用 Go,或者 有不同的优先级。 例如,今年我们研究了反应如何 不同示例源(即 Go 博客或通过 VS)之间存在差异 代码插件)、不同的工作角色、组织规模和 Go 级别 经验。 最有趣的差异在于经验水平之间。
新手受访者的见解
之前,我们使用了受访者使用 Go 的时间(以月/年为单位) 作为代理来深入了解不同经验水平之间的结果如何变化。 今年我们尝试了一个新的细分问题:“你的 Go 的经验水平?”,看看自我认同是否可能更重要 检验围棋经验的有用方法,而不是把不同的时间间隔放在一起 的时间。 由于“新手”或“专家”等分类术语可能会有所不同 人与人之间,我们提供了描述,以帮助使这些桶更加 客观的。 选项是:
意识:我知道 Go,但如果没有 Go,就无法编写简单的 Go 程序 协助
新手:我可以用 Go 完成简单的编程项目,可能使用 协助
中级:我可以用 Go 完成重要的编程项目 一些帮助
高级:我可以在 Go 中完成重要的编程项目,而无需 协助
专家:我可以提供指导、排除故障并回答相关问题 从其他工程师那里走
我们发现受访者的使用时长之间存在中等相关性 (⍴ = .66) 一直在使用 Go 以及他们自我认定的经验水平。 这意味着 经验水平量表虽然与时间量表类似,但可以给我们一些 关于受访者因经历而有所不同的新见解。 例如, 受访者花在 Go 上写作的时间比例与 他们用其他语言写作的时间与 他们自我认定的经验水平与他们使用的时间相比 去。
在我们使用这种细分的分析中,我们通常排除意识 类别,因为他们不会被认为具有必要的经验 回答问题的人仅占受访者的 1% 左右。
新手受访者比经验丰富的受访者更有可能更喜欢 Windows
我们随机抽样的组中新手受访者的比例高于 自选群体,表明存在更多新地鼠 我们不太常听到这样的消息。 因为它们是通过采样 Go VS Code 插件,我们可能希望这个群体更喜欢 使用 VS Code 或在 Windows 上进行开发比其他经验水平更多。 虽然这是事实,但新手也更有可能在 Windows 上进行开发,而不是在 Windows 上进行开发。 其他经验水平,无论他们是否通过 VS 做出回应 代码插件。
我们没有看到更高比例的原因可能有很多 经验水平较高的 Windows 用户。 例如,Windows 用户可能是 更有可能遇到困难并停止使用 Go,或者可能会 操作系统使用的更广泛趋势与 Go 无关。 无论如何,我们 在未来的入门研究中应该包括更多的 Windows 用户 与 Go 一起确保我们提供包容性的入职体验。
目前不同经验水平如何使用 Go(以及他们想要使用的其他领域)
根据受访者目前使用 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 的服务。
在开放文本问题中,29 名受访者中有 12 名表示愿意 使用 Go 访问返回 HTML 的网站/网络服务,表示它们被阻止 因为其他语言有框架可以更好地支持这个用例。 它 可能是更有经验的 Go 开发人员不会尝试或期望将 Go 用于 当其他语言已经有满足这些要求的框架时,这个用例 需要。 正如一位受访者所说,
“通常使用其他语言(例如 PHP 或 红宝石。 部分原因是这些语言中存在优秀的框架。”
新手对 Web 开发感兴趣的另一个重要解释可能是 与他们对 JavaScript / TypeScript 的使用有关。 新手花费更多 他们用 JavaScript / TypeScript 编写的时间比更有经验的人多 受访者。 对网络的更高兴趣可能与以下因素有关 新手受访者目前正在使用其他语言,或者可以指出 对网络技术的普遍兴趣。 未来我们想了解更多 关于这个用例以及我们如何帮助新 Gophers 开始使用 Go 对他们最有用的领域。
受访者面临一系列挑战
每个调查周期我们都会询问受访者他们最大的挑战是什么 使用Go。 从历史上看,缺乏仿制药是最常被引用的 挑战——例如,这是 2020 年最常见的回应,并提到 约 18% 的受访者表示。 自从引入泛型以来,错误 处理(12%)和学习/最佳实践/文档(11%)已经出现在 面对一长串问题,而不是任何单一问题变得越来越多 频繁。
为什么错误处理如此具有挑战性?
关于错误处理的反馈通常将问题描述为冗长。 上 从表面上看,这可能反映出编写重复的代码很无聊或者 恼人的。 然而,不仅仅是编写样板文件的烦恼,错误 处理也可能影响受访者的调试能力。
一位受访者简洁地说明了这个问题:
“错误处理会造成混乱,如果不这样做,很容易掩盖问题 正确(没有堆栈跟踪)”
努力学习最佳实践
“有效地使用 Go。 学习容易,掌握难。”
我们听说 Go 很容易学习, 之前的一项调查显示,超过 70% 的受访者认为 在第一年使用 Go 很有成效,但学习 Go 最佳实践 被认为是使用 Go 的最大挑战之一。 今年受访者 告诉我们围绕 代码结构的 最佳实践和 推荐的工具 而且图书馆 没有很好的文档记录,给初学者带来了挑战 团队保持代码一致。 学习编写惯用的 Go 可以 对于来自其他编程范式的人来说尤其具有挑战性。 对 Go 有更丰富经验的受访者证明,当开发人员 不要遵循编写惯用的 Go 的最佳实践,这会损害一致性 以及共享项目的质量。
模块维护人员面临的最大挑战
Go 模块维护者是 Go 社区的重要成员,帮助 发展并维持我们的包装生态系统的健康。 今年我们计划 与模块维护者进行研究,以确定支持的机会 包生态系统的稳定性和增长,并有助于提高 Go 在内部的采用率 组织。 为了为本研究提供信息,我们在调查中提出了一个问题 了解开源维护者当前面临的最大挑战。
维护人员面临的最大挑战是保持依赖项最新并 版本控制方面的困难,包括避免、识别或了解 何时引入重大变更。 这些见解以及结果 未来的研究将有助于提供支持维护者保持不变的策略 Go生态系统稳定、安全。
部署 Go 代码时面临的最大挑战
今年我们询问受访者在部署 Go 时面临的最大挑战是什么 代码。 “易于部署”经常被认为是使用 Go 的一个原因,但我们 在最近的一项研究中收到了相互矛盾的反馈,促使我们 探索部署 Go 代码时的潜在问题。 在我们的开放文本回复中, 到目前为止,最常见的主题是与 cgo 交叉编译困难(16%), 对 WebAssembly 或 WASI 的支持远远落后于第二位 (7%)。
社区优先事项:受访者最想要什么
今年我们使用了之前调查中使用过的优先顺序问题 基于购买功能的优先级方法。 受访者给出了 10 “gophercoins”并要求将它们分发到他们想看到的区域 改进。 受访者被随机分配到三种可能的选择之一 问题,每个问题包含与工具、安全或相关的七个项目 编译器和运行时。 这种方法使我们能够询问与 每个重点领域,而不会给受访者带来三组负担 认知要求较高的优先顺序问题。
在练习结束时,我们给受访者一个开放的文本提示,让他们告诉我们 关于他们认为 Go 团队下一步的首要任务的任何领域 年,无论他们将硬币花在哪些物品上。 例如,如果一个 受访者被展示了安全部分,但他们并不太关心 关于安全,他们仍然有机会告诉我们,在公开场合 文本区域。
安全
我们选择这些项目来测试我们对相对重要性的假设 社区的安全实践。 这些是所描述的七项 致参与者:
pkg.go.dev 识别维护不善的软件包(例如, 对问题没有反应,无法更新其依赖项,仍然存在 长时间处于脆弱状态)
pkg.go.dev 识别进行重大 API 更改的软件包(即 需要在将这些软件包升级到更新版本时修复这些 API 的使用 版本)
支持抑制 govulncheck 中的漏洞
跟踪敏感数据如何流经 Go 程序的工具(检测 PII 泄漏)
安全最佳实践指南(例如,如何选择和更新 依赖关系; 如何设置模糊测试、漏洞检查和线程 消毒剂; 如何使用加密货币)
默认安全的 Web 和 SQL 库可帮助用户避免引入 Web 服务器代码中的漏洞
符合 FIPS-140 的加密库
获得最高资助的安全功能是 Web 和 SQL 库的安全 默认情况下是为了避免在 Web 服务器代码中引入漏洞,但是 前四个特征都与避免引入漏洞有关。 对安全默认值的渴望与之前的安全研究是一致的 这表明开发人员希望在安全性上“左移”:开发团队 通常没有时间或资源来解决安全问题,并且 因此,重视工具,减少将它们引入的可能性 第一名。 第二个最常见的项目是安全最佳实践指南, 强调最佳实践文档与新文档相比的高价值 向大多数受访者提供的工具或功能。
工具
我们在此问题中包含的项目受到 VS Code 反馈的启发 插件用户。 我们想知道哪些工具和 IDE 改进将是 对于可能使用其他 IDE 或编辑器的更广泛的受众来说最有帮助。
更好的重构工具(例如,支持自动代码转换: 重命名、函数提取、API迁移等)
更好地支持代码编辑器/IDE 中的测试(例如,健壮且 可扩展的测试资源管理器 UI、第 3 方测试框架、子测试支持、代码 覆盖范围)
更好地支持在代码编辑器/IDE 中处理多个模块 (例如,编辑模块A和B,其中模块A依赖于模块B)
pkg.go.dev 中的依赖关系洞察(例如漏洞、重大更改、 记分卡)
代码编辑器/IDE 中的依赖性洞察(例如,漏洞、破坏 变化、记分卡)
支持使用新模块路径发布模块(例如,存储库所有权 不可触摸)
支持查找实现接口的类型和已实现的接口 通过代码编辑器/IDE 中的类型
资助最多的编辑器功能是 支持查找实现的类型 一个接口以及由类型 和 重构工具 实现的接口。 我们 还发现受访者使用地鼠币的方式存在有趣的差异 根据首选编辑器用法。 最值得注意的是,VS Code 用户花费了更多 gophercoins 在重构上比 GoLand 用户多,建议自动代码 目前,GoLand 中比 VS Code 更好地支持转换。
编译器和运行时
我们本节的关键问题是确定受访者是否想要 默认情况下更好的性能,更好的优化工具,或者只是更好的 了解如何编写高性能的 Go 代码。
降低计算成本
减少内存使用
减少二进制大小
减少构建时间
更好的性能调试工具
优化指南(如何提高性能并降低成本,涵盖 Go的实现和性能调试工具)
交叉编译时更好地支持使用 cgo
到目前为止,该列表中资助最多的项目是优化指南。 这是 跨组织规模、工作角色和经验水平保持一致。 我们问 另一个问题是受访者是否担心资源成本。 大多数受访者 (55%) 表示他们没有任何成本担忧,但那些 对资源成本感到担忧,在以下方面花费了更多地鼠币(平均 2.0) 与没有这样做的人相比,减少了计算成本和内存成本。 然而,即使 那些担心资源成本的人仍然在 优化指南(平均1.9 gophercoins)。 这是一个强烈的信号 为 Go 开发人员理解和优化 Go 性能提供指导 目前比额外的编译器和运行时性能更有价值 改进。
结论
感谢您与我们一起审查我们第一位开发人员的结果 2023年调查! 了解开发人员的经验和挑战有助于我们 优先考虑如何最好地服务 Go 社区。 我们发现的一些要点 特别有用:
Go 新手开发者对 Web 开发的兴趣比 其他经验水平的受访者。 这是我们想要的一个领域 进一步探索以确保我们满足新的 Go 开发人员的需求。
安全默认设置、安全和优化的最佳实践指南,以及 IDE 中更多的重构帮助将是对 社区。
错误处理是社区的一个高优先级问题,并创建 冗长性和可调试性方面的挑战。 Go团队没有 目前要分享的公开提案,但正在继续探索选择方案 以改进错误处理。
入职和学习最佳实践是面临的最大挑战之一 受访者并将成为未来研究的领域。
对于 Go 模块维护者来说,保持依赖项是最新的、模块 版本控制以及识别或避免重大更改是最重要的 挑战。 帮助维护者提供稳定健康的生态系统是 进一步用户体验研究的另一个有趣的主题。
再次感谢所有对本次调查做出回应和贡献的人——我们 没有你我不可能做到这一点。 我们希望在今年晚些时候见到您
还没有评论,来说两句吧...