你真的了解 TIOBE 編程語言排行榜嗎?
本文永久更新鏈接地址:
PHP問答網 - 原創|你真的了解TIOBE編程語言排行榜嗎?
前情提要
首先,我們來看一下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/)
格式為
+" programming"
上面的「」更改為指定的編程語言,例如:+「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 的http://so.com 竟然是因為搜索超時導致的,http://soso.com和http://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 它對於格式為+" 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/)
比重
編程語言的比重是通過主流搜索引擎對於格式為+" 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指數也是十分重要的,它直接反應了編程語言的未來趨勢,對於編程決策具有很強的指導意義。
推薦閱讀:
※幾個簡單又實用的PHP函數
※Swoole到底是個什麼東西?
※(PHP、.net、JSP)哪一隻能實現花生殼的功能?
※Yii2-類圖-模型
※PHP高效獲取遠程圖片尺寸和大小的實現方法