Go 部落格

2019 年 Go 開發人員調查結果

Todd Kulesza
2020 年 4 月 20 日

多麼熱烈的反應!

我首先要向參與今年調查的數千名 Go 開發人員致上最誠摯的感謝。在 2019 年中,我們收到了 10,975 份答覆,幾乎比去年多了一倍!我謹代表其他團隊成員強調,我們非常感謝您撥冗向我們分享您使用 Go 的經驗。謝謝!

關於前幾年的說明

精明的讀者可能會注意到,我們的年對年比較與我們過去分享的數字不太相符。原因是從 2016 年到 2018 年,我們使用開始調查的人數的總和,作為每個問題的百分比分母。雖然這樣很不錯且一致,但它忽略了並非所有人都會完成調查的事實—高達 40% 的參與者在到達最後一頁前就停止了,這表示出現在調查中較後面的問題看起來表現較差,只是因為它們出現在後面。因此,今年我們重新計算了我們所有的結果(包含這篇文章中顯示的 2016-2018 年的回應),使用回答特定問題者的數量作為該問題的分母。我們在每個圖表中都包含了 2019 年的回應數量—以「n=[回應者數量]」的形式顯示在 x 軸上或圖表的圖示中—提供讀者更清楚了解支撐每項發現的證據。

類似地,我們了解到在先前的調查中,出現在回應清單較早選項的回應率不成比例。為了處理這個問題,在調查中我們增加了隨機元素。我們的部分多選題問題有清單選項沒有邏輯順序,例如「我在 Go 中撰寫下列內容:[應用程式類型清單]」。以前這些選項會按字母順序排列,但針對 2019 年,它們會以隨機順序呈現給每個參與者。表示某些問題的年對年比較對於 2018 → 2019 是無效的,但是 2016-2018 年的趨勢並未失效。你可以將這視為為 2019 年設定更精確的基準。在回應者很可能會搜尋特定名稱(例如他們偏好的編輯器)的情況下,我們保留字母順序排列。我們明確指出這適用於下列那些問題。

第三個重大變更是要改善我們對於有開放式、自由文字回應的問題分析。去年我們使用機器學習來大致地(但快速的)分類這些回應。今年,兩位研究人員手動分析和分類這些回應,允許進行更精細的分析,但也無法與去年的數字做有效的比較。就像上面討論的隨機化一樣,這個變更的目的在於為 2019 年之後提供可靠的基準。

不再廢話了...

這是篇長文。以下是我們主要調查結果的重點整理

  • 我們回應者的 demographic 與 Stack Overflow 的調查回應者類似,這提升了我們的信心,確認這些結果可代表更大的 Go 開發者受眾。
  • 多數的回應者每天都使用 Go,而且這個數字每年都在增加。
  • Go 的使用仍然集中在技術公司,但 Go 正 zunehत्या विविध उद्योगांमध्ये सापडत आहे, जसे की अर्थकारण आणि माध्यमे.
  • पद्धतशास्त्रातील बदलांनी आम्हाला दर्शवले की आमच्या वर्ष-दर-वर्षच्या मेट्रिक्सपैकी बहुतेक स्थिर आणि आम्ही पूर्वी जाणत होतो त्यापेक्षा जास्त आहेत.
  • उत्तरदात्याकडे ज्या संघटनेत काम करत आहेत त्याचा आकार काहीही असो, एपीआय/आरपीसी सेवा आणि सीएलआयमध्ये बांधणी यासारख्या सारख्या समस्या सोडवण्यासाठी गो वापरत आहेत.
  • बहुतेक संघ नवीनतम गो रिलीजवर त्वरीत अद्ययावत करण्याचा प्रयत्न करतात; जेव्हा तृतीय-पक्ष प्रदाते सध्याच्या गो रिलीजला सपोर्ट करण्यास उशीर करतात, तेव्हा ते विकासकांसाठी अॅडॉप्टशन ब्लॉकर बनवते.
  • गो इकोसिस्टममधले जवळपास प्रत्येक जण आता मॉड्यूल्स वापरत आहे, परंतु पॅकेज मॅनेजमेंटविषयी काही गोंधळ आहे.
  • सुधारण्यासाठीच्या उच्च-प्राधान्य असलेल्या भागांमध्ये डिबगिंगसाठी, मॉड्युल्ससह काम करणे आणि क्लाउड सेवांसह काम करणे यासाठीच्या डेव्हलपर एक्सपीरियन्सचा समावेश आहे.
  • व्हीएस कोड आणि गोलॅंडचा वापर वाढला आहे; आता ते 4 पैकी 3 उत्तरदात्यांना आवडते.

