Go 部落格

Go 開發者調查 2021 年結果

Alice Merrick
2022 年 4 月 19 日

非常感謝社群的積極響應!

2021 年,我們在 10 月 26 日至 11 月 16 日期間進行了 Go 開發者調查,共收到 11,840 份回覆,這是我們舉辦調查 6 年以來參與人數最多的一次!感謝您抽出寶貴時間,為社群提供關於使用 Go 體驗的寶貴見解。

亮點

我們聽取了誰的意見?

我們的人口統計資料多年來一直相當穩定(檢視 2020 年結果)。與往年一樣,Go 主要用於科技行業。70% 的受訪者是軟體開發人員,少數是 IT 或 DevOps 人員,76% 的受訪者表示他們在工作中從事 Go 程式設計。受訪者所在行業條形圖 條形圖顯示 Go 在工作中比工作外使用更多 Go 用途條形圖,其中 API/RPC 服務和 CLI 應用最常見

2021 年的一些新人口統計資料

  • 大多數受訪者將他們的組織描述為企業或中小型企業,約有四分之一的受訪者將他們的組織描述為初創公司。諮詢公司和公共機構的比例要少得多。
  • 絕大多數受訪者在少於十人的團隊中工作。
  • 超過一半(55%)的受訪者在工作中每天使用 Go。工作之外使用 Go 的頻率較低。
Bar chart of organization type where enterprise is the most common response Bar chart of team size where 2 to 5 is the most common size Frequency of using Go at work versus outside of work where using Go at work is most often on a daily basis and outside of work is less common and most often on a weekly basis

性別認同

我們在調查中詢問性別認同,因為它能讓我們瞭解調查結果中誰得到了體現,併為衡量社群的包容性增加了另一個維度。Go 團隊重視多樣性和包容性,這不僅是因為它是正確的事情,還因為多元化的聲音有助於我們做出更好的決策。今年我們重新措辭了性別認同問題,使其更能包容其他性別認同。與往年相比,認同為女性的比例大致相同(2%)。在隨機抽樣的群體中也是如此,這表明這不僅僅是由於抽樣原因。受訪者性別認同條形圖,92% 的受訪者認同為男性

輔助技術

今年我們再次發現,約有 8% 的受訪者使用某種形式的輔助技術。大多數挑戰與對 Go 相關網站或程式碼編輯器需要更高的對比度主題和更大的字型大小有關;我們計劃在今年晚些時候針對網站反饋採取行動。這些可訪問性需求是我們為 Go 生態系統做出貢獻時都應該牢記的。

深入瞭解 Go 採用的挑戰

今年我們修改了問題,以針對 Go 未被採用的實際情況及其原因。首先,我們詢問了受訪者在過去一年中是否曾評估過將另一種語言與 Go 進行比較。80% 的受訪者表示他們曾評估過切換到 Go、從 Go 切換,或者在沒有現有語言的情況下采用 Go。其中 80% 的評估主要是出於業務原因。

Chart showing proportion of respondents who evaluated Go against another language in the last year

我們曾預料到 Go 最常見的用例將是評估 Go 時最常見的預期用途。API/RPC 服務是迄今為止最常見的用途,但令人驚訝的是,資料處理是第二常見的預期用例。

Chart showing the kind application they considered using Go

在評估過 Go 的受訪者中,75% 的人最終使用了 Go。(當然,由於幾乎所有調查受訪者都表示使用 Go,我們可能無法聽到那些評估過 Go 但最終決定不使用它的開發者的聲音。)

Chart showing proportion who used Go compared to those who stayed with the current language or chose another language

對於那些評估過 Go 但未使用它的人,我們接著詢問了是什麼挑戰阻礙了他們使用 Go,以及其中哪一項是主要障礙。顯示使用 Go 障礙的圖表

這些結果所描繪的圖景支援了之前的發現,即缺少特性和缺乏生態系統/庫支援是阻礙 Go 採用的最重要的技術障礙。

我們詢問了關於缺失特性或庫的更多細節,發現泛型是最常見的關鍵缺失特性——我們預計在 Go 1.18 引入泛型後,這將成為一個不太重要的障礙。下一個最常見的缺失特性與 Go 的型別系統有關。我們希望在做出額外更改之前,看看引入泛型如何影響或解決 Go 型別系統相關的潛在需求。目前,我們將收集更多關於這些需求背景的資訊,並可能在未來探索滿足這些需求的不同方式,例如透過工具、庫或型別系統的更改。

至於缺失的庫,對於什麼補充能夠解鎖最大比例的想要採用 Go 的使用者,沒有明確的共識。這需要進一步的探索。

