0

通过Stack Overflow分析编程语言大势

Stack Overflow是世界各地开发者交流技术的地方,不但有各路高手回答问题分享经验,而且还提供对所有帖子的检索,绝对是一个知识宝库。每每看到别人动辄几万而我刚刚过千的声望,总希望投资一个有潜力的编程语言方便混分。心动不如行动,让我们借助Power BI分析一下。

思路很简单,只要对Stack Overflow帖子进行统计,一定能够找到一些端倪,能够让我们一窥编程的大势走向。比如,Stack Overflow本身是基于C#以及SQL Server开发运营的,这点让许多Java粉丝扼腕。那么到底是C#还是Java在Stack Overflow上更火爆呢?好在Stack Overflow允许用户对帖子上打的标签,我们只需要累加一下即可。

首先建立数据模型。在这里可以下载到Stack Overflow往年的帖子,解压缩之后是一个26GB的xml文件。这个文件是由过往所有的帖子组成,每个帖子还有具体的时间、标题、标签、正文、评论等等。可惜Power Query不能很好地以流模式处理这个xml文件,直接导入将会导致内存不够的异常,囧。

为今之计,只有通过代码简化这个xml了:

  1. 我们关心的只是时间和标签之间的关联,其他信息完全可以跳过。
  2. 由于时间和标签有相当的重复,对时间和标签进行范式化便可以大大节约空间。简而言之,就是用字典对时间和标签建立序列号到字符串的映射,时间和标签的关系是建立在序列号之上的。

很快就可以用C#实现以上需求,源代码可以在https://github.com/qisamuelzhang/soanalytics找到。第一次写C#代码,特此感谢Ben同学的代码审阅。

程序将会生成三个文件:Tags是标签字典,Times是时间字典,而Posts是标签序列号到时间序列号的映射,三个文件合起来不过192MB,对于Power BI就是小菜一碟。分别导入这三个文件,建立数据模型如下:

现在可以显示结果了!从2008年至今,C#以微弱优势力压Java成为状元,相关的ASP .Net、.Net以及SQL Server分列12、16以及21位。看样子C#在企业软件开发领域仍然举足轻重。榜眼Java实力不俗,不过只有相关的Android进入前20,貌似大家都拿Java搞Android了?探花是这几年高调奢华的JavaScript,相关的jQuery、HTML、CSS、Ajax分列6、9、13、22,潜力巨大。移动设备开发方面,Android、iOS、iPhone、Objective C分5、11、15、17位。其他上榜的还有PHP、Python以及Ruby和RoR,轻量级的网络应用开发语言。总体而言,网络应用以及移动开发是Stack Overflow帖子的核心,Cloud First Mobile First的口号与大势还是很契合的,我软威武!

下图统计了发帖的时间,可以看出这几年Stack Overflow的发展还是比较迅猛的。同时,开发者们都是相当勤奋的,每年只有圣诞节前后有个巨大的滑落稍事休息,其他时候都是生命不息编码不止:

除了简单的趋势,我们还可以通过Power Pivot的measure功能对比标签个数。比如可以定义Java标签个数如下:

Count of Java:=COUNTROWS(FILTER(Posts, RELATED(Tags[Tag])="java"))

这样我们可以进行Java与C#对比,如下。虽然C#总数仍然占优,但是Java在这几年反超了C#而且优势在继续扩大。当然,其中的主要原因之一还是Android的火爆:

iOS与Android相比总量还是有差距,不过涨势相当(咦,Windows Phone去哪儿了):

最后看一下Hadoop。虽然总数不高,但是涨幅迅猛,绝对是潜力股:

你决定好了如何投资了吗?

Excel文件可以从这里下载。

 



张 琪

发表评论

电子邮件地址不会被公开。 必填项已用*标注