選自Global App Testing
作者:Nick Roberts機器之心編譯參與:杜偉、戴一鳴
自 2008 年創(chuàng)辦以來,Stack Overflow 致力于為所有類型的開發(fā)者提供幫助,開發(fā)者們也提出了涵蓋所有開發(fā)領(lǐng)域的大量問題。但是,哪些問題是開發(fā)者不得不向 Stack Overflow 尋求解決的呢?本文作者通過對十一年來人們在 Stack Overflow 上提問進行了詞云統(tǒng)計,通過錯誤提問和解決遍覽編程語言發(fā)展歷程。
在本文中,作者選擇了 11 種最流行的編程語言(通過 Stack Overflow 標簽出現(xiàn)的頻率衡量),希望可以找出這些問題的共性及差異性。
首先觀察以下選擇的 11 種編程語言:
作者選擇的 11 種編程語言,包括 JavaScript、Java、C#、Python 等。
就開發(fā)者提出的原始問題數(shù)量來說,自 Stack Overflow 創(chuàng)辦以來,JavaScript 相關(guān)問題被詢問得頻率最高,這或許是因為它普遍存在于各種不同類型的應(yīng)用和服務(wù)中:無論開發(fā)者從事哪種互聯(lián)網(wǎng)工作,都需要了解一些 JavaScript 知識。
雖然整體來看 JavaScript 相關(guān)問題排名第一,但是隨著時間的遷移,可以看到頭名出現(xiàn)了變化。
2011 年,《哈佛商業(yè)評論》將數(shù)據(jù)科學(xué)家成為「21 世界最性感的工作」。自那以后,Python 成為數(shù)據(jù)科學(xué)家的首選編程語言,使用量也日益增長。2019 年,Python 超越 JavaScript 成為了 Stack Overflow 上被提問最多的編程語言。
所以,Python 語言要么正在快速成為最受歡迎的編程語言,要么與其他編程語言相比,新程序員使用 Python 的比例較高。
從前面的視頻來看,2008 年開始,C# 一直占據(jù)著 Stack Overflow 最受歡迎的編程語言榜首,而此時 Python、Java 和 JavaScript 還并不火熱。但是從 2012 年開始,Python 超越 C++,開始一路逆襲。同時,JavaScript 的用戶比例逐漸上升。最終,在 2018 年年底,Python 和 JavaScript 分別成為了榜單榜首和第二名。
但這些開發(fā)者具體都問些什么問題呢?提問最多的框架、程序包、函數(shù)和方法是什么呢?哪些數(shù)據(jù)類型給開發(fā)者帶來最多的困擾呢?這些問題在不同編程語言中又有哪些不同呢?
為了得出結(jié)果,作者做了以下工作:
1. 分別提取 11 種編程語言在 Stack Overflow 上的 1000 個點贊最高的問題;2. 在 Python 中進行數(shù)據(jù)清洗(pandas 工具);3. 將總計 11000 個問題(超過 96000 個單詞)饋入到 JavaScript 詞云算法中,從而得出顯示不同編程語言中通常痛點的鳥瞰透視圖。
結(jié)果如下所示(按編程語言):
JavaScript
JavaScript 已經(jīng)有 23 年的歷史,而 Stack Overflow 的創(chuàng)辦時間僅 11 年。在過去的 11 年里,「jquery」(上圖中左)成為被問最頻繁的 JavaScript 框架問題。 Python
Python 實際上比 JavaScript 早六年提出。在 1990 年提出 Python 后,Guido van Rossum (https://gvanrossum.github.io/) 的這項發(fā)明成為了數(shù)據(jù)科學(xué)家的一個選擇。天然上來說,最頻繁出現(xiàn)的問題都圍繞著數(shù)據(jù)處理庫「pandas」(中左)和「dataframe」(中上)。
然而,Python 有著廣泛的用途,它類似于一種「膠水語言」,在技術(shù)的很多不同領(lǐng)域都有應(yīng)用,這也可以解釋為什么網(wǎng)絡(luò)開發(fā)中的「django」(中下)會是一個重要的關(guān)鍵詞。 R 語言
也許是數(shù)據(jù)科學(xué)中第二個選擇,R 語言和 Python 本質(zhì)的不同是它完全為數(shù)據(jù)科學(xué)而生。數(shù)據(jù)處理中的特定概念,如「dataframe」(右上)、「datatable」(右上)和「matrix」(中間)似乎會給 R 語言用戶帶來更多困擾。
Python 和 R 都有非常好的操作數(shù)據(jù)的庫,雖然在涉及到數(shù)據(jù)可視化上,很多人會說 R 比 Python 更先進。這也可能是為什么「ggplot」(中間)是目前 R 語言用戶提問最多的。
也許 Python 用戶會發(fā)現(xiàn) matplotlib 更容易使用。 Ruby
自上世紀 90 年代中期出現(xiàn)后,Ruby 現(xiàn)已經(jīng)在服務(wù)端框架 ruby-on-「rails」(右上)中建立了自己的一席之地。 C#
C# 是由微軟開發(fā)的,用于其 .NET 框架(中右)。 C++
C++(1985)已經(jīng)成為了游戲開發(fā)者使用的語言。在 3D 游戲中建立視覺構(gòu)建塊的是 polygon,而 polygon 中基本的構(gòu)成是向量(中右)。 Java
Java(1995)被設(shè)計于一個非常泛用的目標——一次編譯,處處運行。在 PC 爆炸的上世紀 90 年代后期和互聯(lián)網(wǎng)興起的早期,Java 成為了很多 Windows 應(yīng)用背后的開發(fā)語言。但是最近,Java 逐漸在安卓系統(tǒng)里找到了自己的地位(中右)。 Objective-C
作為本次統(tǒng)計中最老的語言,Objective-C (1984) 牢牢占據(jù)著蘋果的 OSX 開發(fā)以及近年來 ios(左側(cè))在 iPhone(中間)的開發(fā),直到 Swift 語言問世。 Swift
自從 2014 年提出以來,Swift 就代替了 Objective-C,用于蘋果的生態(tài)開發(fā)。從這一語言中常提到了關(guān)鍵詞「objective-c」可以看出,數(shù)千名 ios 開發(fā)者已經(jīng)更新了自己的知識。 PHP
PHP(1995)是被設(shè)計用來進行服務(wù)器端的腳本語言,主要用于網(wǎng)絡(luò)開發(fā)?,F(xiàn)在它依然發(fā)揮著這樣的作用,這也是為什么這個編程語言中常常提出的問題都和「laravel」框架相關(guān)。 SQL
SQL 并不是有著完整特性的編程語言。它只為一個任務(wù)而生:操作數(shù)據(jù)。由于這一特殊目的,SQL 語言的痛點基本上都圍繞著數(shù)據(jù)庫連接,如「sever」、「mysql」、「database」、「query」和「select」等。
每個編程語言都在不斷地朝著,甚至被設(shè)計,來完成科技中的某個部分。R 用于數(shù)據(jù)科學(xué),而 Swift 則用于 IOS 開發(fā),C++則是電子游戲開發(fā)。這解釋了為什么不同的編程語言會爆出不同的 bug。例如,在 SQL 中可以經(jīng)常見到「database」這樣的關(guān)鍵詞,但是在 Objective-C 中可能就很少會見到了。
除了這些明顯的區(qū)別,本次可視化的結(jié)果也展示了不同領(lǐng)域本質(zhì)上的相似點?;镜臄?shù)據(jù)類型——如字符串和數(shù)組(但不是整型、浮點型或布爾型)數(shù)據(jù)是經(jīng)常給開發(fā)者帶來痛點的地方。
最終,將所有的問題集合在一起做成詞云。
原文鏈接:https://www.globalapptesting.com/blog/picking-apart-stackoverflow-what-bugs-developers-the-most
聯(lián)系客服