2015年8月 中国版的编程语言排行榜

redraiment 发布于 2015/08/16 22:21
阅读 23K+
收藏 55

引用月经贴“TIOBE”编程语言排行榜的声明:“这个榜单本身采集的是英文世界的数据,虽然在反映趋势上有一些参考意义,但与中国的实际情况不完全符合,而且,这张采样本身也有相当大的局限性。...排名使用著名的搜索引 擎(诸如 Google、MSN、Yahoo!、Wikipedia、YouTube 以及 Baidu 等)进行计算。”

因此,“TIOBE”排行榜反映的是英文世界里各种编程语言的“受关注程度”。通过搜索引擎去查询,并不能说明查询的人在使用这门编程语言,也有可能只是想去了解一下。所以当iPhone崛起的时候,很多人会听说 Objective-C,因此它受到很多人的关注,但不见得就有很多 Objective-C 程序员。

我其实更想知道的是中国这片土地上各种编程语言的占用率排行榜,即什么编程语言被最广泛地使用。有这样一份排行榜,就能知道哪一门编程语言的就业机会最多;如果有持续的报告,还可以看出哪些编程语言在企业中逐渐受到关注,哪些逐渐被冷落,就能及时地跟上趋势。

于是我爬了`51job`上针对“计算机软件”、“计算机服务”、“互联网/电子商务”和“网络游戏” 4 个行业的 “计算机软件” 和 “互联网/电子商务/网游” 岗位的前 10000 条招聘信息,从中提取出开发岗位相关的信息,并做了简单的归类,统计出各种编程语言的岗位数量。结果如下:

排名 编程语言 岗位数量
1 java 15116
2 php 5129
3 .net 3879
4 javascript 3878
5 objective-c 3651
6 c++ 2119
7 c# 1454
8 c 949
9 html 701
10 sql 639
11 asp 559
12 shell 532
13 python 314
14 actionscript 221
15 css 69
16 ruby 59
17 vb 58
18 cobol 54
19 erlang 41
20 lua 34
21 go 27
22 scala 9
23 perl 7
24 swift 4

对比“2015年8月 TIOBE 编程语言排行榜”的结果(如下图),就能发现 Java 无论国内外都是无可争议的王者,排在其后的是 PHP 和 .NET,相比 TIOBE 的 C 和 C++,更接近周边的实际情况:招聘时 Javaer 遍地开花,PHPer 一抓一大把,.NET 的也不少,前端和移动开发不断崛起中;Flash 开发基本已成明日黄花,热门程度还比不上 Python。

爬虫我是用 Python 2.7 写的,源码如下(只做抛装引玉)。我简单地统计了其中招聘名称,大家可以参考这样的思路爬更多的招聘网站,统计更多的信息——例如统计每所城市各自的热门编程语言等,看看自己的技术栈最适合呆在哪所城市!

#!/usr/bin/env python
# -*- coding: utf-8 -*-  

import urllib2, sys, re, glob, operator

reload(sys)
sys.setdefaultencoding('utf-8')

alias = {
    'java': 'java',
    'javaee': 'java',
    'javase': 'java',
    'javaweb': 'java',
    'android': 'java',
    'eclipse': 'java',
    'weblogic': 'java',
    'tomcat': 'java',
    'jvm': 'java',
    'scala': 'scala',
    'clojure': 'clojure',
    'groovy': 'groovy',

    'net': '.net',
    '.net': '.net',
    'dotnet': '.net',
    'c#': 'c#',
    'unity': 'c#',
    'asp': 'asp',
    'asp.net': '.net',
    'winform': '.net',
    'vb': 'vb',
    'basic': 'vb',

    'php': 'php',
    'python': 'python',
    'perl': 'perl',
    'ruby': 'ruby',
    'rails': 'ruby',

    'c++': 'c++',
    'qt': 'c++',
    'c': 'c',
    'opencv': 'c',
    'objective-c': 'objective-c',
    'ios': 'objective-c',
    'iphone': 'objective-c',
    'cocos': 'objective-c',
    'swift': 'swift',

    'dba': 'sql',
    'oracle': 'sql',
    'mysql': 'sql',
    'pgsql': 'sql',
    'postgresql': 'sql',
    'database': 'sql',
    'sqlserver': 'sql',
    'sql': 'sql',

    'web': 'javascript',
    'js': 'javascript',
    'json': 'javascript',
    'node': 'javascript',
    'nodejs': 'javascript',
    'jquery': 'javascript',
    'phonegap': 'javascript',
    'angularjs': 'javascript',
    'javascript': 'javascript',
    'html': 'html',
    'css': 'css',

    'flash': 'actionscript',
    'flex': 'actionscript',
    'actionscript': 'actionscript',

    'sh': 'shell',
    'shell': 'shell',
    'unix': 'shell',
    'linux': 'shell',
    'ubuntu': 'shell',

    'go': 'go',
    'golang': 'go',
    'erlang': 'erlang',
    'lua': 'lua',
    'cobol': 'cobol'
}

