七叶笔记 » golang编程 » 调查了 10,975 位 Go 语言开发者,我们有了这些发现

调查了 10,975 位 Go 语言开发者,我们有了这些发现

整理 | 弯月,责编 | 郭芮

头图 | CSDN 下载自视觉中国

出品 | CSDN(ID:CSDNnews)

近日,Go语言官方网站针对数千名开发人员进行了问卷调查,基于Go语言的相关使用情况进行了全方位的报告解读。对比去年,今年收到了10,975份回复,几乎是去年的两倍!下面是此次调查报告的概要:

  • 参与此次调查的开发人员与Stack Overflow的调查报告相似,因此我们更加确信这些结果可以代表广大的Go开发人员。

  • 参与此次调查的大多数开发人员每天都使用Go,而且这个数字每年都在上升。

  • Go的使用仍集中在科技公司,但是使用Go的行业越来越多,例如金融和媒体。

  • 方法论的变化表明,我们的大多数同比指标都是稳定的,并且比我们以前预想得更高。

  • 参与此次调查的开发人员都在使用Go解决类似的问题,尤其是构建API/RPC服务和CLI,无论他们从业的组织规模如何。

  • 大多数团队都希望尽快更新到最新的Go版本。但第三方提供商在支持最新版Go版本方面通常比较迟缓,这成了开发人员采用Go的阻碍因素。

  • 如今,几乎Go生态系统中的每个人都在使用模块,但是围绕 软件包 管理仍然存在一些困惑。

  • 迫在眉睫有待改进的领域包括改善开发人员的调试、模块的使用和云服务的体验。

  • VS Code和GoLand的使用将继续增加。目前四分之三的开发人员都非常喜欢这两个工具。

问卷调查的对象

今年,报告针对开发人员的个人信息提出了一些新的问题,以帮助更好地了解回答问卷调查的人。调查发现,与StackOverflow调查的对象群体相比,此次调查的对象具有相似的专业水平,且代表的不同规模的组织比例也很相近(明显的区别是,本报告的调查对象主要是Go开发人员)。如果将这些发现扩大到全世界大约100万名Go开发人员,那么我们的信心就会大增。

我们发现大多数(56%)接受问卷调查的人使用Go的时间还不足两年,相对较短。大多数还说,他们在工作中使用Go(72%),而有些在工作外(62%)使用。专业使用Go的开发人员比例似乎每年都在上升。

如下图所示,2018年我们看到这些数字出现了激增,但这样的增长在今年却消失了。这表明,2018年接受问卷调查的对象与其他三年有着显著的不同。很有可能是因为他们在工作外使用Go,但在工作时却使用其他语言,但是我们在多个调查问题中看到了类似的异常现象。

使用Go时间最长的开发人员与刚开始使用Go的开发人员有着不同的背景。精通Go的开发人员大多是C/C++的专家,很少有人精通JavaScript、TypeScript和PHP。但我们需要注意一点,这些结果都是开发人员自己报告的“专业知识”,我们应该将其视为“熟悉”可能更恰当。大多数接受问卷调查的开发人员都很熟悉Python(而不是Go),无论他们使用Go已有多长时间。

去年,我们询问了开发人员都从事哪些行业,结果发现大多数人从就业与软件、互联网或网络服务公司。今年,这些开发人员代表了更广泛的行业。但是,我们还简化了行业列表,以减少潜在类型重叠带来的困惑(例如,2018年“软件”和“互联网/网络服务”是分开的,但在2019年统称“科技”)。因此,严格来说,这并不是同类的比较。例如,简化类别列表的一种结果是将所有编写Go软件但未明确列出行业的开发人员统统归入“软件”这一类。

Go是一个成功的 开源项目 ,但这并不意味着使用Go的开发人员也编写自由或开源软件。与往年一样,我们发现大多数开发人员并没有频繁地向Go开源项目贡献代码,75%的开发人员表示他们“很少”或“从不”向Go开源项目贡献代码。随着Go社区的发展,我们发现从未为Go开源项目贡献代码的开发人员比例正在缓慢上升。

开发工具

