Go 博客
Go 2018 年度调查结果
谢谢
本文总结了我们 2018 年用户调查的结果,并与我们之前的 2016 年和 2017 年调查结果进行了比较。
今年我们有来自 103 个不同国家/地区的 5,883 名调查受访者。我们非常感谢每一位通过本次调查提供反馈的人,以帮助塑造 Go 的未来。谢谢!
调查结果摘要
- 首次,一半的调查受访者现在将 Go 作为日常工作的一部分。今年,在作为工作内容开发 Go 和在工作职责之外使用 Go 的受访者人数也有显著增加。
- 最常见的 Go 用途仍然是 API/RPC 服务和 CLI 工具。自动化任务虽然不如 CLI 工具和 API 服务常见,但却是 Go 的一个快速增长的领域。
- Web 开发仍然是调查受访者工作中最常见的领域,但 DevOps 的同比增长率最高,已成为第二常见的领域。
- 绝大多数调查受访者表示 Go 是他们最喜欢的编程语言,尽管他们通常感觉自己掌握 Go 的熟练程度不如至少一种其他语言。
- VS Code 和 GoLand 的流行度激增,现在已成为受访者中最受欢迎的代码编辑器。
- Go 的可移植性体现在,许多 Go 开发者使用多种主要操作系统进行开发。Linux 和 macOS 特别受欢迎,绝大多数调查受访者使用其中一种或两种操作系统来编写 Go 代码。
- 调查受访者似乎正在远离本地部署 Go,转向容器和无服务器云部署。
- 大多数受访者表示他们在 Go 社区中感到受欢迎,而大多数关于改进 Go 社区的想法都侧重于改善新手的体验。
请继续阅读以了解所有详细信息。
编程背景
今年的结果显示,作为工作内容付费编写 Go 的受访者人数显著增加(68% → 72%),这延续了自 2016 年首次调查以来的逐年增长趋势。我们还看到在工作之外使用 Go 进行编程的受访者人数有所增加(64% → 70%)。首次,将 Go 作为日常工作一部分的受访者人数达到了 50%(高于 2016 年的 44%)。这些发现表明,公司正在以稳定的步伐继续拥抱 Go 进行专业软件开发,并且 Go 在开发者中的总体受欢迎程度仍然很高。
为了更好地了解开发者使用 Go 的情况,我们将回复分为三类:
- 在工作内外都使用 Go 的人,
- 在工作中使用 Go 但不在工作外使用的人,以及 3) 仅在工作职责之外编写 Go 的人。近一半(46%)的受访者在专业上和业余时间都编写 Go 代码(比 2017 年增加了 10 个百分点),而其余受访者在仅在工作中使用 Go 或仅在工作外使用 Go 之间大致平分。大量受访者同时在工作中使用 Go 并在工作外选择使用它,这表明该语言吸引了那些不将软件工程视为日间工作的开发者:他们还选择在工作职责之外进行代码实践,并且(正如 85% 的受访者表示他们更喜欢 Go 进行下一个项目一样,参见下方“对 Go 的态度”部分)Go 是他们更喜欢用于这些非工作相关项目的首选语言。
当被问及使用 Go 的时长时,参与者的回答随着时间的推移呈强劲上升趋势,每年在 2-4 年和 4+ 年这两个年龄段的回复百分比都更高。这对于一门较新的编程语言来说是意料之中的,我们很高兴看到刚开始学习 Go 的受访者比例下降速度慢于使用 Go 2 年以上的受访者比例增加速度,这表明开发者在初步学习语言后并没有退出生态系统。
与往年一样,Go 在受访者最喜欢的语言和他们拥有专业知识的语言中名列前茅。大多数受访者(69%)声称在 5 种不同语言方面拥有专业知识,这表明他们对 Go 的态度受到其他编程栈经验的影响。下面的图表按将每种语言列为最喜欢/最理解的受访者数量排序(最深的蓝色条),这突显了三个有趣的方面:
- 虽然约有 ⅓ 的受访者认为 Go 是他们拥有最多专业知识的语言,但这个数量的两倍的受访者认为它是他们最喜欢的编程语言。因此,尽管许多受访者觉得他们掌握 Go 的熟练程度不如某些其他语言,但他们仍然经常更喜欢使用 Go 进行开发。
- 很少有调查受访者将 Rust 列为他们拥有专业知识的语言(6.8%),但有 19% 的受访者将其列为最喜欢的语言,这表明该受众对 Rust 的兴趣很高。
- 只有三种语言的受访者比例,他们说他们喜欢这门语言的比例高于他们说他们拥有该语言专业知识的比例:Rust(偏好:专业知识比例为 2.41:1)、Kotlin(1.95:1)和 Go(1.02:1)。偏好高于专业知识意味着对一门语言感兴趣,但直接经验很少;而专业知识低于偏好的数字则表明熟练使用存在障碍。接近 1.0 的比率表明大多数开发者能够有效地并且愉快地使用给定语言。这些数据得到了 Stack Overflow 2018 年度开发者调查的证实,该调查也发现 Rust、Kotlin 和 Go 是最受欢迎的编程语言。
数据解读:参与者可以列出他们最喜欢的 5 种语言。颜色编码从最顶级的排名开始为深蓝色,并随着每个后续排名的升高而变浅。这些图表按将每种语言列为他们首选的参与者百分比排序。
开发领域
调查受访者报告了中位数三个不同领域的参与情况,绝大多数(72%)在 2-5 个不同领域工作。Web 开发是最普遍的,占 65%,并且它作为调查受访者工作的主要领域的主导地位有所增强(比去年增加了 61%);自 2016 年以来,Web 开发一直是 Go 开发最常见的领域。今年 DevOps 明显增加,从 36% 增加到 41% 的受访者,取代了系统编程成为第二名。我们没有发现任何在 2018 年使用量低于 2017 年的领域,这表明受访者正在采用 Go 进行更广泛的项目,而不是从一个领域转移到另一个领域。
自 2016 年以来,Go 的前两大用途一直是编写 API/RPC 服务和开发 CLI 应用程序。虽然 CLI 使用量在三年内一直保持稳定在 63%,但 API/RPC 使用量已从 2016 年的 60% 增加到 2017 年的 65%,再到今天的 73%。这些领域发挥了 Go 的核心优势,并且是云原生软件开发的核心,因此我们预计它们将继续成为 Go 开发者的主要场景之一。直接返回 HTML 的 Web 服务受访者百分比稳步下降,而 API/RPC 使用量增加,这表明一些 Web 服务已迁移到 API/RPC 模型。另一项逐年趋势表明,自动化也是 Go 的一个增长领域,目前有 38% 的受访者使用 Go 进行脚本和自动化任务(高于 2016 年的 31%)。
为了更好地了解开发者使用 Go 的背景,我们增加了一个关于 Go 在不同行业采用情况的问题。对于一门相对较新的语言来说,这或许并不令人意外,超过一半的调查受访者在互联网/Web 服务和软件类别(即科技公司)的公司工作。另外只有金融、银行或保险和媒体、广告、出版或娱乐这几个行业的回应率超过 3%。 (在下方的图表中,我们将响应率低于 3% 的所有类别都归入了“其他”类别。)我们将继续跟踪 Go 在不同行业的采用情况,以更好地了解科技公司以外的开发者需求。
对 Go 的态度
今年我们增加了一个问题:“您有多大可能向朋友或同事推荐 Go?”,以计算我们的 净推荐值 (NPS)。该分数试图衡量一个产品有多少“推荐者”多于“批评者”,范围从 -100 到 100;正值表明大多数人可能推荐使用该产品,而负值表明大多数人可能反对使用它。我们 2018 年的分数为 61(68% 推荐者 - 7% 批评者),并将作为基线,帮助我们随着时间推移衡量 Go 生态系统的社区情绪。
除了 NPS,我们还询问了几个关于开发者对 Go 满意度的问题。总体而言,调查受访者表示满意度很高,与往年一致。大多数人表示他们对 Go 很满意(89%),希望在下一个项目中使用 Go(85%),并认为 Go 对他们的团队很有效(66%),而有相当一部分人认为 Go 对他们公司的成功至少有点关键(44%)。尽管所有这些指标在 2017 年都有所增长,但今年基本保持稳定。(第一个问题的措辞在 2018 年从“我会推荐 Go 给他人使用”改为“总的来说,我对 Go 很满意”,因此这些结果不能直接比较。)
考虑到对未来开发偏爱 Go 的强烈情绪,我们想了解是什么阻止了开发者这样做。这些因素与去年基本相同:约 ½ 的调查受访者在处理使用其他语言编写的现有项目,而 ⅓ 的人在团队或项目中更喜欢使用不同的语言。缺少语言特性和库是受访者未更多使用 Go 的最常见原因。我们还询问了开发者在使用 Go 时面临的最大挑战;与大多数调查问题不同,参与者可以自由输入任何内容来回答这个问题。我们通过机器学习分析结果以识别常见主题,并计算支持每个主题的回复数量。我们确定的三个主要挑战是:
- 包管理(例如,“跟上 vendoring”,“依赖/包管理/vendoring 不统一”)
- 与更熟悉的编程语言的差异(例如,“语法接近 C 语言,但语义略有不同,这让我比我希望的更频繁地查找参考”,“来自非 Go 背景的同事试图将 Go 用作他们以前的语言版本,但带有 channel 和 Goroutine”)
- 缺乏泛型(例如,“缺乏泛型使得说服未尝试过 Go 的人,让他们相信使用 Go 会很高效变得困难。”,“构建更丰富的抽象(想要泛型)很难”)
今年我们增加了一些关于开发者对 Go 不同方面满意度的问题。调查受访者对 Go 应用程序的 CPU 性能(46:1,即每 1 名不满意受访者就有 46 名满意受访者)、构建速度(37:1)和应用程序内存利用率(32:1)非常满意。然而,应用程序可调试性(3.2:1)和二进制文件大小(6.4:1)的响应表明仍有改进空间。
对二进制文件大小的不满主要来自构建 CLI 的开发者,只有 30% 的他们对 Go 生成的二进制文件大小感到满意。然而,对于所有其他类型的应用程序,开发者满意度都超过 50%,并且二进制文件大小一直被列为最重要的因素列表的底部。
相比之下,当我们查看受访者如何对每个方面的重视程度进行排名时,可调试性就脱颖而出了;44% 的受访者将可调试性列为他们最重要或第二重要的方面,但只有 36% 的人对 Go 可调试性的现状感到满意。可调试性与内存使用量和构建速度一样被持续视为重要因素,但满意度水平却显著较低,并且无论受访者构建的软件类型如何,这种模式都保持不变。最近的两个 Go 版本 Go 1.11 和 1.12 都对可调试性进行了重大改进。我们计划今年更深入地研究开发者如何调试 Go 应用程序,目标是改善 Go 开发者的整体调试体验。
开发环境
我们询问了受访者在编写 Go 代码时主要使用的操作系统。大多数(65%)受访者表示使用 Linux,50% 使用 macOS,18% 使用 Windows,这与去年一致。今年我们还研究了有多少受访者在多个操作系统上开发与在单个操作系统上开发。Linux 和 macOS 仍然是明显的领导者,81% 的受访者在这两个系统中的某些组合上进行开发。只有 3% 的受访者在这三个操作系统之间平均分配他们的时间。总的来说,41% 的受访者使用多个操作系统进行 Go 开发,这凸显了 Go 的跨平台特性。
去年,VS Code 以微弱优势击败 Vim,成为受访者中最受欢迎的 Go 编辑器。今年,它显著扩大了领先优势,成为超过 ⅓ 的调查受访者的首选编辑器(高于去年的 27%)。GoLand 的增长也很强劲,现在是第二受欢迎的编辑器,占 22%,与 Vim 互换了位置(下降到 17%)。VS Code 和 GoLand 的流行度激增似乎是以 Sublime Text 和 Atom 的代价实现的。Vim 的首选编辑器受访者数量也有所下降,但仍是 14% 的最受欢迎的第二选择编辑器。有趣的是,我们发现受访者报告的对他们选择的编辑器的满意度水平没有差异。
我们还询问了受访者,什么可以最好地改善他们首选编辑器中的 Go 支持。与上面的“最大挑战”问题类似,参与者可以自由输入自己的回复,而不是从多项选择列表中选择。对回复进行主题分析,发现改进调试支持(例如,“实时调试”、“集成调试”、“更好的调试”)是最常见的请求,其次是改进代码补全(例如,“自动补全性能和质量”、“更智能的自动补全”)。其他请求包括更好地与 Go 的 CLI 工具链集成、更好地支持模块/包以及一般的性能改进。
今年我们还增加了一个问题,询问哪些部署架构对 Go 开发者最重要。毫不奇怪,绝大多数调查受访者认为 x86/x86-64 是他们的首选部署平台(76% 的受访者将其列为他们最重要的部署架构,84% 将其列入前 3 名)。然而,第二和第三个选项架构的排名信息丰富:ARM64(45%)、WebAssembly(30%)和 ARM(22%)有很高的兴趣,但对其他平台兴趣非常小。
部署和服务
2018 年,我们看到从本地到云托管的趋势在 Go 和非 Go 部署中都有持续。将 Go 应用程序部署到本地服务器的受访者百分比从 43% 下降到 32%,这与非 Go 部署报告的 46% → 36% 的下降相呼应。同比增长率最高的云服务包括 AWS Lambda(Go 为 4% → 11%,非 Go 为 10% → 15%)和 Google Kubernetes Engine(Go 为 8% → 12%,非 Go 为 5% → 10%),这表明无服务器和容器正变得越来越受欢迎的部署平台。然而,这种服务增长似乎是由那些已经采用云服务的受访者驱动的,因为我们今年没有发现部署到至少一种云服务的受访者百分比有任何有意义的增长(55% → 56%)。自 2016 年以来,我们也看到 Go 部署到 GCP 的数量稳步增长,从 12% 增加到 19% 的受访者。
可能与本地部署的减少有关,今年我们看到云存储成为受访者使用的第二大服务,从 32% 增加到 44%。身份验证和联合服务也显著增加(26% → 33%)。受访者从 Go 访问的主要服务仍然是开源关系数据库,其比例从 61% 上升到 65% 的受访者。如下方的图表所示,服务使用量普遍增加。
Go 社区
查找 Go 问题答案的首选社区来源仍然是 Stack Overflow(23% 的受访者将其标记为首选来源)、Go 网站(godoc.org 为 18%,golang.org 为 14%)以及阅读源代码(8% 为一般源代码,4% 为 GitHub)。这个顺序与往年基本一致。Go 新闻的主要来源仍然是 Go 博客、Reddit 的 r/golang、Twitter 和 Hacker News。然而,这些也是本次调查的主要分发渠道,因此结果可能存在一些偏差。在下面的两个图表中,我们将使用频率低于 5% 的来源分组为“其他”类别。
今年,55% 的调查受访者表示他们有或有兴趣为 Go 社区做贡献,比去年略有下降(59%)。由于贡献最常见的两个领域(标准库和官方 Go 工具)需要与核心 Go 团队互动,我们怀疑这一下降可能与认为“我可以轻松地就问题和反馈与 Go 项目领导层沟通”的参与者比例下降(30% → 25%)和“我对 Go 的领导力有信心”的参与者比例下降(54% → 46%)有关。
社区的一个重要方面是帮助每个人感到受欢迎,尤其是来自传统弱势群体的人。为了更好地理解这一点,我们对几个弱势群体进行了可选的身份识别问题。2017 年,我们看到了跨领域的逐年增长。2018 年,我们看到类似比例的受访者(12%)认同自己属于弱势群体,同时不认同自己属于弱势群体的受访者比例显著下降。2017 年,每 1 个认同自己属于弱势群体的人,就有 3.5 个人认同自己不属于弱势群体(3.5:1 的比例)。2018 年,该比例提高到 3.08:1。这表明 Go 社区至少保持了与弱势群体成员相同的比例,甚至可能在增加。
维护一个健康的社区对 Go 项目来说极为重要,因此在过去三年里,我们一直在衡量开发者在 Go 社区中感到受欢迎的程度。今年,我们看到同意“我在 Go 社区感到受欢迎”这一说法的受访者百分比有所下降,从 66% → 59%。
为了更好地理解这一下降,我们仔细查看了报告感觉不受欢迎的人群。在传统弱势群体中,2018 年报告感到不受欢迎的人数较少,这表明在这一领域的推广是有效的。相反,我们发现一个人使用 Go 的时长与他们感觉受欢迎的程度之间存在线性关系:新 Go 开发者感觉不受欢迎的比例明显较低(50%),而有 1-2 年经验的开发者(62%)则比有几年经验的开发者(73%)感觉不受欢迎。对数据进行的这项解读得到了对“什么改变能让 Go 社区更受欢迎?”这一问题的回答的支持。受访者的评论大致可以分为四类:
- 减少精英主义的看法,特别是对 Go 的新手(例如,“减少居高临下的态度”,“减少防御和傲慢”)
- 提高领导层面的透明度(例如,“未来方向和规划讨论”,“减少自上而下的领导”,“更加民主”)
- 增加入门资源(例如,“为贡献者提供更清晰的介绍”,“有趣的挑战来学习最佳实践”)
- 更多的活动和聚会,重点是覆盖更大的地理范围(例如,“更多的聚会和社交活动”,“更多城市的活动”)
这些反馈非常有帮助,为我们提供了可以着重改进 Go 开发者体验的具体领域。虽然这并不代表我们用户群的很大一部分,但我们非常认真地对待这些反馈,并正在努力改进每个领域。
结论
我们希望您喜欢我们 2018 年度开发者调查的结果。这些结果正在影响我们的 2019 年规划,在接下来的几个月里,我们将与您分享一些想法,以解决社区为我们突出显示的具体问题和需求。再次感谢所有为本次调查做出贡献的人!
下一篇文章: Go 2 的下一步
上一篇文章: 调试 Go 1.12 中部署的内容
博客索引