Go 部落格
Go 開發者調查 2019 結果
熱烈的回應!
我想首先對參與今年調查的數千名 Go 開發者表示巨大的 感謝。2019 年,我們收到了 10,975 份回覆,幾乎是 去年的兩倍!我代表團隊其他成員,無論如何也無法充分表達我們對您抽出時間和精力告訴我們您使用 Go 體驗的感激之情。謝謝!
關於往年的說明
細心的讀者可能會注意到,我們的同比比較資料與我們過去分享的資料不完全吻合。原因在於,從 2016 年到 2018 年,我們計算每個問題的百分比時,使用了開始調查的總人數作為分母。雖然這很一致,但忽略了並非所有人都完成調查的事實——高達 40% 的參與者在到達最後一頁之前就停止了,這意味著調查後期出現的問題表現得更差,僅僅是因為它們靠後。因此,今年我們重新計算了所有結果(包括本文中顯示的 2016-2018 年回覆),使用回答特定問題的人數作為該問題的分母。我們在每張圖表中都包含了 2019 年的回覆數量——以“n=[回覆人數]”的形式顯示在 x 軸或圖表的圖例中——以便讀者更好地理解每個發現的證據權重。
同樣地,我們瞭解到在先前的調查中,回覆列表中靠前的選項回覆率不成比例地高。為了解決這個問題,我們在調查中添加了隨機化元素。我們的一些多項選擇題的選項列表沒有邏輯順序,例如“我在 Go 中編寫以下內容:[應用程式型別列表]”。之前這些選項是按字母順序排列的,但在 2019 年,它們以隨機順序呈現給每位參與者。這意味著某些問題在 2018 → 2019 年的同比比較是無效的,但 2016-2018 年的趨勢並未失效。您可以將此視為為 2019 年設定一個更準確的基線。對於受訪者可能傾向於掃描特定名稱的情況,例如他們偏好的編輯器,我們保留了按字母順序排列。我們在下面明確指出了哪些問題應用了此規則。
第三個主要變化是改進我們對開放式自由文本回復問題的分析。去年我們使用機器學習粗略地(但快速地)對這些回覆進行了分類。今年,兩位研究人員手動分析並分類了這些回覆,這使得分析更細緻,但無法與去年的資料進行有效比較。就像上面討論的隨機化一樣,這一改變的目的是為 2019 年及以後提供一個可靠的基線。
言歸正傳……
這是一篇長文。以下是主要發現的太長不看版 (tl;dr)
- 我們的受訪者人口統計特徵與 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 老手更有可能聲稱精通 C/C++,而不太可能聲稱精通 JavaScript、TypeScript 和 PHP。需要注意的是,這是自我報告的“精通”;將其視為“熟悉”可能更有幫助。Python 似乎是大多數受訪者熟悉(除 Go 之外)的語言,無論他們使用 Go 多久。
去年我們詢問了受訪者所在的行業,發現大多數人報告在軟體、網際網路或網路服務公司工作。今年看來受訪者代表的行業範圍更廣。然而,我們也簡化了行業列表,以減少潛在重疊類別造成的困惑(例如,2018 年的“軟體”和“網際網路/網路服務”分開的類別在 2019 年合併為“技術”)。因此,這並非嚴格意義上的直接比較。例如,簡化類別列表的一個影響可能是減少了將“軟體”類別用作未明確列出的行業中編寫 Go 軟體的受訪者的通用類別的現象。
Go 是一個成功的開源專案,但這並不意味著使用 Go 的開發者也在編寫免費或開源軟體。與往年一樣,我們發現大多數受訪者並非 Go 開源專案的頻繁貢獻者,75% 的人表示他們“不常”或“從不”貢獻。隨著 Go 社群的擴充套件,我們看到從未貢獻過 Go 開源專案的受訪者比例正在緩慢上升。
開發者工具
與往年一樣,絕大多數調查受訪者表示他們在 Linux 和 macOS 系統上使用 Go。這是我們的受訪者與 StackOverflow 2019 年結果之間一個顯著差異的領域:在我們的調查中,只有 20% 的受訪者將 Windows 作為主要開發平臺,而在 StackOverflow 中,這一比例為 45%。66% 的人使用 Linux,53% 的人使用 macOS——這兩個比例都遠高於 StackOverflow 的受訪者群體,他們報告的比例分別為 25% 和 30%。
編輯器整合的趨勢今年仍在繼續。GoLand 的使用量今年增幅最大,從 24% 上升到 34%。VS Code 的增長放緩,但在受訪者中仍是最受歡迎的編輯器,佔 41%。這兩款編輯器合計現在受到四分之三的受訪者的青睞。
其他所有編輯器都出現了小幅下降。這並不意味著這些編輯器完全不被使用,但它們不是受訪者聲稱他們偏好用於編寫 Go 程式碼的編輯器。
今年我們添加了一個關於內部 Go 文件工具的問題,例如 gddo。一小部分受訪者(6%)報告稱他們的組織執行自己的 Go 文件伺服器,但在大型組織(員工人數至少 5,000 人)的受訪者中,這一比例幾乎翻倍(達到 11%)。對那些表示其組織已停止執行自有文件伺服器的受訪者進行的後續詢問表明,停用伺服器的首要原因是被認為收益較低(23%)與最初設定和維護所需的工作量(38%)相結合。
對 Go 的看法
絕大多數受訪者同意 Go 在他們的團隊中執行良好(86%),並且他們更願意在下一個專案中使用它(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。然而,我們也想了解受訪者喜歡使用哪些其他語言。除了兩個例外:TypeScript(增加了 10 個百分點)和 Rust(增加了 7 個百分點),大多數這些數字與往年沒有顯著變化。當我們按 Go 使用經驗時長細分這些結果時,我們看到了與語言精通程度相同的模式。特別是,Python 是 Go 開發者最有可能也喜歡用其進行構建的語言和生態系統。
2018 年我們首次詢問了“您是否會推薦……”這一淨推薦值 (NPS) 問題,得分是 61。今年我們的 NPS 結果是統計上沒有變化的 60(67% 的“推薦者”減去 7% 的“貶低者”)。
使用 Go
構建 API/RPC 服務(71%)和 CLI(62%)仍然是 Go 最常見的用途。下方的圖表似乎顯示與 2018 年相比有重大變化,但這很可能是選項順序隨機化的結果,以前是按字母順序排列的:以“A”開頭的四個選項中有三個下降,而其他所有選項都保持穩定或增加。因此,最好將此圖表解釋為 2019 年更準確的基線,以及 2016-2018 年的趨勢。例如,我們認為自 2016 年以來構建返回 HTML 的 Web 服務的受訪者比例一直在下降,但可能被低估了,因為這個回覆總是位於長列表的底部。我們還按組織規模和行業進行了細分,但沒有發現顯著差異:受訪者使用 Go 的方式似乎大致相似,無論他們是在小型科技初創公司還是大型零售企業工作。
一個相關問題詢問了受訪者使用 Go 的更廣泛領域。迄今為止最常見的領域是 Web 開發(66%),但其他常見領域包括資料庫(45%)、網路程式設計(42%)、系統程式設計(38%)和 DevOps 任務(37%)。
除了受訪者正在構建的內容之外,我們還詢問了他們使用的一些開發技術。絕大多數受訪者表示他們依賴文字日誌進行除錯(88%),他們的自由文本回復表明這是因為替代工具難以有效使用。然而,本地逐步除錯(例如使用 Delve)、效能分析以及使用競態檢測器進行測試並非不常見,大約 50% 的受訪者至少依賴其中一種技術。
關於包管理,我們發現絕大多數受訪者已經採用了 Go Modules(89%)。這對於開發者來說是一個巨大的轉變,並且幾乎整個社群似乎都在同時經歷這一過程。
我們還發現 75% 的受訪者評估當前 Go 版本用於生產環境,另有 12% 的人等待一個釋出週期。這表明絕大多數 Go 開發者正在使用(或至少嘗試使用)當前或前一個穩定版本,突顯了平臺即服務提供商快速支援 Go 新穩定版本的重要性。
雲中的 Go
Go 在設計時就考慮到了現代分散式計算,我們希望繼續改進使用 Go 構建雲服務的開發者體驗。今年我們擴充套件了關於雲開發的問題,以更好地瞭解受訪者如何與雲提供商合作,他們對當前的開發者體驗滿意之處,以及可以改進的地方。如前所述,2018 年的一些結果似乎是異常值,例如自有伺服器的意外低結果,以及 GCP 部署的意外高結果。
我們看到了兩個明顯的趨勢
- 全球三大雲提供商(亞馬遜雲服務 Amazon Web Services、谷歌雲平臺 Google Cloud Platform 和微軟 Azure Microsoft Azure)在調查受訪者中的使用量似乎都在呈上升趨勢,而大多數其他提供商每年被較小比例的受訪者使用。
- 部署到自有或公司伺服器的本地部署持續減少,現在在統計上與 AWS 持平(44% 對 42%),成為最常見的部署目標。
來看受訪者使用的雲平臺型別,我們看到了主要提供商之間的差異。部署到 AWS 和 Azure 的受訪者最有可能直接使用虛擬機器(分別為 65% 和 51%),而部署到 GCP 的受訪者使用託管 Kubernetes 平臺(GKE,64%)的可能性幾乎是使用虛擬機器(35%)的兩倍。我們還發現,部署到 AWS 的受訪者使用託管 Kubernetes 平臺(32%)的可能性與使用託管無伺服器平臺(AWS Lambda,33%)的可能性相當。GCP(17%)和 Azure(7%)使用無伺服器平臺的受訪者比例較低,自由文本回復表明主要原因是這些平臺延遲支援最新的 Go 執行時。
總體而言,大多數受訪者對在所有三個主要雲提供商上使用 Go 表示滿意。受訪者報告了在 AWS(80% 滿意)和 GCP(78%)上使用 Go 開發的相似滿意度水平。Azure 的滿意度評分較低(57% 滿意),自由文本回復表明主要原因是認為 Go 在該平臺上缺乏“一流支援”(佔自由文本回復的 25%)。這裡的“一流支援”是指始終跟上最新的 Go 版本,並確保在新功能釋出時可供 Go 開發者使用。這也是使用 GCP 的受訪者報告的相同主要痛點(14%),特別關注無伺服器部署中對最新 Go 執行時的支援。相比之下,部署到 AWS 的受訪者最有可能表示 SDK 可以改進,例如更地道(21%)。SDK 改進也是 GCP(9%)和 Azure(18%)開發者的第二常見請求。
痛點
受訪者表示他們無法更多地使用 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 的受訪者子集,而不是全部調查受訪者。
那些認為 Go“不適合”他們工作的受訪者給出了各種各樣的原因和用例。最常見的原因是他們從事某種形式的前端開發(22%),例如 Web、桌面或移動應用的 GUI。另一個常見回覆是受訪者表示他們在某個領域工作,該領域已經有占主導地位的語言(9%),這使得使用 Go 成為挑戰。一些受訪者還告訴了我們他們指的是哪個領域(或只是提及了某個領域而沒有提及另一種語言更常見),我們在下方透過“我從事 [領域]”行展示。受訪者提到的另一個主要原因是對更高效能的需求(9%),特別是對於即時計算。
受訪者報告的最大挑戰與去年基本一致。Go 缺乏泛型和模組/包管理仍然位居榜首(分別佔回覆的 15% 和 12%),並且突出工具問題的受訪者比例有所增加。這些數字與上面的圖表不同,因為這個問題是針對所有受訪者提出的,無論他們認為自己最大的 Go 採用障礙是什麼。這三個問題都是 Go 團隊今年的重點關注領域,我們希望在未來幾個月內大幅改善開發者體驗,特別是在模組、工具以及入門體驗方面。
在任何語言中診斷故障和效能問題都可能具有挑戰性。受訪者告訴我們,他們在這兩個方面的最大挑戰並非 Go 的實現或工具特有的問題,而是一個更基礎的問題:自我報告的知識、經驗或最佳實踐的不足。我們希望在今年晚些時候透過文件和其他教育材料來幫助彌補這些知識差距。其他主要問題確實涉及工具,特別是學習/使用 Go 除錯和效能分析工具時感知到的不利成本/收益權衡,以及使工具在各種環境中工作(例如在容器中除錯,或從生產系統獲取效能分析檔案)的挑戰。
最後,當我們問什麼會最能改善受訪者編輯環境中的 Go 支援時,最常見的回覆是希望對語言伺服器(gopls,19%)進行總體改進或提供更好的支援。這是預料之中的,因為 gopls 取代了大約 80 個現有工具,並且仍處於 Beta 階段。當受訪者更具體地說明他們希望看到哪些方面改進時,他們最有可能提及除錯體驗(14%)以及更快或更可靠的程式碼補全(13%)。一些參與者還明確提到了使用 gopls 時需要頻繁重啟 VS Code(8%);自本次調查開展以來(2019 年 11 月末至 12 月初),許多 gopls 的改進已經實現,並且這仍然是團隊的高度優先領域。
Go 社群
大約三分之二的受訪者使用 Stack Overflow 來解答他們的 Go 相關問題(64%)。其他主要的解答來源是 godoc.org(47%)、直接閱讀原始碼(42%)和 golang.org(33%)。
上一張圖表的長尾突顯了受訪者在 Go 開發過程中依賴各種不同的來源(幾乎全部由社群驅動)和方式來克服挑戰。確實,對於許多 Gophers 來說,這可能是他們與更廣泛社群互動的主要方式之一:隨著我們社群的擴充套件,我們看到不參加任何 Go 相關活動的受訪者比例越來越高。2019 年,這一比例接近三分之二的受訪者(62%)。
由於更新的 Google 全球隱私指南,我們不再能詢問受訪者居住在哪個國家。相反,我們詢問了偏好的口頭/書面語言,以此作為 Go 全球使用情況的一個非常粗略的衡量指標,同時為潛在的本地化工作提供資料。
由於本次調查採用英語,可能存在對英語使用者以及將英語作為常用第二或第三語言地區的人們的強烈偏見。因此,非英語數字應被解讀為可能的最小值,而不是 Go 全球使用者群的近似值。
我們發現 12% 的受訪者認同傳統上代表性不足的群體(例如,民族、性別認同等),3% 的人認同自己是女性。(這個問題本應使用“woman”而不是“female”。我們在 2020 年的調查草案中已經糾正了這個錯誤,併為此道歉。)我們強烈懷疑這 3% 低估了 Go 社群中的女性人數。例如,我們知道美國女性軟體開發者回復 StackOverflow 開發者調查的比例 約為基於美國就業資料的預期比例的一半(11% 對 20%)。由於我們不知道美國受訪者的比例,我們無法安全地從這些數字中推斷,只能說實際比例可能高於 3%。此外,GDPR 要求我們改變詢問敏感資訊的方式,其中包括性別和傳統上代表性不足的群體。不幸的是,這些變化導致我們無法將這些資料與往年進行有效比較。
認同代表性不足群體或選擇不回答此問題的受訪者,對“我在 Go 社群感到受歡迎”這一陳述表示不同意的比例高於那些不認同代表性不足群體的人(8% 對 4%),這突顯了我們持續外展工作的重要性。
結論
我們希望您喜歡看到我們 2019 年開發者調查的結果。瞭解開發者的經驗和挑戰有助於我們規劃和優先安排 2020 年的工作。再次對所有為本次調查做出貢獻的人表示巨大的感謝——您的反饋正在幫助指引 Go 未來一年的方向。
下一篇文章:VS Code Go 擴充套件加入 Go 專案
上一篇文章:Go、Go 社群與疫情
部落格索引