与往年一样,绝大多数开发人员表示他们在Linux和macOS系统上使用Go。在这个问题上,我们与StackOverflow 2019年的调查结果出现了很大差异:在我们的调查中,只有20%的开发人员以Windows为主要开发平台,而StackOverflow的调查结果为45%。而Linux的使用率为66%,macOS的使用率为53%,二者都远远高于StackOverflow的调查结果,他们的报告数据分别为25%和30%。

今年,编辑器的使用趋势仍在继续。GoLand今年的使用量增长最快,从24%上升至34%。VS Code的增长速度有所放缓,但仍然以占41%名列最受开发人员欢迎的编辑器的榜首。这两种编辑器加起来占据了四分之三的选票。

其他所有编辑器的数量都有所减少。但这并不意味着根本没有人使用这些编辑器,只不过这些编辑器不是开发人员在编写Go代码时的首选。

今年,我们增加了一个有关内部Go文档工具(例如gddo)的问题。少数开发人员(6%)表示,他们的组织搭建了自家的Go文档服务器,尽管单看大型组织(员工数量超过5,000人)的开发人员,这个数字翻了一番(达11%)。开发人员在后续的问题中表示,他们的组织已停止运行自家文档服务器的首要原因有两个,一是他们感觉这样做的收益较低(23%),二是无法承受设置与维护这样的服务器所需的工作量(38%)。

对Go的感受

大部分接受调查的开发人员都认为,Go在他们的团队工作中表现良好(86%),而且他们希望下一个项目继续使用Go(89%)。我们还发现,超过一半的开发人员(59%)认为Go对公司的成功至关重要。自从2016年以来,这些指标一直保持稳定。

在我们对调查结果进行标准化后,这些数字与前几年相比大多发生了变化。例如,针对“Go很适合我们团队”这个问题,由于接受调查的人中途退出,选择“是”的答复只有50%-60%;自从2016年我们去掉了未回答该问题的人数后,选择“是”的比例就非常稳定了。

对于利用Go生态系统解决问题的感受,我们看到了类似的结果。很大一部分开发人员在如下问题中都选择了肯定的答复(82%–88%),并且在过去四年中,这些百分比基本上保持稳定。

今年,我们对各个行业的满意度进行了更细致的考察,并建立了基准。总体而言,无论哪个行业都对在工作中使用Go持积极态度。我们确实在一些领域(尤其是制造业)中看到了不满的情绪,我们打算做进一步的调查。同样,我们询问了关于Go开发各个方面的满意度以及重要性。综合这些数据,我们看到了三个特别值得注意的问题:调试(包括调试并发)、模块的使用以及 云服务 的使用。大多数开发人员都认为这几个问题“非常重要”或“至关重要”,但与其他问题相比,满意度明显偏低。

再来说一说开发人员对Go社区的看法,我们发现与往年有所不同。首先,同意“Go社区很热情”的比例从82%下降到了75%。深入研究发现,选择“不太同意”或“一般”的开发人员比例下降,而选择“不同意也不反对”以及“强烈同意”的开发人员比例都增加了(分别上升了5%和7%)。这种两极分化表明,大家对Go社区的感受形成了两个或多个派别,因此我们打算做进一步的研究。

还有一项重大差异是,在针对“我很高兴为Go项目做贡献”的答复中,表示同意的趋势明显呈上升,而且认为Go的项目领导能够理解开发人员的需求的比例同比也呈大幅增长。

所有这些结果表明,大约从两年前开始,开发人员使用Go的经验越多,就越肯定Go。换句话说,开发人员使用Go的时间越长,他们就越有可能在下列问题中选择同意。

愿意接受Go问卷调查的开发人员大多很喜欢Go,这也在意料之中。但是,我们想了解开发人员还喜欢使用哪些语言。这些数字大多与往年相比没有显著变化,只有两个例外:TypeScript(增加了10%)和Rust(增加了7%)。当根据使用Go的年限进一步细分这些结果后,我们看到了与语言的熟练程度相同的模式。尤其是,Python是Go开发人员最喜欢使用的语言和生态系统。

2018年,我们首次提出了“你是否会向别人推荐……”这种净推荐值(Net Promoter Score,简称NPS)的问题,最后得了61分。今年,NPS的统计结果基本保持不变(60%,67%的“推荐者”减去7%的“批评者”)。

