【我們為什麼挑選這篇文章】Stack Overflow 是工程師界的重要社群,關於編程的任何問題都能在那邊得到解答,也同時是編程潮流的風向標。不過,近來,卻有人開始反思 Stack Overflow 的存在是否真的對工程師有幫助?這篇文章帶你從頭探討 Stack Overflow。(責任編輯:黃筱雯)
作者/程序員的那些小事(微信 id:iProgrammer)
諷刺新聞網站 Allium 曾吐槽,「計算機編程鐵律」將會被正式命名為「Google 一下,然後 Stack Overflow」。就像其他一些精彩的吐槽那樣,這個玩笑並非無中生有。為何會這樣說,請參見這篇文章 →《如何編程?四步走,So easy!》
Stack Overflow 是一個面向程序員的問答網站,2015 年時每天有 760 萬的訪問量,是當時世界上訪問量第 57 位的網站,位列 Craigslist、ESPN 和 PornHub 之前。對在編程中遇到困難的人來說,Stack Overflow 就是庇護所 。無論新手還是老手,都把 Stack Overflow 作為一個主要的資源網站。不確定如何解決一個難題?把這個問題放在 Stack Overflow 上。一般來講, 半個小時之內這個問題就會被其他的用戶解決(不花費你任何東西)。但切記,如果你不想讓你的問題被草草地瀏覽,請把你的問題寫清晰明了。
自從 2008 年被著名部落客 Jeff Atwood 和 Joel Spolsky 建立之後,Stack Overflow 迅速成為一個針對程序員的優秀問答網站。現在,Stack Overflow 不再僅僅是一個學習編程的資源網站,而且 對於了解編程世界的動態也是十分的有用 。編程世界正在變得越來越重要,但是對於外行人而言,又好像是無法理解的。
我們能從 Stack Overflow 上的數據了解到有哪些有意思的東西?
出於這個好奇,我們分析了在 Stack Overflow 上超過 1100 萬個問題的帖子。我們用這個數據來尋找,在編程世界裡被討論次數最多的主題,和發現哪些主題正在越來越熱門,又有哪些主題呈下滑的趨勢。
在成立之初,Jeff Atwood 把 Stack Overflow 形容為一個「具備維基百科和編程版 reddit 功能」的問答網站。Stack Overflow 區別於其他網站的一個因素就是,所有在 Stack Overflow 上提出的問題和答案都是基於一個具有創造性且通用的規範 ,而且是不用付會員費的(比如 Experts-Exchange,Stack Overflow 的一個競爭者,網站的會員需要交納月費)。Stack Overflow 這個名字是在 Atwood 的部落格上的一個選名字活動的投票結果,Stack Overflow 是一個編程術語,是指當計算機程序嘗試使用比實際可用內存更大的空間時出現的一個錯誤。
自 2008 年以來,Stack Overflow 上已經有超過 1100 萬個問題和 1700 萬個答案(只有 27%的問題是沒有被回答的,一個同樣的問題可能有多個答案)。下圖顯示了 SO 建立以來每個月提問問題的數量。現在,每個月提問的問題大約有 40 萬個。下圖中所有使用的數據都是我們從 Stack Overflow「數據探測器」收集來的。(數據探測器中使用的查詢是 SO 用戶 sam.saffron 寫的)。
這些問題的本質告訴我們一個什麼樣的編程世界的現狀呢?
當用戶要在 StackOverflow 上發布問題時,用戶必須給這個問題加標籤,以便於這個問題的分類。這些「標籤」有助於其他程序員找到這個問題,而這些程序員可能會對解決這個問題提供一些幫助。精通「Java」的用戶會搜索和「Java」標籤相關的問題。Stack Overflow 用戶解決問題的初衷,即出於來自內心的善意,也出於當他的聲望值提升時的那種自豪感(後者占到的比重更大一些)。
StackOverflow 網站有超過 400 個標籤涉及 1 萬個以上問題。其中 JavaScript、Java、C#、Android 和 jQuery 是 前 TOP 6 ,所覆蓋的問題總數已超過 67.5 萬個。Python 標籤排第七,其問題數已接近 5 萬個。
上圖顯示 Stack Overflow 建立以來每一個標籤下的問題總數,但編程世界正在快速的變化之中。StackOverflow 中的標簽讓我們能夠跟蹤這些變化。
Top 6 標籤每月的問題數量
每個月有關 JavaScript 的問題數量幾乎是呈線性的持續的增長的,而 jQuery,一個 JavaScript 的模塊,每個月的問題數量正在呈一個下滑的趨勢。這些變化可能是一個這些語言或者工具的受歡迎程度的一個反應,但是也可能僅僅是 StackOverflow 用戶組成變化的一個結果。
我們好奇的是,能否使用一個標籤下面問題的數量來得知當前程序世界的熱門話題是什麼。我們從 500 個標籤中挑選出始終是最熱的一些標籤,見證了在 2014 年十月到 2015 年十月之間每月最大的問題增長量。
Android-Studio 標籤到目前為止是在任何主要標籤在過去一年中擁有最大的增長量。 Android-Studio 是一個用於在 Android 平台上開發的集成開發環境。 2014 年 10 月,Android-Studio 只有 383 個問題,但 2015 年 10 月有 1,236 個問題。
許多其他顯示增長最快的標籤,包括與 Web /雲端開發(API 和 Amazon-web 服務)和數據分析(pandas 和圖表)相關的標籤。 當然,是時代的標誌。
哪些標籤似乎正在走下坡路?
一般來說,代表下降年數最多的標籤多指的是過時版本的平台,如 iOS7 和 Windows 8。 如果我們只包括那些在 2012-2015 年有一百個問題的標籤,我們得到一個更有趣的列表。
雖然上面的圖表中的一些標籤主題逐步淡出當今的編程舞台(例如 Flash、Silverlight 或許 Emacs),但標籤在 Stack Overflow 上走下坡路不一定表示人們失去了興趣。 這可能只是關於較小主題領域的問題已經飽和,沒有更多的問題需要提出。
Stack Overflow 的成功歸功於其數以百萬計的用戶。 2013 年的一項研究發現,只有 8% 的用戶回答了超過 5 個問題(用戶被定義為近 500 萬擁有 Stack Overflow 帳戶的人)。許多沒有註冊的人也在使用該網站。 事實上,我們發現在一天的時間裡,25%的答案來自 Stack Overflow 的數百萬用戶之中 1000 人。
Stack Overflow 有個特點,用戶通過回答和提出問題可以獲得「聲望值」。用戶已經反應,積累聲望值或者獲得 Stack Overflow 頒發和聲望值有關的獎章,是讓人非常上癮的事情。
回答最多問題的用戶(如 Jon Skeet 和 T.J. Crowder)已經成為程序明星。聲望值越高,在 SO 網站上具有更大的權限(例如,編輯問題和投票以關閉問題的能力),並且還可以幫助用戶獲得咨詢工作。
Stack Overflow 聲望排行榜
下表顯示了在所有時間內,聲望值分數最高的個人,以及他們回答問題的主要標籤。
雖然很很多人都認為 Stack Overflow 是一個不可思議的資源,但是一些程序員還是有一些疑慮。第一, 許多用戶對社區文化的發展表示失望。他們認為社區已經過分關注聲望值,並已成為新用戶受到嘲笑的地方。 開發人員 John Slegers 在 Medium 寫道,一些高聲望用戶已經成為「超級巨人」。
其他人則擔心 Stack Overflow 已影響編程基礎。一些批評者認為,開發人員現在可以尋求 Stack Overflow 用戶為他們解決問題,而不是靠自己真正地努力去解決問題。 提問者可以接收並使用他們不真正理解的代碼的方案,他們只是知道方案能解決他們的問題。當需要調整時,這可能導致長期的問題。自稱的「開發者傳道者」的 Christian Heilmann 表示,這些只會複製貼上 Stackoverflow 上的答案的程序員是「Full Stackoverflow Developer」(這是一個相對於「Full-Stack Developer | 全棧開發者」的雙關語)。
盡管如此,該網站仍然是許多編程社區的中心資源。程序員 Jason Sachs 對 Stack Overflow 的某些方面表示了不滿,但他仍然相信 SO 的用戶群體、優秀的用戶界面和快速的答案,是一個可以經常得到「絕妙幫助」的地方。
即使就是寫這篇文章時,也「咨詢」Stack Overflow 多次了。在收集數據、創建圖表和理解社區的文化和方向的過程中,Stack Overflow 的問答貼文不可或缺。
延伸閱讀
向全世界的工程師請教書單:在 Stack Overflow 上最常被提到的 10 本書
【寫 Code 不能抄嗎】說到寫程式,誰不是在 Stack Overflow 上剪剪貼貼?
2016 Stack Overflow 調查: JavaScript 蟬聯最受歡迎語言、自稱開發者最性感
(本文經原作者程序員的那些事授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為 〈Stack Overflow 與全民編程時代 〉。)
【TechOrange 徵才:社群編輯、程式設計】 如果你對數位行銷、Startup 趨勢、產業轉型、程式設計,以及新科技議題有興趣,不怕用與眾不同的面向,去衝撞一般思維,歡迎你加入 TO >> 詳細職缺訊息 意者請提供履歷自傳以及文字作品,寄至 jobs@fusionmedium.com 來信主旨請註明:【應徵】TechOrange 職缺名稱:您的大名