Go 博客

Go 2018 年用户调查结果

Todd Kulesza,Steve Francia
2019 年 3 月 28 日

感谢

这篇文章总结了我们 2018 年用户调查的结果,并与我们之前 2016 年2017 年 的调查结果进行了比较。

今年我们有来自 103 个不同国家的 5883 名调查受访者。我们感谢所有通过此次调查提供反馈的人,以帮助塑造 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,我们将回复分为三组

  1. 在工作内外都使用 Go 的人,
  2. 专业使用 Go 但不在工作之外使用的人,以及 3) 仅在工作职责之外编写 Go 代码的人。近一半(46%)的受访者在工作和业余时间都编写 Go 代码(自 2017 年以来增长了 10 个百分点),而其余受访者则几乎平均地分配到仅在工作中编写 Go 或仅在工作之外编写 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 在不同行业中的采用情况的问题。也许并不奇怪,对于一种相对较新的语言来说,超过一半的调查受访者在 *互联网/网络服务* 和 *软件* 类别(即科技公司)的公司工作。其他行业中回复率超过 3% 的只有 *金融、银行或保险* 以及 *媒体、广告、出版或娱乐*。(在下图中,我们将回复率低于 3% 的所有类别都合并到“其他”类别中。)我们将继续跟踪 Go 在各行业的采用情况,以更好地了解科技公司以外的开发人员的需求。

对 Go 的态度

今年,我们增加了一个问题“您有多大可能向朋友或同事推荐 Go?”以计算我们的 净推荐值。此分数试图衡量产品的“推广者”比“贬低者”多多少,范围从 -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 的步伐”、“依赖项/包[sic]管理/vendoring 未统一”)
  • 与更熟悉的编程语言的差异(例如,“语法接近 C 语言,但语义略有不同,导致我比平时更多地查找参考信息”、“来自非 Go 背景的同事试图将 Go 当作他们以前语言的版本来使用,但使用了通道和 Goroutines”)
  • 缺乏泛型(例如,“缺乏泛型使得很难说服那些没有尝试过 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 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% 的受访者将其列入前三名)。然而,第二和第三选择架构的排名很有参考价值:人们对 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%)。我们还看到 Go 部署到 GCP 的稳定增长,自 2016 年以来,从 12% 上升到 19% 的受访者。

也许与本地部署减少相关,今年我们看到云存储成为调查受访者中第二常用的服务,从 32% 上升到 44%。身份验证和联合服务也出现了大幅增长(26% 至 33%)。Go 开发者访问的主要服务仍然是开源关系数据库,其比例从 61% 上升到 65% 的受访者。如下图所示,服务使用量全面增长。

Go 社区

查找 Go 问题的答案的主要社区来源仍然是 Stack Overflow(23% 的受访者将其标记为主要来源)、Go 网站(godoc.org 占 18%,golang.org 占 14%)和阅读源代码(一般源代码占 8%,GitHub 占 4%)。顺序与往年基本一致。Go 新闻的主要来源仍然是 Go 博客、Reddit 的 r/golang、Twitter 和 Hacker News。这些也是本次调查的主要分发方式,因此此结果可能存在一些偏差。在下图中,我们将使用率低于 5% 的来源归入“其他”类别。

今年,55% 的调查受访者表示他们有或有兴趣为 Go 社区做出贡献,略低于去年的 59%。由于贡献的两个最常见领域(标准库和官方 Go 工具)需要与 Go 核心团队互动,我们怀疑这种下降可能与同意“我感觉可以向 Go 项目领导提出问题和反馈”(30% 至 25%)和“我对 Go 的领导层有信心”(54% 至 46%)的参与者比例下降有关。

社区的一个重要方面是帮助每个人感到受欢迎,尤其是来自传统上代表性不足群体的人。为了更好地了解这一点,我们提出了一个关于在几个代表性不足群体中进行身份识别的可选问题。2017 年,我们看到各方面的同比增长。对于 2018 年,我们看到相似比例的受访者(12%)认为自己是代表性不足群体的一部分,并且这与不认为自己是代表性不足群体的一部分的受访者比例大幅下降相对应。2017 年,对于每个认为自己是代表性不足群体的一部分的人,有 3.5 个人认为自己不是代表性不足群体的一部分(比例为 3.5:1)。2018 年,该比例提高到 3.08:1。这表明 Go 社区至少保留了相同比例的代表性不足成员,甚至可能正在增加。

维护一个健康的社区对 Go 项目至关重要,因此在过去的三年里,我们一直在衡量开发者在 Go 社区中感到受欢迎的程度。今年,我们看到同意“我在 Go 社区中感到受欢迎”的调查受访者比例下降,从 66% 降至 59%。

为了更好地理解这种下降,我们更仔细地研究了谁报告说感觉不那么受欢迎。在传统上代表性不足的群体中,2018 年报告感到不受欢迎的人更少,这表明该领域的推广工作是有帮助的。相反,我们发现使用 Go 的时间长度与人们感觉受欢迎的程度之间存在线性关系:较新的 Go 开发者(50%)比使用 1-2 年的开发者(62%)感觉不那么受欢迎,而使用 1-2 年的开发者又比使用几年经验的开发者(73%)感觉不那么受欢迎。对“哪些变化会使 Go 社区更具包容性?”问题的回复支持了这种对数据的解释。受访者的评论可以大致分为四类

  • 减少精英主义的印象,尤其是在 Go 新手群体中(例如,“减少轻视”、“减少防御性和傲慢”)

  • 提升领导层透明度(例如,“未来方向和规划讨论”、“减少自上而下的领导方式”、“更加民主”)
  • 增加入门资源(例如,“为贡献者提供更清晰的入门指南”、“有趣的挑战来学习最佳实践”)
  • 举办更多活动和聚会,并重点覆盖更广的地域范围(例如,“更多聚会和社交活动”、“在更多城市举办活动”)

这些反馈非常有帮助,为我们提供了可以重点关注的具体领域,以改善 Go 开发者的体验。虽然这些反馈不代表我们用户群体的很大一部分,但我们非常重视这些反馈,并正在努力改进每个领域。

结论

希望您喜欢我们 2018 年开发者调查的结果。这些结果正在影响我们的 2019 年规划,在接下来的几个月里,我们将与您分享一些想法,以解决社区为我们指出的具体问题和需求。再次感谢所有参与本次调查的人员!

下一篇文章:Go 2 的下一步
上一篇文章:在 Go 1.12 中调试部署内容
博客索引