Go的使用

Go最常见的用途仍然是构建API/RPC服务(71%)和CLI(62%)。下图显示了自2018年以来的重大变化,但这很可能是选择顺序随机化的结果,过去备选答案都是按字母顺序显示:以’A’开头的4个选项中有3个减少了,而其他所有条件保持稳定或增加。因此,该图的最佳解读为:包含了2016-2018年趋势,但2019年的基线更准确。例如,我们认为自2016年以来,构建返回HTML的Web服务的开发人员比例一直在下降,但由于这个备选答案始终位于一长串备选答案的最底部,因此可能被低估了。我们还按照规模和行业进行了分类,但没有发现显著差异:Go的用途大致相同,无论是在小型科技创业公司还是大型零售企业。

还有一个相关的问题询问了开发人员使用Go的更广泛的领域。到目前为止,最常见的领域是Web开发(66%),其他常见的领域包括数据库(45%)、Web编程(42%)、系统编程(38%)和开发运维任务(37%)。

除了开发人员构建的产品,我们还询问了他们使用的一些开发技术。绝大多数开发人员表示,他们依赖文本日志进行调试(88%),而他们的自由输入答复表明,这是因为很难找到有效的代替工具。然而, 本地单步调试(例如使用Delve)、性能分析和使用竞争检测器进行测试的情况并不少见,约有50%的开发人员使用了至少一种技术。

关于软件包管理,我们发现绝大多数开发人员均采用了Go模块(89%)。对于开发人员来说,这是一个巨大的转变,似乎整个社区都同时经历了这种转变。

我们还发现,75%的开发人员都为生产使用评估了Go的当前版本,其中12%的开发人员都在等待下一个发布周期。这表明大多数Go开发人员都在使用(或至少尝试使用)当前或以前的稳定版本,这突出表明了平台即服务提供商快速支持Go最新稳定版本的重要性。

云服务中的Go

Go的设计考虑到了现代分布式计算,我们希望继续改善开发人员使用Go构建云服务的体验。今年,我们还提出了有关云开发的问题,目的是更好地了解开发人员与云提供商的合作方式,他们对当前开发人员体验的满意程度以及有待改进的地方。如前所述,2018年的部分结果出现了异常,例如拥有自家服务器的组织特别少,而GCP部署格外高。

我们看到两个明显的趋势:

1.全球三大云提供商( 亚马逊AWS 、Google Cloud Platform和微软 Azure )在开发人员中间的使用率均呈上升趋势,而每年使用其他提供商的比例都较小。

2.最常见的两种部署包括:自行部署到公司自家服务器(44%,继续呈下降趋势),与部署到AWS(42%)。

至于开发人员使用的云平台类型,我们可以看到主流提供商之间的差异。部署到AWS和Azure的开发人员最常使用VM(分别为65%和51%),而部署到GCP的开发人员使用托管Kubernetes平台(GKE,64%)的比例是VM的两倍(35%)。我们还发现,部署到AWS的开发人员使用托管无服务器平台(AWS Lambda,33%)的比例与使用托管Kubernetes平台的比例基本相同(32%)。GCP(17%)和Azure(7%)的开发人员使用无服务器平台的比例均较低,而根据自由输入表明,主要原因是这些平台迟迟无法支持最新的Go运行。

总体而言,大多数开发人员对于这三大主流云提供商上Go的使用感到满意。开发人员对于部署到AWS(80%)和GCP(78%)的满意度非常接近。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,以及团队在使用其他编程语言),我们还没有直接的技术解决方案,但是我们可以解决其他阻碍因素。因此,今年我们在调查问卷中要求开发人员提供更详细的信息,以便我们了解如何更好地帮助开发人员增加对Go的使用。本节其余的图表都是我们根据开发人员自由输入进行了手动分类,因此类别数量较多。对于每个图,总计比例不到3%的类别都归入了“其他”。有的答案可能提到了多个主题,因此这些图的总和不等于100%。

