Go 部落格

Go 2018 年度調查結果

Todd Kulesza, Steve Francia
2019 年 3 月 28 日

感謝

本文總結了我們 2018 年度使用者調查的結果,並與我們之前在 2016 年和 2017 年的調查結果進行了比較。

今年,我們收到了來自 103 個不同國家/地區的 5,883 份調查回覆。我們非常感謝每一位透過本次調查提供反饋、幫助塑造 Go 未來的人。謝謝!

調查發現摘要

  • 今年首次,半數調查受訪者現在將 Go 作為其日常工作的一部分使用。今年,將 Go 作為工作一部分進行開發以及在工作職責之外使用 Go 的受訪者數量也顯著增加。
  • Go 最常見的用途仍然是 API/RPC 服務和命令列工具(CLI)。自動化任務雖然不像 CLI 工具和 API 服務那樣普遍,但對於 Go 來說是一個快速增長的領域。
  • Web 開發仍然是調查受訪者工作中最常見的領域,但 DevOps 顯示出最高的同比增長,現在成為第二常見的領域。
  • 儘管通常感覺對 Go 的熟練程度不如至少一種其他語言,但絕大多數調查受訪者表示 **Go 是他們最喜歡的程式語言**。
  • VS Code 和 GoLand 的流行度激增,現在成為調查受訪者中最受歡迎的程式碼編輯器。
  • 突出顯示 Go 的可移植性,許多 Go 開發者使用不止一種主要作業系統進行開發。Linux 和 macOS 特別受歡迎,絕大多數調查受訪者使用這兩種作業系統之一或兩者來編寫 Go 程式碼。
  • 調查受訪者似乎正在從本地部署(on-prem)Go 轉向容器和無伺服器雲部署
  • 大多數受訪者表示他們在 Go 社群中感到受歡迎,並且大多數改善 Go 社群的建議特別關注改善新手的體驗

請繼續閱讀所有詳細內容。

程式設計背景

今年的結果顯示,作為工作一部分編寫 Go 並獲得報酬的調查受訪者數量顯著增加(68% → 72%),延續了自 2016 年首次調查以來持續增長的同比趨勢。我們還看到在工作之外使用 Go 程式設計的受訪者數量有所增加(64% → 70%)。Go 作為其日常工作一部分的受訪者數量首次達到 50%(高於 2016 年的 44%)。這些發現表明,企業正以穩定的速度繼續擁抱 Go 進行專業的軟體開發,並且 Go 在開發者中的普遍受歡迎程度依然很高。

為了更好地瞭解開發者在何處使用 Go,我們將回復分為三組

  1. 在工作內外都使用 Go 的人,
  2. 專業使用 Go 但不在工作之外使用的人,以及 3) 僅在工作職責之外編寫 Go 程式碼的人。近一半(46%)的受訪者既專業地也利用業餘時間編寫 Go 程式碼(自 2017 年以來增加了 10 個百分點),而其餘受訪者則大致平均地分為僅在工作中使用 Go 或僅在工作之外使用 Go。在工作中和工作之外都使用 Go 的受訪者比例很高,這表明 Go 語言對那些不將軟體工程僅僅視為一份日常工作的人具有吸引力:他們也選擇在工作職責之外編寫程式碼,並且(正如 85% 的受訪者表示他們希望在下一個專案中使用 Go 所證實的那樣,參見下面的對 Go 的態度部分)Go 是他們最希望用於這些非工作相關專案的首選語言。

當被問及使用 Go 多長時間時,參與者的回答呈現明顯的上升趨勢,每年使用 Go 2-4 年和 4 年以上的受訪者比例更高。對於一種較新的程式語言來說,這是預料之中的,我們很高興看到 Go 新手的比例下降速度慢於使用 Go 兩年以上的受訪者比例的增長速度,這表明開發者在初步學習 Go 語言後並沒有退出生態系統。