आम्ही कोणाकडून ऐकले?

या वर्षी आम्ही या सर्वेक्षणाला प्रत्युत्तर दिलेल्या लोकांना अधिक चांगल्या प्रकारे समजून घेण्यासाठी आम्ही काही नवीन डेमोग्राफिक प्रश्न विचारले. विशेषत: आम्ही व्यावसायिक प्रोग्रामिंग अनुभवाचा कालावधी आणि लोक जिथे काम करतात त्या संघटनांचा आकार विचारला. ते प्रश्न स्टॅकओव्हरफ्लोच्या वार्षिक सर्वेक्षणामध्ये विचारलेल्या प्रश्नांवर आधारित होते आणि आम्हाला दिसलेल्या प्रतिक्रियांचे वितरण स्टॅकओव्हरफ्लोच्या 2019 च्या निकालांच्या खूप जवळ होते. आमचे टेक-अवे म्हणजे या सर्वेक्षणातील उत्तरदात्यांमध्ये व्यावसायिक अनुभवाचे समान स्तर आणि स्टॅकओव्हरफ्लो सर्वेक्षण प्रेक्षकांच्या विविध आकाराच्या संस्थांचे प्रमाणात्मक प्रतिनिधित्व आहे (स्पष्ट फरक असा की आम्ही प्रामुख्याने गोसह काम करणाऱ्या विकासकांकडून ऐकत आहोत). जागतिक स्तरावर अंदाजे 1 दशलक्ष गो विकासकांना हे शोध सामान्य करताना हा आमचा आत्मविश्वास वाढवतो. ही जनसांखिकी प्रश्न आम्हाला भविष्यात हे ओळखण्यास मदत करेल की वर्ष-दर-वर्ष बदल कल्पना किंवा वर्तनातील बदल नसताना सर्वेक्षणाचे उत्तर कोण देत आहे त्यातील बदलाचा परिणाम असू शकतो.

गो अनुभवाकडे पाहताना, आम्ही पाहतो की बहुतेक उत्तरदात्यांनी (56%) गोमध्ये नवीन वापरण्यास सुरुवात केली आहे, त्याचा वापर दोन वर्षांपेक्षा कमी काळ करत आहेत. बहुसंख्य लोकांनी असेही म्हटले की ते कार्यक्षेत्रात (72%) आणि कार्यक्षेत्राबाहेर (62%) गो वापरतात. गो व्यावसायिकरित्या वापरणाऱ्या उत्तरदात्यांचे प्रमाण प्रत्येक वर्षी वाढत चालले आहे.

खाली दिलेल्या चार्टमध्ये आपण पाहू शकता की, 2018 मध्ये आम्ही या संख्यांमध्ये वाढ पाहिली, परंतु या वर्षी ती वाढ अदृश्य झाली. 2018 मध्ये सर्वेक्षणाचे उत्तर देणाऱ्या प्रेक्षकांमध्ये इतर तीन वर्षांच्या तुलनेत लक्षणीय फरक होता हे सूचित करणाऱ्या अनेक संकेतांपैकी हे एक आहे. या प्रकरणात ते कार्यक्षेत्राबाहेर गो वापरण्याची आणि कार्यक्षेत्रात वेगळी भाषा वापरण्याची शक्यता जास्त होती, परंतु आम्ही सर्वेक्षणातील अनेक प्रश्नांमध्ये असेच चूकलेले पाहिले.

