Go 部落格

2021 年 Go 開發人員調查結果

Alice Merrick
2022 年 4 月 19 日

非常感謝社群提供的驚人回覆!

2021 年,我們在 10 月 26 日至 11 月 16 日期間進行了 Go 開發人員調查,並收到 11,840 份回應,這是我們在過去 6 年舉行這項調查以來最高的調查參與率!感謝您花時間提供社群這些關於使用 Go 的洞察見解。

重點

  • 大多數的回應都與前幾年一致。例如,對 Go 的滿意度仍然很高,達到 92%,而且 75% 的受訪者在工作中使用 Go。
  • 今年我們使用 Go VS Code 外掛程式隨機抽樣了一些參與者,這導致對調查做出回應的人有所改變。
  • 缺少的關鍵函式庫、語言功能和基礎架構是使用 Go 時最常遇到的 障礙。(注意:這項調查在具備一般性的 Go 1.18 版本發布之前進行,一般性是最常被回報為缺少的功能)
  • 受訪者希望優先改進偵錯和相依性管理功能。
  • 使用模組時遇到的最大的挑戰與版本控管、使用私有儲存庫和跨模組流程有關。(註:這項調查是在導入工作空間的 Go 1.18 版本推出之前進行的,此版本已解決許多這方面的問題。)
  • 81% 受訪者對 Go 專案的長期發展方向抱持信心

我們從哪些人聽到回饋?

我們的受訪者特徵與往年相當穩定(參閱 2020 年結果)。與過去幾年一致,Go 主要用於技術產業。70% 受訪者為軟體開發人員,有些人從事 IT 或 DevOps,76% 受訪者表示他們在工作上會以 Go 編寫程式碼。受訪者工作產業的長條圖 長條圖顯示 Go 在工作上的使用頻率高於工作外 Go 用途的長條圖,其中 API/RPC 服務和 CLI 應用程式最為常見

2021 年的一些新受訪者特徵

  • 大多數受訪者描述其公司為企業或中小型企業,約有四分之一的人描述其公司為新創公司。顧問公司和公共機構則很少見。
  • 絕大多數受訪者的工作團隊人數不到 10 人。
  • 超過一半 (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 評估使用其他語言的狀況。43% 的受訪者表示他們曾評估從 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 個 GopherCoin 可以花費在改善以下 Go 使用面向。您會如何分配這些代幣?」特別獲得較多 GopherCoin 的兩個領域是相依性管理(使用模組)和除錯,這是我們將在 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

我們應該在哪些領域投資於最佳實務文件?

一半的回覆者想要更多關於效能最佳化和專案目錄結構的最佳實務指南。毫不意外的,較新的 Go 使用者(使用 Go 不滿 1 年)比有經驗的 Go 使用者需要更多指南,不過最重要的領域在兩組中具一致性。值得注意的是,較新的 Go 使用者比有經驗的 Go 使用者要求更多關於並發處理的指南。

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

模糊測試

大多數受訪者不熟悉模糊測試,或仍視自己為模糊測試新手。根據這個結果,我們計畫 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 程式佈署到虛擬機器。

Bar charts of proportion of services being used with each provider

今年變更

去年,我們推出了模組化問卷設計,這樣我們就能提出更多問題,卻不必延長問卷時間。我們今年繼續採用模組化設計,但某些問題已不再提出,另有一些問題則新增或修改。沒有任何受訪者看到問卷上的所有問題。此外,某些問題由於在先前的問題中已根據選擇性回答,因此範本大小可能小得多。

今年問卷最重大的變更,在於我們招募參與者的方式。在前幾年,我們透過 Go 部落格宣布問卷,接著在 Twitter、reddit 或 Hacker News 等各式社交頻道上傳播。今年,除了透過傳統管道之外,我們還透過 VS Code Go 外掛程式,隨機選擇使用者,並向他們顯示問題,詢問他們是否願意參與問卷調查。藉此建立我們用來比較傳統管道中自選受訪者的隨機範本,並協助找出自選樣本偏差的潛在影響。

Proportion of respondents from each source

我們近三分之一的受訪者是透過這種方式徵得,因此他們的回答可能對我們今年的調查結果帶來顯著影響。我們在以下方面看到這兩組人馬之間的一些主要差異

更多 Go 新手

隨機選取的樣本中新加入 Gophers(使用 Go 不到一年的開發人員)所佔的比例較高。可能是這些新加入的 Gophers 與 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 成為一個對所有類型 Gophers 開放包容的社群。

了解開發人員的體驗和挑戰有助於我們衡量進度,並引導 Go 的未來。再次感謝所有參與本次調查的人員,沒有您,我們不可能辦到。希望明年也能看到您!

下一篇:分享您使用 Go 開發時的意見回饋
上一篇:何時使用泛型
部落格索引