與往年一樣,Go 在受訪者首選語言和他們擁有專業知識的語言中名列前茅。大多數受訪者(69%)聲稱在 5 種不同的語言方面擁有專業知識,這突出表明他們對 Go 的態度受到其他程式設計技術棧經驗的影響。下面的圖表按將每種語言列為最首選/最瞭解(最深藍色條)的受訪者數量排序,這突出了三個有趣的方面

  • 雖然約 ⅓ 的受訪者認為 Go 是他們擁有最多專業知識的語言,但將 Go 視為他們最喜歡的程式語言的受訪者數量是其兩倍。因此,儘管許多受訪者覺得他們對 Go 的熟練程度不如某些其他語言,但他們仍然經常更喜歡使用 Go 進行開發。
  • 很少有調查受訪者將 Rust 列為他們擁有專業知識的語言(6.8%),但 19% 的受訪者將其列為首選語言,這表明 Rust 在此受眾中具有高度的吸引力。
  • 只有三種語言的受訪者表示喜歡該語言的人數多於表示對其擁有專業知識的人數:Rust(喜歡:專業知識比例為 2.41:1)、Kotlin(1.95:1)和 Go(1.02:1)。喜歡程度高於專業知識意味著對某種語言感興趣,但缺乏直接經驗;而喜歡程度低於專業知識則表明熟練使用存在障礙。比例接近 1.0 表明大多數開發者能夠有效地愉快地使用某種語言。此資料與 Stack Overflow 2018 年開發者調查的結果相符,該調查也發現 Rust、Kotlin 和 Go 是最受歡迎的程式語言之一。

解讀資料:參與者可以列出他們排名前 5 的語言。顏色編碼從最深藍色(排名第一)開始,隨著排名降低顏色變淺。這些圖表按將每種語言列為首選的參與者比例排序。

開發領域

調查受訪者表示平均在三個不同領域工作,其中絕大多數(72%)在 2-5 個不同領域工作。Web 開發最為普遍,佔 65%,並且作為調查受訪者主要工作領域的地位進一步鞏固(高於去年的 61%):自 2016 年以來,Web 開發一直是 Go 開發中最常見的領域。今年,DevOps 顯著增長,從 36% 增加到 41% 的受訪者,取代系統程式設計成為第二大領域。我們沒有發現任何在 2018 年的使用率低於 2017 年的領域,這表明受訪者正在將 Go 應用於更廣泛的專案,而不是將使用範圍從一個領域轉移到另一個領域。

自 2016 年以來,Go 的兩大主要用途一直是編寫 API/RPC 服務和開發命令列應用程式。雖然 CLI 使用率三年以來保持在 63% 穩定不變,但 API/RPC 使用率已從 2016 年的 60% 增至 2017 年的 65%,如今更是達到 73%。這些領域充分發揮了 Go 的核心優勢,並且都是雲原生軟體開發的關鍵所在,因此我們預計它們將在未來繼續成為 Go 開發者的兩個主要應用場景。直接返回 HTML 的 Web 服務編寫者比例穩步下降,而 API/RPC 使用率增加,這表明 Web 服務正在向 API/RPC 模型遷移。另一項同比趨勢表明,自動化也是 Go 的一個增長領域,現在有 38% 的受訪者將 Go 用於指令碼和自動化任務(高於 2016 年的 31%)。

為了更好地瞭解開發者使用 Go 的背景,我們添加了一個關於 Go 在不同行業採用情況的問題。對於一種相對較新的語言來說,超過一半的調查受訪者在 網際網路/網路服務軟體 類別(即科技公司)的公司工作,這或許並不令人意外。回覆率超過 3% 的其他行業僅有 金融、銀行或保險媒體、廣告、出版或娛樂。(在下面的圖表中,我們將所有回覆率低於 3% 的類別合併到“其他”類別中。)我們將繼續跟蹤 Go 在各個行業的採用情況,以便更好地瞭解技術公司之外的開發者需求。

對 Go 的態度

