Todd Kulesza 2020-04-20
概览、感谢
首先,我要非常感谢参与本次调查的数千名 Go 开发人员。在 2019 年,我们收到了 10,975 份回复,几乎是去年的两倍![1]我要代表团队的其他成员,充分强调您花时间和精力向我们介绍您在 Go 方面的经验,我们对此深表感谢。谢谢!
关于前几年调查说明
敏锐的读者可能会注意到,我们每年的比较与我们过去分享的数字不太吻合。原因是从 2016 年至 2018 年,我们使用开始调查的总人数作为分母来计算每个问题的百分比。尽管这很不错而且很一致,但它忽略了并非每个人都会完成调查的事实——多达 40% 的参与者在到达最后一页之前就停止了调查,这意味着在调查的后面出现的问题似乎表现得更糟,原因仅在于是后来的问题。因此,今年,我们重新计算了所有结果(包括本文中显示的 2016-2018 年调查回复),使用回答给定问题的人数作为该问题的分母。我们在 x 轴上或图表图例中以 “n = [受访者人数]” 的形式包括了每个图表的 2019 年答复数量,以使读者更好地理解每个图表背后的证据权重。
同样,我们了解到,在先前的调查中,在回复列表中较早出现的选项的回复率不成比例。为了解决这个问题,我们在调查中添加了随机元素。我们的一些多项选择题中包含没有逻辑顺序的选择列表,例如“我在 Go 中编写了以下内容:[应用程序类型列表]”。以前这些选择是按字母顺序排列的,但在 2019 年,它们以随机顺序呈现给每个参与者。这意味着某些问题的每年比较在 2018→2019 期间无效,但 2016-2018 年的趋势还是有效的。你可以认为这为 2019 年设定了更准确的基准。在受访者可能会扫描特定名称(例如其首选编辑器)的情况下,我们保留了字母顺序。我们在下面明确指出适用于哪些问题。
第三个主要变化是使用开放式,自由文本答复来改进我们对问题的分析。去年,我们使用机器学习对这些答复进行了大致(但很快)的分类。今年,两名研究人员对这些回复进行了手动分析和分类,从而可以进行更细致的分析,但无法与去年的数字进行有效比较。像上面讨论的随机化一样,此更改的目的是为我们提供 2019 年以后的可靠基准。
无需再费周折...
这是一篇很长的帖子。总结一下主要包含以下核心点:
我们的受访者的受众特征与 Stack Overflow 的调查受访者相似,这使我们更加确信这些结果可以代表更大的 Go 开发人员受众。 大多数受访者每天都使用 Go,而且这个数字每年都在上升。 Go 的使用仍集中在技术公司,但是 Go 在越来越多的行业中被应用,例如金融和媒体。 调查方法上的变化向我们表明,我们的大多数同比指标都是稳定的,并且比我们以前意识到的要高。 受访者都在使用 Go 解决类似的问题,尤其是构建 API/RPC 服务和 CLI 方便,无论他们组织规模如何。 大多数团队都会尽快更新到最新的 Go 版本。当第三方提供商延迟支持当前的 Go 版本时,开发人员很可能放弃,选择其他的提供商。 现在,Go 生态系统中的几乎每个人都在使用模块,但是围绕软件包管理的一些困惑仍然存在。 有待改进的重点领域包括改善开发人员的调试,模块工作和云服务的体验。 VS Code 和 GoLand 继续得到更多使用。现在,四分之三的受访者更喜欢他们。
主要受访者是哪些人?
今年,我们提出了一些新的人口统计问题,以帮助我们更好地了解回答此调查的人。特别是,我们询问了专业编程经验的持续时间以及人们工作的组织的规模。这些都是以 StackOverflow 在年度调查中提出的问题为模型的,我们看到的答复分布非常接近 StackOverflow 的 2019 年结果。我们的收获是与 StackOverflow 调查受众群体相比,本次调查的受访者具有相似水平的专业经验和不同规模的组织所代表的比例(明显的区别是,我们主要从与 Go 合作的开发人员那里听到)。当将这些发现推广到全世界大约 100 万个 Go 开发人员时,这增加了我们的信心。这些人口统计问题还将在将来帮助我们确定,哪些同比变化可能是由谁对调查做出答复引起的,而不是情绪或行为变化引起的。
工作的组织有多少人
从事专业编程多少年
查看 Go 的经验,我们发现大多数受访者(56%)对 Go 的使用还不到两年,它们相对较新。多数人还说,他们在工作中(72%)和工作外(62%)使用 Go。专业使用 Go 的受访者比例似乎每年都在上升。
如您在下表中所见,2018 年我们看到了这些数字的激增,但这一增长在今年消失了。这似乎表明 2018 年回答调查的受众与其他三年有很显著的不同。在这种情况下,他们更有可能在工作外使用 Go 并在工作时使用其他语言,但是我们在多个调查问题中看到了类似的异常值。
使用 Go 的时长
工作中使用 Go?
使用时间最长的受访者与新的 Go 开发人员的背景不同。这些 Go 老兵更有可能声称拥有 C/C++ 的专业知识,而不太可能声称具有 JavaScript,TypeScript 和 PHP 的专业知识。有一点需要提醒的是,这是自我报告的“专业知识”。将其视为“熟悉”可能会更有用。不管他们使用 Go 有多长时间,Python 似乎都是大多数受访者熟悉的语言(不是 Go)。
熟悉的语言 vs Go 的经验
去年,我们询问了受访者从事哪些行业,发现大多数人报告曾在软件,互联网或网络服务公司工作。今年看来,受访者代表了更广泛的行业。但是,我们还简化了行业清单,以减少潜在重叠的类别(例如,2018年将“软件”和“互联网/网络服务”的单独类别合并为 2019 年的“技术”)。因此,严格来说,这并不是苹果与苹果之间的比较。例如,简化类别列表的一种效果可能是减少“软件”类别的使用。
所在行业
Go 是一个成功的开源项目,但这并不意味着使用它的开发人员也正在编写免费或开源软件。与往年一样,我们发现大多数受访者并不是 Go 开源项目的频繁贡献者,有 75% 的受访者表示他们“很少”或“从不”这样做。随着 Go 社区的扩展,我们发现从未为 Go 开源项目做出过贡献的受访者所占的比例正在缓慢上升。
为 Go 开源项目做贡献的频率
开发者工具
与往年一样,绝大多数被调查者表示在 Linux 和 macOS 系统上使用 Go。这是我们的受访者与 StackOverflow 的 2019 年结果之间存在很大差异的一个领域:在我们的调查中,只有 20% 的受访者使用 Windows 作为主要开发平台,而 StackOverflow 是 45%。Linux 的使用率为 66%,macOS 的使用率为 53%,这两者都远远高于 StackOverflow 的受众,后者分别报告了 25% 和 30%。
在什么操作系统开发 Go 项目
今年,编辑器整合的趋势仍在继续。GoLand 今年的使用量增长最快,从 24%→34% 上升。VS Code 的增长速度有所放缓,但仍然是受访者中最受欢迎的编辑器,占 41%。现在,这四种编辑器合起来成为四分之三的受访者的首选。
其他所有编辑器使用者的数量都有所减少。但这并不意味着,他们根本就不使用这些编辑器,当然也不表明,他们使用这个编辑器只是因为写 Go 代码(polaris 注:更多可能是用它编写其他代码,习惯了,因此也用来写 Go)。
今年,我们添加了一个有关内部 Go 文档工具(例如 gddo[2])的问题。少数受访者(6%)表示他们的组织运行自己的 Go 文档服务器,尽管当我们查看大型组织(至少有 5,000 名员工)的受访者时,这一比例几乎翻了一番(达到11%)。对受访者的后续询问表示他们的组织已停止运行其自己的文档服务器,这表明关闭该服务器的主要原因是,人们认为相比最初搭建该服务器所需的工作量以及维护工作量(38%),它的收益较低(23%)。
对 Go 表现的满意度
大部分受访者都认为 Go 在他们的团队中表现良好(86%),并且他们希望将其用于下一个项目(89%)。我们还发现,超过一半的受访者(59%)认为 Go 对他们公司的成功至关重要。自 2016 年以来,所有这些指标一直保持稳定。
对结果进行归一化改变了以前年份的大多数数字。例如,由于参加者的离职,同意“ Go 对我的团队来说很好”这一说法的受访者比例先前在 50% ~ 60%。当我们删除从未见过该问题的参与者时,我们发现自 2016 年以来情况一直相当稳定。
看看在 Go 生态系统中解决问题的情绪,我们看到了类似的结果。很大比例的受访者同意每种说法(82%–88%),并且在过去四年中,这些比率在很大程度上保持稳定。
今年,我们对各个行业的满意度进行了更细微的考察,以建立基准。总体而言,无论行业如何,受访者都对在工作中使用 Go 持积极态度。我们确实在一些领域(尤其是制造业)中看到了不满的微小变化,我们计划通过后续研究进行调查。同样,我们询问了对 Go 开发各个方面的满意度以及重要性。将这些措施结合在一起可以突出显示三个特别关注的主题:调试(包括调试并发),使用模块和使用云服务。大多数主题将这些主题中的每一个评为“非常”或“至关重要”,但与其他主题相比,满意度得分明显较低。
关于对 Go 社区的看法,我们发现与往年有所不同。首先,同意“在 Go 社区中我感到受欢迎”这一说法的受访者比例从 82% 下降到 75%。深入研究发现,“略微”或“中度同意”的受访者比例下降,而“neither agree nor disagree”和“强烈同意”的受访者比例都增加了(分别上升了 5 点和 7 点)。这种两极分化表明在 Go 社区中经验不同的两个或多个群体,因此这是我们计划进一步研究的领域。
其他重大差异是答复“我很高兴为 Go 项目做出贡献”声明的明显上升趋势,以及认为 Go 的项目领导了解他们的需求的受访者比例同比大幅增加。
所有这些结果表明,从大约两年开始,更高的一致性模式与增加的 Go 体验相关。换句话说,受访者使用 Go 的时间越长,他们越可能同意这些陈述。
这可能不足为奇,但是参与 Go 开发者调查的人们倾向于喜欢 Go。但是,我们还想了解受访者喜欢使用哪些其他语言。这些数字中的大多数与往年相比没有显着变化,只有两个例外:TypeScript(增加了 10 分)和Rust(增加了 7 分)。当按照 Go 体验的持续时间细分这些结果时,我们会看到与语言专业知识相同的情况出现。特别是,Python 是 Go 开发人员最可能喜欢使用它的语言和生态系统。
在 2018 年,我们首先提出了“您会建议…” Net Promoter Score[3] (NPS) 的问题,得到 61 分。今年,我们的 NPS 结果在统计上保持不变 60(67% "promoters" 减去 7% "detractors")。
使用 Go
构建 API/RPC 服务(71%)和 CLI(62%)仍然是 Go 的最常见场景。下图似乎显示了自 2018 年以来的重大变化,但这很可能是对选择顺序进行随机化的结果,该选择顺序过去按字母顺序列出:以'A’开头的 4 个选择中的 3 个减少了,而其他所有条件保持稳定或增加。因此,最好将此图表解释为具有 2016-2018 年趋势的 2019 年更准确的基线。例如,我们认为自 2016 年以来,构建返回 HTML 的 Web 服务的受访者比例一直在下降,但由于这一答复始终是一长串选择的最底层,因此可能被低估了。我们还按组织规模和行业划分了这一点,但没有发现显著差异:无论是在小型科技初创公司还是大型零售企业中工作,受访者使用 Go 的方式大致相似。
另外一个相关的问题,询问了受访者使用 Go 的更大领域。到目前为止,最常见的领域是 Web 开发(66%),其他常见的领域包括数据库(45%),网络编程(42%),系统编程(38%)和 DevOps 任务(37%)。
除了受访者正在构建的内容之外,我们还询问了他们使用的一些开发技术。绝大多数受访者表示,他们依赖文本日志进行调试(88%),对此他们的回复是因为替代工具难以有效使用。但是,本地调试工具(例如,使用 Delve),性能分析和使用竞争检测器进行测试并不少见,约有 50% 的受访者依赖于其中至少一种技术。
关于软件包管理,我们发现绝大多数受访者已采用 Go 的模块(89%)。对于开发人员来说,这是一个巨大的转变,几乎整个社区似乎都在同时经历。
我们还发现,有 75% 的受访者评估了当前的 Go 版本以供生产使用,另有 12% 的受访者等待下一个发布周期。这表明大多数 Go 开发人员正在使用(或至少尝试使用)当前或以前的稳定版本,从而突出了平台即服务提供商快速支持 Go 的新稳定版本的重要性。
云上 Go
Go 在设计时就考虑了现代的分布式计算,我们希望继续改善开发人员使用 Go 构建云服务的体验。今年,我们扩展了有关云开发的问题,以更好地了解受访者与云提供商的合作方式,他们对当前开发人员体验的满意程度以及可以改进的地方。如前所述,2018 年的某些结果似乎有异常,例如自有服务器的意外低结果以及 GCP 部署的意外高结果。
我们看到两个明显的趋势:
三大全球云提供商(Amazon Web Services,Google Cloud Platform 和 Microsoft Azure)在受访者中的使用率均呈上升趋势,而大多数其他提供商每年使用的受访者比例都较小。 在自有或公司拥有的服务器的本地部署继续减少,从在统计上看,与 AWS(44% vs 42%)绑定为最常见的部署目标。
通过查看受访者使用的云平台类型,我们可以看到主要提供商之间的差异。部署到 AWS 和 Azure 的受访者最有可能直接使用 VM(分别为 65% 和 51%),而部署到 GCP 的受访者使用托管 Kubernetes 平台(GKE,64%)的可能性几乎是 VM 的两倍(35%)。我们还发现,部署到 AWS 的受访者使用托管 Kubernetes平台的可能性(32%)与使用无服务器托管平台的比率(AWS Lambda,33%)相同。GCP(17%)和 Azure(7%)的受访者使用无服务器平台的比例均较低,而从受访者备注来看,主要原因是这些平台上对最新 Go 运行时的支持延迟。
总体而言,大多数受访者对在所有三大主要云提供商上使用 Go 感到满意。受访者对 AWS(80% 满意)的 Go 和GCP(78%)的 Go 开发满意度差不多。Azure 的满意度较低(满意率为 57%),从受访者备注来看,主要驱动因素是人们认为 Go 缺乏该平台上的一流支持(25%)。在这里,“一流的支持”是指始终保持最新的 Go 版本,并确保在发布时 Go 开发人员可以使用新功能。这与使用 GCP(14%)的受访者报告的最高痛苦点相同,并且特别关注在无服务器部署中对最新 Go 运行时的支持。相比之下,部署到 AWS 的受访者最有可能说 SDK 可以使用改进,例如更加惯用(21%)。对于GCP(9%)和 Azure(18%)开发人员而言,SDK 改进也是第二大常见要求。
痛点
受访者表示无法使用 Go 的主要原因(56%)仍然是项目在使用另一种语言,还有一部分是因为团队喜欢使用其他语言(37%),同时 Go 本身缺乏一些关键功能(25%)。
这是我们将选择列表随机化的问题之一,因此尽管 2016-2018 年的趋势是正确的,但逐年比较是无效的。例如,我们有信心由于他们的团队更喜欢另一种语言而无法更频繁地使用 Go 的开发人员的数量每年都在减少,但我们不知道这种减少是否会在今年急剧加速,或者始终低于我们估计的 2016–2018 年数字。
排名前两名的未使用原因(在现有的非 Go 项目中工作,以及在使用其他语言的团队中工作)没有直接的技术解决方案,但其余的则可能。因此,今年我们要求提供更多详细信息,以更好地了解我们如何帮助开发人员增加对 Go 的使用。本节其余部分中的图表基于手动分类的备注文本,因此它们的长尾效应很明显。对于每个图表,总计少于总回馈的 3% 的类别已归为“其他”类别。单个回答可能提到多个主题,因此图表的总和不等于100%。
在说 Go 缺乏所需语言功能的 25% 的受访者中,有 79% 指出泛型是关键的缺失功能。22% 的人指出错误处理的持续改进(除了 Go 1.13 的更改),而 13% 的人要求更多的函数式编程特性,特别是内置的 map/filter/reduce 功能。需要明确的是,这些数字来自回答者的一部分,而不是整个调查对象,他们表示如果不缺少他们需要的一个或多个关键功能,他们将会更多地使用 Go。
表示使用 Go 语言不是“合适的语言”的受访者有多种原因和用例。最常见的是他们从事某种形式的前端开发(22%),例如用于 Web,桌面或移动的 GUI。另一个普遍的回答是,受访者说他们在一个已经占主导地位的语言(9%)的领域中工作,这使得使用其他语言成为一个挑战。一些受访者还告诉我们他们所指的是哪个域(或简单地提到一种而不提到另一种更常见的语言),我们通过下面的“I work on [domain]”行显示。受访者提到的另一个首要原因是需要更好的性能(9%),特别是对于实时计算。
最大挑战与去年基本保持一致。Go 缺乏泛型和模块/软件包管理仍然是最主要的问题(分别占响应的 15% 和 12%),并且强调工具问题的受访者比例有所增加。这些数字与上面的图表不同,因为这个问题是所有受访者都提出的,无论他们说不使用 Go 最大的阻碍是什么。以上这三个都是今年 Go 团队关注的领域,我们希望在未来几个月中能极大地改善开发人员的体验,尤其是在模块,工具和入门经验方面。
用任何一种语言来诊断故障和性能问题都可能具有挑战性。受访者告诉我们,这两个方面的最大挑战不是 Go 的实施或工具所特有的,而是一个更根本的问题:自我报告知识的缺乏,经验或最佳实践。我们希望在今年晚些时候通过文档和其他教育材料来帮助解决这些知识缺失。其他主要问题的确涉及工具,尤其是在学习/使用 Go 的调试和概要分析(profiling)工具时,在成本/收益方面存在不利的权衡取舍,以及使工具在各种环境中工作的挑战(例如,在容器中进行调试或从生产中获取性能概况)。
最后,当我们问到在受访者的编辑环境中最能改善 Go 支持的内容时,最常见的回答是对语言服务器的总体改进或更好的支持(gopls,19%)。这是预料之中的,因为 gopls 替代了大约 80 种现存的工具,并且仍处于测试阶段。当受访者更具体地说明他们希望获得的改进时,他们最有可能报告调试经验(14%)和更快或更可靠的代码完成率(13%)。许多参与者还明确提到使用 gopls(8%)时需要频繁重新启动 VS Code 的需求;自从这项调查在实地进行以来(2019 年 11 月下旬至 12 月初),许多 gopls 改进措施已经着手,这仍然是团队的重点工作领域。
Go 社区
大约三分之二的受访者使用 Stack Overflow 来回答与 Go 相关的问题(64%)。答案的其他主要来源是godoc.org(47%),直接阅读源代码(42%)和 golang.org(33%)。
上一张图表的长尾巴突出显示了各种不同的来源(几乎所有这些来源都是社区驱动的)和方式,受访者在使用 Go 进行开发时要克服挑战。确实,对于许多 Gophers 来说,这可能是他们与更大社区互动的主要点之一:随着社区的扩展,我们看到越来越多的未参加 Go 相关活动的受访者比例越来越高。在 2019 年,这一比例几乎达到了三分之二的受访者(62%)。
由于更新了 Google-wide 的隐私权准则,我们不再能够询问受访者居住的国家/地区。相反,我们询问了首选的口语/书面语言,以此作为 Go 语言在全球范围内的粗略用法,其好处是为潜在的本地化工作提供了数据。
由于本次调查是使用英语进行的,因此对于讲英语的人和英语为第二或第三种常见语言的人群可能会有很大的偏见。因此,非英语数字应解释为可能的最小值,而不是 Go 的全球受众人数的近似值。(polaris 注:所以下图中国才这么少,大部分中国 Gopher 并未参与调查)。
我们发现 12% 的受访者认同传统上代表性不足的群体(例如种族,性别等),而 3% 的认同者为女性。(这个问题应该说的是“woman”而不是“female”。该错误已在我们的 2020 年调查草案中得到纠正,对此我们深表歉意。)我们强烈怀疑这 3% 的人会导致低估了 Go 社区中的女性。例如,我们知道美国的女性软件开发人员对 StackOverflow 开发人员调查的回应率大约是根据美国就业数据得出的预期值[4]的一半(11% vs 20%)。由于我们不知道美国的回应比例,因此无法准确地从这些数字中推断出实际比例可能高于 3%。此外,GDPR 要求我们改变对敏感信息的询问方式,其中包括性别和传统上代表性不足的群体。不幸的是,这些变化使我们无法将这些数字与以前的年份进行有效比较。
识别出代表性不足的群体或宁愿不回答该问题的受访者,与不认同代表性不足的群体的受访者相比,“在 Go 社区中我感到受欢迎”这一说法的异议率更高(8% vs 4%)。这表明我们持续开展宣传工作的重要性。
总结
我们希望您喜欢我们的 2019 年开发人员调查结果。了解开发人员的经验和挑战有助于我们计划和确定 2020 年的工作重点。再次感谢对本次调查做出贡献的每个人-您的反馈意见将帮助 Go 来年及以后的发展方向。
原文:http://blog.golang.org/survey2019-results
Go 语言中文网镜像版:https://docs.studygolang.com/blog/survey2019-results
参考资料
去年的两倍!: https://blog.golang.org/survey2018-results
[2]gddo: https://github.com/golang/gddo
[3]Net Promoter Score: https://en.wikipedia.org/wiki/Net_Promoter
[4]根据美国就业数据得出的预期值: https://insights.stackoverflow.com/survey/2019#developer-profile-_-developer-type
推荐阅读
喜欢本文的朋友,欢迎关注“Go语言中文网”:
Go语言中文网启用微信学习交流群,欢迎加微信:274768166,投稿亦欢迎
有疑问加站长微信联系(非本文作者)