languages = {}

urllib2.socket.setdefaulttimeout(10)
browser = urllib2.build_opener()
browser.addheaders = [('User-agent', 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36')]

url = 'http://search.51job.com/jobsearch/search_result.php?fromJs=1&jobarea=000000%%2C00&district=000000&funtype=0100%%2C2500&industrytype=01%%2C38%%2C32%%2C40&issuedate=8&providesalary=99&keywordtype=1&curr_page=%d&lang=c&stype=2&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=01&companysize=99&lonlat=0%%2C0&radius=-1&ord_field=0&list_type=0&fromType=14&dibiaoid=-1'

for i in xrange(1, 2000):
    try:
        for content in re.findall('<td class="td1".*</td>', browser.open(url % i).read().decode('gbk')):
            title = re.search('title="([^"]+)"', content) or re.search('>([^<]+)<', content)
            if title:
                for tech in re.findall('(?:c#|c\\+\\+|.net|[a-z]+)', title.group(1).lower()):
                    if alias.has_key(tech):
                        key = alias[tech]
                        languages[key] = languages.get(key, 0) + 1
    except:
        print('ignore')

for tech, count in sorted(languages.items(), key=operator.itemgetter(1)):
    print tech, count
加载中
0
不是simaguo
redraiment
redraiment
你这速度也太快了吧,我在首页上还没看到你居然就抢了沙发...
0
eechen
eechen
RedMonk综合Github和StackOverflow的数据分析得出的2015年7月编程语言排行榜.
前4位是JavaScript,Java,PHP,Python,另外C#,C++,Ruby并列第五.
http://redmonk.com/sogrady/2015/07/01/language-rankings-6-15/

PYPL: PopularitY of Programming Language index
http://pypl.github.io/PYPL.html
前十: Java/PHP/Python/C#/C++/C/JavaScript/Objective-C/Matlab/R
PYPL 人气指数(PopularitY of Programming Language index)是分析用户在Google中搜索各种编程语言教程(tutorial)的数量来推断编程语言的受欢迎程度/人气(popularity),特 定语言教程(tutorial)的搜索量越多,则认为该语言更受欢迎。


所以就算看国外的数据统计,也不能只看TIOBE一家之言,因为TOIBE的统计跟RedMonk和PYPL都大相径庭。
eechen
eechen
回复 @saintatgod : 培训的Java绝不比PHP少,而且专科学PHP的也不多.
saintatgod
saintatgod
回复 @redraiment : 我怎么感觉大部分都是培训java呢
AT7
AT7
http://www.codeceo.com/article/2015-best-languages-salaries.html
redraiment
redraiment
回复 @eechen : 但培训机构和专科院校很多还是都在教PHP的。
redraiment
redraiment
嗯,感觉RedMonk的数据会更能体现编程语言的使用热度。
下一页
0
小白小霸王
小白小霸王
求html的岗位
redraiment
redraiment
回复 @湖心亭看雪 : 其实包含html的结果一般都是:html+css+js……
湖心亭看雪
湖心亭看雪
h5吧
0
卢温禾
卢温禾
是不是把薪金也爬下来啊
redraiment
redraiment
可惜大多数招聘信息的薪资信息都是填“面议”
0
orangleliu
orangleliu
我估计没有我手翻的快
0
天才傻瓜
天才傻瓜
JAVA要分成三个方向吧。要不没有意义是误导啊
wangxi得
wangxi得
回复 @wuwenbin : 大数据
redraiment
redraiment
回复 @wuwenbin : 此处只考虑开发用的编程语言,不考虑领域和方向
wuwenbin
wuwenbin
至少android得区分吧
0
haitaosoft
haitaosoft

代码里都没有抓delphi的数据?

难怪。。。。。

土卫十六
土卫十六
Delphi的工作确实很少。拉勾网全国通常只有50多个Delphi职位。
redraiment
redraiment
抓下来之后我有人工查过,近期的数据没看到Pascal和Delphi的招聘信息,所以就没加进来。不过介于数据实时在变,你可以现在加进去跑跑看。
0
从今以后
从今以后
据我所知,51job 上培训信息倒是不少。
redraiment
redraiment
感觉那边有更多的非互联网公司,可能更接地气
返回顶部
顶部