今年我們增加了一個問題:“您向朋友或同事推薦 Go 的可能性有多大?”,以此計算我們的淨推薦值(Net Promoter Score)。該分數旨在衡量產品的“推薦者”比“貶低者”多多少,範圍從 -100 到 100;正值表示大多數人可能會推薦使用該產品,而負值表示大多數人可能會建議不要使用該產品。我們 2018 年的分數是 61(68% 推薦者 - 7% 貶低者),這將作為基準,幫助我們隨著時間推移衡量社群對 Go 生態系統的看法。

除了淨推薦值,我們還詢問了幾個關於開發者對 Go 滿意度的問題。總體而言,調查受訪者表示滿意度很高,與往年一致。絕大多數受訪者表示對 Go 感到滿意(89%),願意在他們的下一個專案中使用 Go(85%),並認為 Go 對他們的團隊運作良好(66%),同時大部分人(44%)認為 Go 對其公司的成功至少在一定程度上至關重要。雖然所有這些指標在 2017 年都顯示出增長,但今年基本保持穩定。(第一個問題的措辭在 2018 年從“我願意向他人推薦使用 Go”改為“總體而言,我對 Go 感到滿意”,因此這些結果不能直接比較。)

考慮到開發者強烈傾向於未來開發使用 Go,我們希望瞭解阻礙開發者這樣做的原因。這些原因自去年以來基本沒有變化:大約 ½ 的調查受訪者在用其他語言編寫的現有專案上工作,而 ⅓ 的受訪者在團隊或專案中偏好使用不同的語言。缺少語言特性和庫是受訪者更多使用 Go 的最常見原因。我們還詢問了開發者在使用 Go 時面臨的最大挑戰;與大多數調查問題不同,受訪者可以自由輸入任何他們想回答的內容。我們透過機器學習分析了結果,以確定常見主題並統計支援每個主題的回覆數量。我們確定的三大主要挑戰是

  • 包管理(例如,“跟上 vendoring”、“依賴/包管理/vendoring 不統一”)
  • 與更熟悉的程式語言的差異(例如,“語法接近 C 系語言,但語義略有不同,這讓我查詢參考資料的次數比我希望的要多”、“來自非 Go 背景的同事試圖將 Go 作為他們之前語言的一個版本來使用,但帶有 channel 和 Goroutine”)
  • 缺乏泛型(例如,“缺乏泛型使得很難說服沒有嘗試過 Go 的人相信他們會覺得它高效。”,“難以構建更豐富的抽象(需要泛型)”)

今年我們增加了一些問題,詢問開發者對 Go 不同方面的滿意度。調查受訪者對 Go 應用程式的 CPU 效能(46:1,意味著每 1 位表示不滿意的受訪者對應 46 位表示滿意的受訪者)、構建速度(37:1)和應用程式記憶體利用率(32:1)非常滿意。然而,關於應用程式可除錯性(3.2:1)和二進位制檔案大小(6.4:1)的回覆表明仍有改進空間。

對二進位制檔案大小的不滿很大程度上來自構建 CLI 的開發者,其中只有 30% 對 Go 生成的二進位制檔案大小感到滿意。然而,對於所有其他型別的應用程式,開發者的滿意度都 > 50%,並且二進位制檔案大小始終排在重要因素列表的末尾。

相反,當我們檢視受訪者對各個方面重要性的排名時,可除錯性(debuggability)就顯得尤為突出;44% 的受訪者將可除錯性列為他們最重要或第二重要的方面,但只有 36% 對當前 Go 的除錯現狀感到滿意。可除錯性始終被評為與記憶體使用和構建速度大致同等重要,但滿意度水平顯著較低,並且這種模式無論受訪者構建何種型別的軟體都成立。最近的兩個 Go 版本,Go 1.11 和 1.12,都包含了對可除錯性的顯著改進。我們計劃今年更深入地調查開發者如何除錯 Go 應用程式,目標是改善 Go 開發者的整體除錯體驗。

開發環境