使用 Go 時間最長的受訪者與較新的 Go 開發人員背景不同。這些 Go 的資深人士較有可能表示自己精通 C/C++,較不太可能表示自己精通 JavaScript、TypeScript 和 PHP。一個警告是,這是根據自我報告的「專門知識」;也許將其視為「熟悉度」會更恰當。無論他們使用 Go 多久的時間,Python 似乎是除了 Go 以外,最多受訪者熟悉的語言。

去年,我們詢問受訪者工作的產業為何,結果發現大多數受訪者表示在軟體、網際網路或網路服務公司工作。今年的受訪者看來涵蓋了更多元的產業。但是,由於潛在重疊類別可能造成困惑,我們也簡化了產業清單(例如,2018 年「軟體」和「網際網路/網路服務」的獨立類別已合併為 2019 年的「科技」)。因此,這並非嚴格的蘋果對蘋果比較。舉例來說,簡化類別清單可能會減緩「軟體」類別做為受訪者為未明確列出的產業撰寫 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%。加總起來,這兩款編輯器現在為 4 個受訪者中的 3 個所偏好。

其他所有編輯器的使用率都略有降低。這並不表示這些編輯器完全沒人在用,只是受訪者不表示他們喜歡用它們來撰寫 Go 程式碼。

今年我們新增有關內部 Go 文件工具的問題,例如 gddo。一小部分受訪者(6%)表示他們的組織執行其自有的 Go 文件伺服器,然而,當我們針對大型組織(員工至少 5,000 人)的受訪者調查時,這個比例幾乎增加一倍(至 11%)。我們針對表示其組織已停止執行自行文件伺服器的受訪者進行追蹤調查,結果顯示讓他們停用伺服器的主因是預期效益低(23%),與最初設定和維護所需的努力(38%)相比。

對於 Go 的看法

絕大多數的受訪者同意 Go 對其團隊而言運作良好(86%),而且他們偏好將其用於下一個專案(89%)。我們也發現超過一半的受訪者(59%)相信 Go 對其公司的成功至關重要。自 2016 年以來,所有這些指標都保持穩定。

標準化結果更動了前幾年的多數數字。例如,先前同意以下敘述的受訪者比例在 50% 至 60% 之間:「Go 對我的團隊運作良好」,原因是參與者退出;當我們移除從未看過此問題的參與者時,我們發現自 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」開頭的 4 個選項中有 3 個減少,而其他選項則維持穩定或增加。因此,這個圖表最適合解釋為 2019 年更準確的基準,包含了 2016-2018 年的趨勢。例如,我們認為從 2016 年起建立會回傳 HTML 的網路服務的受訪者比例一直在下降,但可能由於這個回應總是位於長長選項清單的底部而未被完整計算。我們也按組織規模和產業進行細分,但沒有發現顯著差異:受訪者使用 Go 的方式似乎大致相同,無論他們是在小型科技新創公司還是大型零售企業工作。

一個相關問題詢問受訪者從事 Go 工作的較大領域。迄今為止,最常見的領域為網路開發(66%),但其他常見領域包括資料庫(45%)、網路程式設計(42%)、系統程式設計(38%)和 DevOps 任務(37%)。

除了受訪者正在建立的內容之外,我們還詢問了一些他們使用的開發技術。絕大多數的受訪者表示他們依賴文字日誌進行除錯(88%),而他們的自由文字回應表明這是因為另類工具很難有效地使用。然而,當地逐步除錯(例如,使用 Delve)、建立描述檔和使用競賽偵測器進行測試並不罕見,約 50% 的受訪者依賴其中至少一種技術。

關於套件管理,我們發現絕大多數的受訪者已採用 Go 的模組(89%)。這對開發人員來說是一個巨大的轉變,幾乎整個社群似乎都在同時經歷這個轉變。

