前情提要
首先,我们来看一下2018年4月发布的最新 TIOBE 指数排行榜的前 20 名(https://www.tiobe.com/tiobe-index/),如下图所示:
可以看到,我大 PHP 比 2017 年 4 月同期降低了 1 个名次,但市场占有率却有了小幅上升,增加了 0.84% 到达 4.218%,还是比较稳的。
接着,我们来看下 TIOBE 官方对这个编程语言排行榜的解读:
Object-C(下面简称 OC)和Perl语言从2017到2018跌落超过3个名次,OC名次跌落的原因很简单,苹果公司几年前就开始抛弃OC,取而代之的是swift。另外,移动应用若被转移到平台独立的语言和框架,就像 swift 这种只在苹果系统上可用的语言也处于一个艰难的时刻。至于Perl语言,这个到2005年风靡全世界的脚本语言,2008年,我们在接受Dobb博士的杂志采访时说,基于我们当时在TIOBE指数中看到的趋势,Perl将会灭绝。在此之后,一场宗教战争开始,Perl顽固派声称这不会发生,而且TIOBE指数正在被玩弄。Stevan Little在2013年发表了一场突破性的演讲,名为“Perl没死,它是死胡同”,表明一旦软件工程师离开Perl语言,他们将永远不会回来。我个人认为 Perl 6 系列 版本(迟来了几十年)对于即将发生的事情处于一个不清晰的未来规划状态,这是工程师们寻求如Python和ruby等替代语言的主要原因,甚至到现在,perl社区依然没有一个清晰的未来规划,那么它的慢慢消亡也是理所当然的。 重要提示,SQL在2018年2月已经被加入到TIOBE指数当中。因为SQL开始变得“图灵完整”(http://en.wikipedia.org/wiki/Turing_completeness),同时,由于此前没有记录SQL的TIOBE,让它看起来增长十分迅速,但这并非常态。 TIOBE编程语言社区指数是编程语言流行程度的指示器,它每月更新一次,该指数每月更新一次。这一评级是基于全球较为资深工程师的数量、课程和第三方供应商的数量,通过热门搜索引擎,如谷歌、必应、雅虎、维基百科、亚马逊、YouTube和百度都是用来计算占有率的。需要注意的是,TIOBE指数并非用于确定编程语言的好坏,也不是用于确定编程语言的代码行数。该指数可用于检查您的编程技能是否仍处于最新状态,或者在开始构建新的软件系统时,是否应该采用何种编程语言进行战略决策。
TIOBE 指数的官方定义
(https://www.tiobe.com/tiobe-index/programming-languages-definition/)
格式为
"<language> programming"
上面的“<language>”更改为指定的编程语言,例如: “PHP programming”,这个格式的搜索词命中次数基本上会被用作计算对应编程语言指数的依据。
一般来说,只有符合条件的搜索引擎,符合条件的编程语言才会被计入TIOBE的影响因子中。
搜索引擎
下面有25个搜索引擎用于计算TIOBE指数。所选搜索引擎是Alexa排名最高的25个符合以下条件的网站:
1 该网站的入口页面包含一个搜索工具 2 查询该网站的结果包含页面点击数量的指示结果 3 应该以带有清晰标签的HTML 4 具有特殊字符的语言的搜索引擎应该被正确编码 5 搜索引擎应该至少返回1个查询 6 查询该网站的结果不应包含太多的异常值 7 色情网站不包含在内
基于上面的标准,符合条件的搜索引擎如下:
- Google.com: 7.69%
- Youtube.com: 7.38%
- Baidu.com: 7.08%
- Wikipedia.org: 6.77%
- Yahoo.com: 6.46%
- Google.co.in: 6.15%
- Google.co.jp: 5.85%
- Google.de: 5.54%
- Google.co.uk: 5.23%
- Google.com.br: 4.92%
- Google.fr: 4.62%
- Google.it: 4.31%
- Google.es: 4.00%
- Google.com.mx: 3.69%
- Google.ca: 3.38%
- Ebay.com: 3.08%
- Bing.com: 2.77%
- Hao123.com: 2.46%
- Csdn.net: 2.15%
- Google.com.au: 1.85%
- Google.co.id: 1.54%
- Google.nl: 1.23%
- Google.ch: 0.92%
- Google.com.ar: 0.62%
- Ebay.de: 0.31%
可以看到国内就百度和hao123及CSDN符合条件,这个结果凸显了百度和CSDN在国际上的知名度。
不符合条件的搜索引擎及原因如下:
- 360.cn: SITE_TIMED_OUT
- Aliexpress.com: NO_SEARCH_FIELD
- Alipay.com: NO_SEARCH_FIELD
- Amazon.co.jp: SOURCES_NOT_PARSABLE
- Amazon.com: NO_COUNTERS
- Amazon.de: NO_COUNTERS
- Chase.com: NO_SEARCH_FIELD
- Cnn.com: SOURCES_NOT_PARSABLE
- Craigslist.org: NO_SEARCH_FIELD
- Diply.com: NO_SEARCH_FIELD
- Espn.com: NO_RESULTS_AT_ALL
- Facebook.com: NO_SEARCH_FIELD
- Google.com.hk: SOURCES_NOT_PARSABLE
- Google.com.sa: SOURCES_NOT_PARSABLE
- Google.com.tr: SOURCES_NOT_PARSABLE
- Google.ru: SOURCES_NOT_PARSABLE
- Imdb.com: NO_COUNTERS
- Imgur.com: NO_COUNTERS
- Instagram.com: NO_SEARCH_FIELD
- Jd.com: NO_RESULTS_AT_ALL
- Linkedin.com: SOURCES_NOT_PARSABLE
- Live.com: NO_SEARCH_FIELD
- Login.tmall.com: NO_SEARCH_FIELD
- Mail.ru: NO_COUNTERS
- Microsoft.com: NO_COUNTERS
- Microsoftonline.com: NO_SEARCH_FIELD
- Naver.com: SOURCES_NOT_PARSABLE
- Netflix.com: NO_SEARCH_FIELD
- Nicovideo.jp: NO_RESULTS_AT_ALL
- Nytimes.com: SOURCES_NOT_PARSABLE
- Office.com: NO_SEARCH_FIELD
- Ok.ru: NO_SEARCH_FIELD
- Pages.tmall.com: SOURCES_NOT_PARSABLE
- Paypal.com: NO_SEARCH_FIELD
- Pinterest.com: NO_SEARCH_FIELD
- Pornhub.com: PORN_SITE
- Qq.com: NO_RESULTS_AT_ALL
- Reddit.com: NO_COUNTERS
- Sina.com.cn: NO_COUNTERS
- So.com: SITE_TIMED_OUT
- Sohu.com: NO_SEARCH_FIELD
- Soso.com: ENCODING_PROBLEM
- T.co: NO_SEARCH_FIELD
- Taobao.com: SOURCES_NOT_PARSABLE
- Tmall.com: NO_COUNTERS
- Tumblr.com: NO_COUNTERS
- Twitch.tv: NO_COUNTERS
- Twitter.com: NO_SEARCH_FIELD
- Vk.com: NO_SEARCH_FIELD
- Weibo.com: NO_SEARCH_FIELD
- Wikia.com: NO_RESULTS_AT_ALL
- Xvideos.com: PORN_SITE
- Yahoo.co.jp: SOURCES_NOT_PARSABLE
- Yandex.ru: NO_COUNTERS
通过上面这个清单,我们看到 360 的so.com 竟然是因为搜索超时导致的,soso.com和sogou.com等搜索引擎均未参与TIOBE指数的计算当中。
编程语言
被选入TIOBE指数的编程语言必须满足3个必备条件:
1 它在维基百科有属于自己的词条,且维基百科清晰地陈述了它是一门编程语言,这就是为什么(Ruby on) Rails, Excel, Android, Boost, Cocoa, ASP and AJAX没有被选进TIOBE指数排行中的原因。 2 它应该具有图灵完整性(http://en.wikipedia.org/wiki/Turing_completeness),因此 XML 和 HTML 不能被计入其中,这个约束对数据查询语言SQL也是有效的,例如你无法使用SQL写出一个无限循环。换一方面来说,由SQL扩展出的 PL/SQL 和 Transact-SQL 属于编程语言的范畴。 3 它对于格式为 "<language> programming" 的关键词必须至少命中5000次
那些相似的编程语言会被分配到一起,但目前为止,我们只会计算那些分组到一起的中搜索命中次数最高的那个,后期我们将考虑使用这些被分组在一起的编程语言的数学并集作为它们的搜索命中次数。
下面是多个编程语言被分成一个组的规则条件:
1 如果语言有其自己的维基百科条目,则不会与其他语言分组。
2 如果语言A自动重定向到另一个维基百科条目B,则A将与B一起分组。
3 如果语言A没有单独的维基百科条目,但作为另一个维基百科条目B的一部分提及,则A将与B一起分组。
我们使用了两种机制去过滤掉编程语言误判。首先是编程语言的 confidence (自信度),默认值是100%,但对于一些困难的搜索查询,如“basic programming”,自信度会更低。除了自信度之外,例外和强制的附加条件也会被用于清楚误判。
下表包含了所有跟踪的编程语言,包括其分组,自信度和例外情况。
- (Visual) FoxPro: FoxPro, Fox Pro, VFP
- 4th Dimension/4D: 4D, 4th Dimension
- ABAP
- ABC: ABC (exceptions: -tv -channel)
- ActionScript: ActionScript, AS1, AS2, AS3
- Ada
- Agilent VEE
- Algol
- Alice: Alice (confidence: 90%)
- Angelscript
- Apex
- APL
- Applescript
- Arc
- AspectJ
- Assembly language: Assembly, Assembly language
- ATLAS
- AutoIt
- AutoLISP
- Automator
- Avenue
- Awk: Awk, Mawk, Gawk, Nawk
- Bash
- Basic: Basic (confidence: 0%)
- BBC BASIC
- bc
- BCPL
- BETA: BETA (confidence: 10%)
- BlitzMax: BlitzMax, BlitzBasic, Blitz Basic
- Boo
- Bourne shell: Bourne shell, sh
- C shell: Csh, C shell (confidence: 90%)
- C#: C#, C-Sharp, C Sharp, CSharp, CSharp.NET, C#.NET
- C
- C /CLI
- C-Omega
- C: C (exceptions: -"Objective-C")
- Caml
- Ceylon
- CFML: CFML, ColdFusion
- cg: cg (confidence: 80%, exceptions: -"computer game" -"computer graphics")
- Ch: Ch (exceptions: ChScite)
- CHILL
- CIL
- CL (OS/400): CL (exceptions: -Lisp), CLLE
- Clarion
- Clean: Clean (confidence: 43%)
- Clipper
- Clojure: Clojure, ClojureScript
。。。(完整清单:https://www.tiobe.com/tiobe-index/programming-languages-definition/)
比重
编程语言的比重是通过主流搜索引擎对于格式为 "<language> programming"的搜索命中次数来计算的。所有编程语言对于每个搜索引擎均已经规范化,换句话说,它们加在一起就是100%。我们定义"hits(SE)" 为所有编程语言对于搜索引擎SE的命中次数之和,定义"hits(PL,SE)"为所有编程语言PL对于搜索引擎SE的命中次数。可能的误判以及在"hits(PL,SE)"中被过滤掉,这是通过人工的方式来定义每个查询的自信度因子。一个查询如"Basic programming"也会返回如“Improve your basic programming skills in Java”的页面,对于每个搜索引擎的前100页结果会被考虑进可能的误判当中,这也会被用于计算此次搜索的自信度因子,如果这个因子是90%,那么90%将会被用于计算"hits(PL,SE)"。
下面是比重的计算公式:
((hits(PL,SE1)/hits(SE1) ... hits(PL,SEn)/hits(SEn))/n
n 是搜索引擎的使用次数。关于改进TIOBE指数计算的构思或想法将致以感谢(tpci@tiobe.com)
猿哥总结
李开复曾经说过“只有掌握趋势的人才能引领时代的潮流”。了解过股票同学应该知道道琼斯指数、沪指、深证成指等指数的重要性,它们直接反应了市场的总体行情,对于股民了解市场总体行情具有直观的参考性,从而方便我们理财投资。换而言之,对于编程人员来说,TIOBE指数也是十分重要的,它直接反应了编程语言的未来趋势,对于编程决策具有很强的指导意义。
高效开发者
原创文章,转载请联系微信:www-top01-org,转载时请在突出位置保留“转载自微信公众号:PHP技术大全 字样”。