我們詢問受訪者在編寫 Go 程式碼時主要使用哪些作業系統。大多數受訪者(65%)表示他們使用 Linux,50% 使用 macOS,18% 使用 Windows,與去年一致。今年我們還研究了多少受訪者在多個作業系統上進行開發,以及多少在單個作業系統上進行開發。Linux 和 macOS 仍然是明顯的領先者,81% 的受訪者在這兩個系統的某種組合上進行開發。只有 3% 的受訪者平均分配時間在所有三個作業系統上。總體而言,41% 的受訪者使用多個作業系統進行 Go 開發,突顯了 Go 的跨平臺特性。

去年,VS Code 以微弱優勢擊敗 Vim,成為調查受訪者中最受歡迎的 Go 編輯器。今年,它的領先優勢顯著擴大,成為超過 ⅓ 的調查受訪者的首選編輯器(高於去年的 27%)。GoLand 也經歷了強勁增長,目前以 22% 的比例成為第二大首選編輯器,與 Vim(降至 17%)交換了位置。VS Code 和 GoLand 迅速流行的原因似乎是以 Sublime Text 和 Atom 的使用量下降為代價。Vim 將其列為首選的受訪者數量也有所下降,但在 14% 的受訪者中仍然是最受歡迎的第二選擇編輯器。有趣的是,我們發現受訪者對其所選編輯器的滿意度水平沒有差異。

我們還詢問了受訪者,哪些方面最能改善他們首選編輯器中的 Go 支援。與上面的“最大挑戰”問題一樣,參與者可以自由輸入自己的回答,而不是從多選題列表中選擇。對回答進行的主題分析顯示,改進除錯支援(例如,“即時除錯”、“整合除錯”、“更好的除錯”)是最常見的請求,其次是改進程式碼補全(例如,“自動補全效能和質量”、“更智慧的自動補全”)。其他請求包括更好地與 Go 的 CLI 工具鏈整合、更好地支援模組/軟體包以及一般的效能改進。

今年我們還增加了一個問題,詢問哪種部署架構對 Go 開發者最重要。毫不意外,絕大多數調查受訪者將 x86/x86-64 視為他們的首選部署平臺(76% 的受訪者將其列為最重要的部署架構,84% 的受訪者將其列在前 3 位)。然而,第二和第三選擇架構的排名提供了資訊:對 ARM64(45%)、WebAssembly(30%)和 ARM(22%)有顯著興趣,但對其他平臺興趣甚微。

部署和服務

2018 年,我們看到 Go 和非 Go 部署都延續了從本地(on-prem)向雲託管的趨勢。將 Go 應用程式部署到本地伺服器的調查受訪者比例從 43% 下降到 32%,這與非 Go 部署報告的 46% 下降到 36% 相對應。同比增長率最高的雲服務包括 AWS Lambda(Go 部署從 4% 增至 11%,非 Go 部署從 10% 增至 15%)和 Google Kubernetes Engine(Go 部署從 8% 增至 12%,非 Go 部署從 5% 增至 10%),這表明無伺服器和容器正日益成為流行的部署平臺。然而,這種服務增長似乎是由已經採用雲服務的受訪者推動的,因為我們發現今年部署到至少一種雲服務的受訪者比例沒有顯著增長(55% → 56%)。自 2016 年以來,我們還看到 Go 部署到 GCP 的比例穩步增長,從 12% 增至 19% 的受訪者。

這可能與本地部署的減少相關,今年我們看到雲端儲存成為調查受訪者使用量排名第二的服務,從 32% 增至 44%。認證與聯合服務也顯著增加(26% → 33%)。調查受訪者從 Go 訪問的主要服務仍然是開源關係型資料庫,其比例從 61% 略微上升到 65% 的受訪者。如下圖所示,服務使用量全面增加。

Go 社群