在说Go缺乏所需语言功能的25%开发人员中,有79%指出泛型是缺失的关键性功能。22%的开发人员指出错误处理有待改进(在Go 1.13的变化之上),还有13%的开发人员要求增加函数编程功能,特别是内置的map/filter/reduce功能。需要明确的是,这些数字的基数是那些说如果不是因为Go缺乏一个或多个关键功能他们就会使用Go的开发人员,而不是所有调查对象。

至于表示Go不是“真正意义上的编程语言”的原因和情况多种多样。最常见的是这些开发人员从事某种形式的前端开发(22%),例如Web、桌面或移动的GUI。另一种普遍的回答是,开发人员说他们已经使用一种主流的语言工作了很多年(9%),换成另一种语言的难度较大。有些开发人员还告诉我们他们更喜欢哪个领域(或简单地提到另一个领域,却没有提及另一种更常见的语言),我们通过下图“I work on [领域]”的部分表示。开发人员提到的另一个首要原因是他们需要更好的性能(9%),特别是对于实时计算。

开发人员报告的最大难题与去年基本一致。Go缺乏通用性和模块/软件包管理仍然是最主要的问题(分别占15%和12%),并且强调工具问题的比例有所增加。这些数字与上面的图表不同,因为这个问题都是由开发人员提出的,无论他们认为阻止他们使用Go的最大难题是什么。这三个方面都是今年Go团队关注的领域,我们希望在未来几个月中极大地改善开发人员的体验,尤其是在模块、工具和入门体验方面。

使用任何一种语言来诊断故障和性能问题都可能是一项难题。开发人员告诉我们,这两个问题的最大挑战都不是Go的实现或工具所特有的,而是一个根本的问题:开发人员对知识、经验或最佳实践的匮乏。我们希望在今年晚些时候,通过文档和其他教育材料来帮助解决这些知识上的问题。其他的主要问题则涉及工具,尤其是在学习/使用Go的调试和概要分析工具时,在成本/收益方面存在不利的取舍,以及工具在各种环境下工作的难度(例如,在容器中进行调试,或获取生产系统的性能概况)。

最后,我们还询问了开发人员哪些因素能够最大限度地提升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进行开发时,克服各种难题依赖的各种来源(几乎都来自社区)和方式。确实,对于许多使用Go的开发人员来说,这可能是他们与更大社区互动的主要机会之一:随着社区的发展,我们看到没有参与Go相关活动的开发人员比例越来越高。2019年,该比例几乎达到了三分之二(62%)。

由于Google范围内的隐私权准则更新,我们不能询问开发人员所在的国家/地区。我们只能询问他们的口头/书面首选语种,但也可以大致代表Go在全球范围内的使用,好处是为潜在的本地化工作提供了数据 。

由于此次调查问卷采用了英文,因此很有可能偏向于讲英语的人和以英语为第二或第三语种的人群。因此,非英语的人数应该代表了Go全球人数的最小值,而非近似值。

我们发现12%的开发人员是传统意义上的少数群体(例如种族、性别等),3%为女性。我们强烈怀疑这3%不足以代表Go社区的女性。例如,我们知道参与StackOverflow开发人员调查的美国女性(11%)是美国就业数据得出的预期值的一半(20%)。由于我们不知道美国女性的参与人数,因此无法从这些数字中推断出实际的比例是否高于3%。此外,GDPR要求我们改变对敏感信息的询问方式,其中包括性别和少数群体。不幸的是,这些变化导致我们无法将这些数字与往年进行有效的比较。

针对“Go社区很热情”这个问题,非少数群体的开发人员表示不赞同的比例为4%,而来自少数群体或不愿回答该问题的开发人员表示不赞同的比例则更高:8%,这表明我们需要持续开展宣传工作的重要性。

参考链接:

今日福利

遇见大咖

由 CSDN 全新专为技术人打造的高端对话栏目《大咖来了》来啦!

CSDN 创始人&董事长、极客帮创投创始合伙人 蒋涛 携手 京东集团 技术副总裁、IEEE Fellow、京东人工智能研究院常务副院长、深度学习及语音和语言实验室负责人何晓冬,来也科技 CTO 胡一川,共话中国 AI 应用元年来了,开发者及企业的路径及发展方向!

相关文章