那麼,當他們不選擇 Go 時,用什麼替代了呢?

Chart of which languages respondents used instead of Go

Rust、Python 和 Java 是最常見的選擇。Rust 和 Go 擁有互補的特性集,因此當 Go 無法滿足專案功能需求時,Rust 可能是一個不錯的選擇。使用 Python 的主要原因是缺少庫和現有的基礎設施支援,因此 Python 龐大的包生態系統可能使其難以切換到 Go。同樣,使用 Java 的最常見原因是 Go 缺少功能,這可以透過 1.18 版本中引入的泛型來緩解。

Go 的滿意度和優先順序

讓我們看看 Go 表現良好的領域以及可以改進的地方。

與去年一致,92% 的受訪者表示他們在過去一年中使用 Go 時非常滿意或有些滿意。

Overall satisfaction on a 5 points scale from very dissatisfied to very satisfied

社群態度的年同比趨勢略有波動。使用 Go 不足 3 個月的人往往不太同意這些說法。受訪者越來越發現 Go 對公司的成功至關重要。

Attitudes around using Go at work Community attitudes around welcomeness and confidence in direction of the Go project

優先順序

在過去幾年中,我們請受訪者根據他們的滿意度和重要性對特定領域進行評分;我們利用這些資訊來識別對受訪者來說重要但又不滿意的領域。然而,大多數這些領域在重要性和滿意度方面只顯示出微小的差異。

Scatter plot of importance compared to satisfaction showing most areas have high satisfaction and where binary size is less important than other areas

今年我們引入了一個新問題,以探索對特定領域的工作進行優先排序的替代方法。“假設你有 10 個 GopherCoins 用於改進以下 Go 工作方面的方面。你會如何分配你的硬幣?”有兩個領域脫穎而出,獲得了顯著更多的 GopherCoins,分別是依賴管理(使用模組)和診斷 bug,這些是我們將在 2022 年投入資源的領域。

Overall sum of coins spent on each area for improvement

使用模組時的挑戰

最常見的與模組相關的挑戰是處理多個模組(佔受訪者的 19%),其次是關於版本控制的評論(包括對提交穩定 v1 API 的猶豫)。與版本控制相關,9% 的回覆討論了版本管理或更新依賴項。排名前五的是關於私有倉庫的挑戰(包括與 GitLab 的身份驗證)以及記住不同的 `go mod` 命令以及理解它們的錯誤訊息。

學習 Go

今年我們採用了一種新的結構來探索不同 Go 經驗水平之間的相對生產力。絕大多數受訪者(88%)同意他們定期達到高水平的生產力,85% 同意他們在編寫 Go 程式碼時通常能夠達到心流狀態。隨著 Go 經驗的增加,同意的比例也會增加。

Charts showing proportion of respondents who agree they feel productive using Go and can achieve a state of flow while writing in Go

我們應該在哪些方面投資最佳實踐文件?

一半的受訪者希望在效能最佳化和專案目錄結構的最佳實踐方面獲得更多指導。不出所料,新 Gopher(使用 Go 不足 1 年)比有經驗的 Gopher 需要更多的指導,儘管這兩個群體關注的領域是一致的。值得注意的是,新 Gopher 對併發方面的指導需求比有經驗的 Gopher 更大。

Chart showing which areas respondents want more guidance on best practices

開發人員如何學習一門新語言?

大約一半的受訪者在工作中學習了一門新語言,但近一半(45%)在學校或工作之外學習。受訪者最常(90%)報告獨自學習。在那些表示在工作中學習的人中,儘管可能有集體學習的機會,但 84% 的人是獨自學習而不是集體學習。

Chart showing half of respondents learned a new language at work while 45% learned a new language outside of school or work Chart showing 90% of respondents learned their last new language alone

許多頂級資源都強調了良好文件的重要性,但現場教學在語言學習方面也是一個特別有用的資源。

Chart showing which resources are most helpful for learning a new programming language where reading reference docs and written tutorials are most useful

開發者工具和實踐

與往年一樣,絕大多數調查受訪者表示在 Linux(63%)和 macOS(55%)系統上使用 Go。主要在 Linux 上開發的使用者比例似乎隨時間略有下降。

Primary operating system from 2019 to 2021

目標平臺

超過 90% 的受訪者目標平臺是 Linux!即使在 macOS 上開發的人比 Windows 上的多,但他們部署到 Windows 的頻率比部署到 macOS 的頻率更高。

Chart showing which platforms respondents deploy their Go code on

模糊測試

