諷刺新聞網站 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 ,所覆蓋的問題總數已超過 675 萬個。Python 標籤排第七,其問題數已接近 50 萬個。
上圖顯示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 的問答貼不可或缺。