查詢 Go 問題答案的主要社群來源仍然是 Stack Overflow(23% 的受訪者將其標記為首選來源)、Go 網站(godoc.org 佔 18%,golang.org 佔 14%)以及閱讀原始碼(一般原始碼佔 8%,GitHub 特別佔 4%)。順序與往年基本一致。Go 新聞的主要來源仍然是 Go 部落格、Reddit 的 r/golang、Twitter 和 Hacker News。然而,這些也是本次調查的主要分發渠道,因此結果可能存在一定偏差。在下面的兩張圖表中,我們將使用率低於 < 5% 的來源歸入“其他”類別。

今年,55% 的調查受訪者表示他們已經或有興趣為 Go 社群做出貢獻,略低於去年的 59%。由於最常見的兩個貢獻領域(標準庫和官方 Go 工具)需要與核心 Go 團隊互動,我們懷疑這種下降可能與同意以下說法(“我向 Go 專案領導層提問和提供反饋時感到自在” (30% → 25%) 和 “我對 Go 的領導層充滿信心” (54% → 46%))的參與者比例下降有關。

社群的一個重要方面是幫助每個人感到受歡迎,尤其是來自傳統上代表性不足的人群。為了更好地瞭解這一點,我們提出了一個可選問題,詢問參與者是否屬於幾個代表性不足的群體之一。2017 年,我們看到所有群體的比例都有同比增加。對於 2018 年,我們看到表示自己屬於代表性不足群體的受訪者比例與去年相似(12%),同時認為自己屬於代表性不足群體的受訪者比例顯著下降。2017 年,每 1 位認為自己屬於代表性不足群體的受訪者,就有 3.5 位認為自己不屬於代表性不足群體(比例為 3.5:1)。2018 年,這一比例改善至 3.08:1。這表明 Go 社群至少保持了代表性不足成員的相同比例,甚至可能有所增加。

維護一個健康的社群對 Go 專案至關重要,因此在過去三年裡,我們一直在衡量開發者在 Go 社群中感到受歡迎的程度。今年,同意“我在 Go 社群中感到受歡迎”這一說法的調查受訪者比例有所下降,從 66% 降至 59%。

為了更好地理解這種下降,我們更仔細地研究了哪些人表示感到不太受歡迎。在傳統上代表性不足的群體中,表示在 2018 年感到不受歡迎的人數較少,這表明在該領域的宣傳推廣是有幫助的。相反,我們發現在使用 Go 的時間長短與他們感到受歡迎的程度之間存線上性關係:新的 Go 開發者(50%)比擁有 1-2 年經驗的開發者(62%)感到受歡迎的程度顯著較低,而擁有幾年經驗的開發者(73%)又比擁有 1-2 年經驗的開發者感到更受歡迎。對這個問題的回覆:“做哪些改變會使 Go 社群更受歡迎?”支援了對資料的這種解釋。受訪者的評論可以大致分為四類

  • 減少精英主義的觀念,特別是對於 Go 新手(例如,“少一些不屑”、“少一些辯解和傲慢”)
  • 提高領導層的透明度(例如,“未來的方向和規劃討論”、“少一些自上而下的領導”、“更民主”)
  • 增加入門資源(例如,“為貢獻者提供更清晰的介紹”、“學習最佳實踐的有趣挑戰”)
  • 舉辦更多活動和線下聚會,重點覆蓋更廣泛的地理區域(例如,“更多聚會和社交活動”、“在更多城市舉辦活動”)

這些反饋非常有幫助,為我們指明瞭可以著重改進的具體領域,以提升 Go 開發者的體驗。雖然這不代表我們使用者群的很大一部分,但我們非常重視這些反饋,並正在努力改進各個方面。

結論

希望您喜歡看到我們 2018 年開發者調查的結果。這些結果正在影響我們 2019 年的規劃,在接下來的幾個月裡,我們將與您分享一些想法,以解決社群向我們提出的具體問題和需求。再次感謝所有為本次調查做出貢獻的人!

下一篇文章:邁向 Go 2 的下一步
上一篇文章:在 Go 1.12 中除錯您部署的內容
部落格索引