我們還發現,75% 的受訪者評估目前的 Go 版本是否可供生產使用,另有 12% 的受訪者會等待一個版本週期。這表示絕大多數的 Go 開發人員正在使用(或至少嘗試使用)目前或上一個穩定版本,這突顯了平台即服務供應商快速支援 Go 的新穩定版本的重要性。

雲端的 Go

Go 的設計考量了現代的分布式運算,我們希望繼續提升開發人員使用 Go 建立雲端服務的體驗。今年我們擴充了我們詢問的問題範圍,希望能更深入了解受訪者如何與雲端供應商合作,他們對目前開發人員體驗的喜愛部分,以及哪些部分可以改善。如同先前提到的,2018 年的一些結果似乎是離群值,例如自有伺服器的意外低結果值,以及 GCP 部署的意外高結果值。

我們看到了兩個明確的趨勢

  1. 這三個最大的全球雲端供應商(Amazon Web Services、Google Cloud Platform 和 Microsoft Azure)在調查受訪者的使用率中似乎都有增加的趨勢,而其他大多數的供應商在每年的受訪者中所佔的比例都較低。
  2. 在自有或公司擁有的伺服器上部署到內部持續減少,現在在統計上已與 AWS 並列(44% 對上 42%),成為最常見的部署目標。

觀察受訪者使用的雲端平台類型,我們發現主要供應商間有所不同。部署在 AWS 和 Azure 的受訪者最可能直接使用虛擬機器(分別佔 65% 和 51%),而部署在 GCP 的受訪者使用受管理 Kubernetes 平台(GKE,64%)的可能性幾乎是使用虛擬機器(35%)的兩倍。我們還發現部署在 AWS 的受訪者使用受管理 Kubernetes 平台(32%)的可能性與使用受管理無伺服器平台(AWS Lambda,33%)的可能性相同。GCP (17%) 和 Azure (7%) 使用無伺服器平台的受訪者比例較低,而自由文本回應顯示,主要原因是延遲支援這些平台上的最新 Go 執行環境。

整體而言,大多數受訪者對在所有三大雲端供應商使用 Go 感到滿意。受訪者回報了使用 Go 進行 AWS (80% 滿意) 和 GCP (78%) 開發的類似滿意度水準。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%。

在 25% 表示 Go 缺少他們需要的語言功能的受訪者中,79% 指出泛型是一個重要的遺失功能。有 22% 提及持續改進錯誤處理(除 Go 1.13 變更外),而 13% 要求更多功能性的程式設計功能,特別是內建的 map/filter/reduce 功能。明確來說,這些數字來自於受訪者的子集,他們表示如果沒有遺失他們需要的其中一個或多個重要功能,他們就可以更多地使用 Go,而不是所有問卷受訪者。

表示 Go「不是適當的語言」來處理他們工作內容的受訪者,有各式各樣的理由和使用案例。最常見的是他們從事某種形式的前端開發(22%),例如網頁、桌面或行動裝置的 GUI。另一項常見的回應是受訪者表示他們在一個已有主要語言的領域工作(9%),這使得使用其他語言成為一項挑戰。有些受訪者也告訴我們他們指的是哪個領域(或只是提到一個領域,而沒有提到另一種語言更為常見),我們會在下列「我在 [領域] 工作」列中顯示。受訪者提到的另一個主要原因是需要更好的效能(9%),特別是對於即時運算。

受訪者回報最大的挑戰,在很大程度上與去年保持一致。Go 缺乏泛型以及模組/套件管理仍然名列前茅(分別為 15% 和 12% 的回應),而強調工具問題的受訪者比例也增加了。這些數字與上列圖表不同,因為這個問題是詢問所有受訪者,無論他們表示他們最大的 Go 採用意願阻礙因素為何。這三項都是 Go 團隊今年關注的領域,我們希望在接下來的幾個月中大幅改善開發人員體驗,特別是在模組、工具,以及入門體驗方面。

