编程语言的演化史:从bug的视角看Python的崛起

发表时间: 2019-10-18 13:43

选自Global App Testing

作者:Nick Roberts机器之心编译参与:杜伟、戴一鸣

自 2008 年创办以来,Stack Overflow 致力于为所有类型的开发者提供帮助,开发者们也提出了涵盖所有开发领域的大量问题。但是,哪些问题是开发者不得不向 Stack Overflow 寻求解决的呢?本文作者通过对十一年来人们在 Stack Overflow 上提问进行了词云统计,通过错误提问和解决遍览编程语言发展历程。

在本文中,作者选择了 11 种最流行的编程语言(通过 Stack Overflow 标签出现的频率衡量),希望可以找出这些问题的共性及差异性。

首先观察以下选择的 11 种编程语言:

作者选择的 11 种编程语言,包括 JavaScript、Java、C#、Python 等。

就开发者提出的原始问题数量来说,自 Stack Overflow 创办以来,JavaScript 相关问题被询问得频率最高,这或许是因为它普遍存在于各种不同类型的应用和服务中:无论开发者从事哪种互联网工作,都需要了解一些 JavaScript 知识。

虽然整体来看 JavaScript 相关问题排名第一,但是随着时间的迁移,可以看到头名出现了变化。

2011 年,《哈佛商业评论》将数据科学家成为「21 世界最性感的工作」。自那以后,Python 成为数据科学家的首选编程语言,使用量也日益增长。2019 年,Python 超越 JavaScript 成为了 Stack Overflow 上被提问最多的编程语言。

所以,Python 语言要么正在快速成为最受欢迎的编程语言,要么与其他编程语言相比,新程序员使用 Python 的比例较高。

从前面的视频来看,2008 年开始,C# 一直占据着 Stack Overflow 最受欢迎的编程语言榜首,而此时 Python、Java 和 JavaScript 还并不火热。但是从 2012 年开始,Python 超越 C++,开始一路逆袭。同时,JavaScript 的用户比例逐渐上升。最终,在 2018 年年底,Python 和 JavaScript 分别成为了榜单榜首和第二名。

但这些开发者具体都问些什么问题呢?提问最多的框架、程序包、函数和方法是什么呢?哪些数据类型给开发者带来最多的困扰呢?这些问题在不同编程语言中又有哪些不同呢?

为了得出结果,作者做了以下工作:

1. 分别提取 11 种编程语言在 Stack Overflow 上的 1000 个点赞最高的问题;2. 在 Python 中进行数据清洗(pandas 工具);3. 将总计 11000 个问题(超过 96000 个单词)馈入到 JavaScript 词云算法中,从而得出显示不同编程语言中通常痛点的鸟瞰透视图。

结果如下所示(按编程语言):

JavaScript

JavaScript 已经有 23 年的历史,而 Stack Overflow 的创办时间仅 11 年。在过去的 11 年里,「jquery」(上图中左)成为被问最频繁的 JavaScript 框架问题。 Python

Python 实际上比 JavaScript 早六年提出。在 1990 年提出 Python 后,Guido van Rossum (
https://gvanrossum.github.io/) 的这项发明成为了数据科学家的一个选择。天然上来说,最频繁出现的问题都围绕着数据处理库「pandas」(中左)和「dataframe」(中上)。

然而,Python 有着广泛的用途,它类似于一种「胶水语言」,在技术的很多不同领域都有应用,这也可以解释为什么网络开发中的「django」(中下)会是一个重要的关键词。 R 语言

也许是数据科学中第二个选择,R 语言和 Python 本质的不同是它完全为数据科学而生。数据处理中的特定概念,如「dataframe」(右上)、「datatable」(右上)和「matrix」(中间)似乎会给 R 语言用户带来更多困扰。

Python 和 R 都有非常好的操作数据的库,虽然在涉及到数据可视化上,很多人会说 R 比 Python 更先进。这也可能是为什么「ggplot」(中间)是目前 R 语言用户提问最多的。

也许 Python 用户会发现 matplotlib 更容易使用。 Ruby

自上世纪 90 年代中期出现后,Ruby 现已经在服务端框架 ruby-on-「rails」(右上)中建立了自己的一席之地。 C#

C# 是由微软开发的,用于其 .NET 框架(中右)。 C++

C++(1985)已经成为了游戏开发者使用的语言。在 3D 游戏中建立视觉构建块的是 polygon,而 polygon 中基本的构成是向量(中右)。 Java

Java(1995)被设计于一个非常泛用的目标——一次编译,处处运行。在 PC 爆炸的上世纪 90 年代后期和互联网兴起的早期,Java 成为了很多 Windows 应用背后的开发语言。但是最近,Java 逐渐在安卓系统里找到了自己的地位(中右)。 Objective-C

作为本次统计中最老的语言,Objective-C (1984) 牢牢占据着苹果的 OSX 开发以及近年来 ios(左侧)在 iPhone(中间)的开发,直到 Swift 语言问世。 Swift

自从 2014 年提出以来,Swift 就代替了 Objective-C,用于苹果的生态开发。从这一语言中常提到了关键词「objective-c」可以看出,数千名 ios 开发者已经更新了自己的知识。 PHP

PHP(1995)是被设计用来进行服务器端的脚本语言,主要用于网络开发。现在它依然发挥着这样的作用,这也是为什么这个编程语言中常常提出的问题都和「laravel」框架相关。 SQL

SQL 并不是有着完整特性的编程语言。它只为一个任务而生:操作数据。由于这一特殊目的,SQL 语言的痛点基本上都围绕着数据库连接,如「sever」、「mysql」、「database」、「query」和「select」等。

每个编程语言都在不断地朝着,甚至被设计,来完成科技中的某个部分。R 用于数据科学,而 Swift 则用于 IOS 开发,C++则是电子游戏开发。这解释了为什么不同的编程语言会爆出不同的 bug。例如,在 SQL 中可以经常见到「database」这样的关键词,但是在 Objective-C 中可能就很少会见到了。

除了这些明显的区别,本次可视化的结果也展示了不同领域本质上的相似点。基本的数据类型——如字符串和数组(但不是整型、浮点型或布尔型)数据是经常给开发者带来痛点的地方。

最终,将所有的问题集合在一起做成词云。

原文链接:
https://www.globalapptesting.com/blog/picking-apart-stackoverflow-what-bugs-developers-the-most