大多數受訪者不熟悉模糊測試(fuzzing),或者仍然認為自己是模糊測試的新手。基於這一發現,我們計劃 1)確保 Go 的模糊測試文件除了 Go 中模糊測試的具體細節外,還解釋模糊測試的概念,以及 2)設計可操作的輸出和錯誤訊息,以幫助模糊測試新手成功應用它。

Chart showing proportion of respondents who have used fuzzing

雲計算

Go 的設計理念是面向現代分散式計算,我們希望繼續改善使用 Go 構建雲服務的開發者體驗。今年,將 Go 程式部署到三大全球雲提供商(Amazon Web Services、Google Cloud Platform 和 Microsoft Azure)的受訪者比例保持不變,而部署到自營或公司自有伺服器的本地部署則繼續下降。

Bar chart of cloud providers used to deploy Go programs where AWS is the most common at 44%

部署到 AWS 的受訪者使用託管 Kubernetes 平臺的比例有所增加,目前佔部署到三大雲提供商中任何一個的 35%。所有這些雲提供商的將 Go 程式部署到 VM 的使用者比例都有所下降。

Bar charts of proportion of services being used with each provider

今年的變化

去年我們引入了模組化調查設計,以便在不增加調查長度的情況下提出更多問題。今年我們繼續採用模組化設計,雖然一些問題被停用,另一些問題被新增或修改。沒有受訪者看到調查的所有問題。此外,由於一些問題是根據之前的回答選擇性提出的,因此可能樣本量要小得多。

今年調查最顯著的變化在於我們招募參與者的方式。往年,我們透過 Go Blog 釋出調查資訊,然後在 Twitter、Reddit 或 Hacker News 等各種社交渠道上傳播。今年,除了傳統渠道外,我們還透過 VS Code Go 外掛隨機選擇使用者,向他們展示一個詢問是否願意參與調查的提示。這形成了一個隨機樣本,我們將其與來自傳統渠道的自願選擇的受訪者進行比較,並幫助識別了選擇性偏差的潛在影響。

Proportion of respondents from each source

近三分之一的受訪者是透過這種方式獲得的,因此他們的回覆有可能對我們今年看到的回覆產生重大影響。這兩個群體之間的一些關鍵差異是:

更多新 Gopher

隨機抽樣群體中新 Gopher(使用 Go 不足一年的使用者)的比例更高。這可能是因為新 Gopher 對 Go 生態系統或社交渠道的瞭解較少,因此他們更有可能在 IDE 中看到調查廣告,而不是透過其他方式找到。無論原因如何,很高興能聽到來自 Go 社群更廣泛的聲音。

Comparison of proportion of respondents with each level of experience for randomly sampled versus self-selected groups

更多 VS Code 使用者

毫不奇怪,91% 的來自 VS Code 外掛的受訪者在 Go 開發時更喜歡使用 VS Code。因此,今年我們看到了 VS Code 編輯器偏好度大大提高。當我們排除隨機樣本時,結果與去年沒有統計學上的顯著差異,因此我們知道這是由於我們的樣本變化而不是整體偏好造成的。同樣,VS Code 使用者也比其他受訪者更可能在 Windows 上進行開發,因此我們看到今年對 Windows 的偏好略有增加。我們還看到了一些與 VS Code 編輯器使用相關的特定開發技術的使用發生了輕微變化。

Grouped bar chart of which editor respondents prefer from each sample group Grouped bar chart of primary operating system respondents use to develop go on Grouped bar chart showing which techniques respondents use when writing in Go

不同的資源

隨機抽樣群體不太可能將 Go Blog 等社交渠道列為他們回答 Go 相關問題的首選資源,因此他們可能不太可能在這些渠道上看到調查廣告。

Grouped bar chart showing the top resources respondents use when writing in Go

結論

感謝您與我們一起回顧 2021 年開發者調查結果!重申一下,一些關鍵要點:

  • 我們的大多數年度指標保持穩定,大部分變化歸因於我們樣本的變化。
  • 對 Go 的滿意度仍然很高!
  • 四分之三的受訪者在工作中使​​用 Go,許多人每天都使用 Go,因此幫助您完成工作是首要任務。
  • 我們將優先改進除錯和依賴管理工作流程。
  • 我們將繼續努力使 Go 成為一個包容所有 Gopher 的社群。

瞭解開發人員的經驗和挑戰有助於我們衡量進展並指導 Go 的未來。再次感謝所有為本次調查做出貢獻的人——沒有你們,我們無法完成。希望明年能再次見到您!

下一篇文章:分享您對 Go 開發的反饋
上一篇文章:何時使用泛型
部落格索引