在任何語言中,診斷錯誤和效能問題都可能具有挑戰性。受訪者告訴我們,他們在上述兩個層面的首要挑戰並不是 Go 實作或工具的具體內容,而是一個更基本的問題:自我報告的知識、經驗或最佳實務不足。我們希望透過文件和其他教育材料,在今年稍後解決這些知識差距。其他主要問題確實與工具相關,特別是學習/使用 Go 的除錯和分析工具時, воспринима 不利的成本/效益取捨,以及在各種環境中讓工具發揮作用所遇到的挑戰(例如:容器中的除錯,或從生產系統取得效能分析)。

最後,當我們詢問什麼能最改善受訪者編輯環境中的 Go 支援時,最常見的回應是針對語言伺服器(gopls,19%)進行一般性的改善或提供更好的支援。這是預料中的事,因為 gopls 取代了大約 80 種既有工具,而且仍處於測試階段。當受訪者更具體地說明他們希望看到哪些改進時,他們最常報告的是除錯體驗(14%)和更快速或更可靠的程式碼完成(13%)。許多參與者還明確提到在使用 gopls 時需要頻繁重新啟動 VS Code(8%);自這項調查進行期間(2019 年 11 月底至 12 月初)以來,許多上述 gopls 改進已陸續推出,這仍然是團隊的優先要務。

Go 社群

約三分之二的受訪者使用 Stack Overflow 來解答他們的 Go 相關問題(64%)。其他主要的解答來源包括 godoc.org(47%)、直接閱讀原始程式碼(42%)以及 golang.org(33%)。

前一項圖表的長尾突顯出受訪者在使用 Go 進行開發時,仰賴各種不同的來源(幾乎全部都是由社群推動)和方式來克服挑戰。事實上,對於許多 Gopher 來說,這可能是他們與更大社群互動的主要方式之一:隨著我們社群的擴展,我們看到不參加任何 Go 相關活動的受訪者比例越來越高。在 2019 年,該比例接近三分之二的受訪者(62%)。

由於更新的 Google 隱私指南,我們無法再詢問受訪者居住在哪些國家/地區。相反地,我們詢問了首選的口說/書寫語言,作為一種非常概略的替代方式來了解 Go 在全球的使用情況,並具有為潛在在地化工作提供資料的優點。

由於此調查問卷為英文,因此很可能會對英語人士及英語為第二或第三常見語言的地區人士產生顯著偏差。因此,非英語人士的數字應解讀為可能的最低值,而非 Go 全球受眾的近似值。

我們發現有 12% 的受訪者具有傳統上代表性不足的社群身分 (例如:種族、性別認同等),且 3% 的受訪者是女性。( 此題目應寫「女性」,而非「女人」。這項錯誤已於我們 2020 年問卷草稿中更正,對於此錯誤我們深感抱歉。)我們強烈懷疑這 3% 數字低估了 Go 社群中的女性人數。例如,我們知道美國的女性軟體開發人員針對 StackOverflow 開發人員調查會以比我們根據美國的就業數據預期的約一半速率回應 (11% 對比 20%)。由於我們不知道美國回應的比例,因此無法安全地從這些數字推論出,實際比例可能高於 3%。此外,GDPR 要求我們變更詢問敏感資料的方式,其中包括性別和傳統上代表性不足的社群。遺憾的是,這些變更讓我們無法在這些數字與前幾年的數字之間做出有效的比較。

具有代表性不足的社群身分或選擇不回答此問題的受訪者表現出對「我在 Go 社群中感到受歡迎」這項陳述,其不同意率高於未具有代表性不足社群身分的人士 (8% 對比 4%),凸顯我們持續進行宣導工作的 важность。

結論

我們希望喜愛查看我們 2019 年開發人員調查的結果。瞭解開發人員的經驗和挑戰能幫助我們規劃和規劃優先的 2020 年工作。再次感謝為這份調查做出貢獻的各位,您的意見回饋有助於引導 Go 未來一年的發展方向。

下一篇文章: VS Code Go 擴充套件加入 Go 專案
上一篇文章: Go、Go 社群與疫情
部落格索引