引用月经贴“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 写的,源码如下(只做抛装引玉)。我简单地统计了其中招聘名称,大家可以参考这样的思路爬更多的招聘网站,统计更多的信息——例如统计每所城市各自的热门编程语言等,看看自己的技术栈最适合呆在哪所城市!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | 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°reefrom=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
|
|