TIOBE 编程社区指数定义
由于对 TIOBE 指数的编制方式存在诸多疑问,因此专门设置了一个页面来解释其定义。基本而言,计算方法归结为统计搜索查询的点击量
+"<language> programming"
在接下来的几节中,将解释哪些搜索引擎符合条件、哪些编程语言符合条件以及评分是如何精确计算的。
搜索引擎
有 25 个搜索引擎用于计算 TIOBE 指数。所选的搜索引擎是 Similarweb 排名最高的 25 个网站,它们需满足以下条件:
- 网站的入口页面包含搜索功能
- 查询网站的结果包含页面点击数的指示
- 结果应以带有清晰标签的 HTML 格式提供
- 使用特殊字符语言的搜索引擎应正确编码
- 搜索引擎至少应为 1 次查询返回 1 次点击
- 查询网站的结果不应包含过多异常值
- 色情网站被排除在外
根据这些标准,以下搜索引擎符合条件:
- Google.com: 9.06%
- Wikipedia.org: 8.70%
- Amazon.com: 7.97%
- Microsoft.com: 7.61%
- Amazon.co.jp: 6.88%
- Ebay.com: 6.52%
- Sharepoint.com: 6.16%
- Rakuten.co.jp: 5.80%
- Google.de: 5.43%
- Google.co.jp: 5.07%
- Amazon.de: 4.71%
- Amazon.in: 4.35%
- Walmart.com: 3.99%
- Amazon.co.uk: 3.62%
- Google.com.br: 3.26%
- Google.it: 2.90%
- Google.co.uk: 2.54%
- Google.fr: 2.17%
- Amazon.ca: 1.81%
- Ebay.co.uk: 1.45%
- Amazon.it: 1.09%
- Google.ca: 0.72%
- Google.es: 0.36%
以下搜索引擎因所示原因不符合条件:
- Aliexpress.com: 无计数器
- Apple.com: 无任何结果
- Bilibili.com: 无计数器
- Bing.com: 无计数器
- Canva.com: 无搜索字段
- Chatgpt.com: 无任何结果
- Cnn.com: 无任何结果
- Discord.com: 无搜索字段
- Duckduckgo.com: 无计数器
- Dzen.ru: 无计数器
- Facebook.com: 无搜索字段
- Fandom.com: 无任何结果
- Github.com: 无任何结果
- Globo.com: 无任何结果
- Imdb.com: 无任何结果
- Instagram.com: 无搜索字段
- Linkedin.com: 无计数器
- Live.com: 无任何结果
- Mail.ru: 无计数器
- Microsoftonline.com: 无网站
- Msn.com: 无计数器
- Naver.com: 无计数器
- Netflix.com: 无搜索字段
- News.yahoo.co.jp: 来源无法解析
- Nytimes.com: 无任何结果
- Office.com: 无搜索字段
- Ozon.ru: 来源无法解析
- Pari-match-in.com: 无网站
- Paypal.com: 无搜索字段
- Pinterest.com: 无搜索字段
- Pornhub.com: 色情网站
- Quora.com: 无计数器
- Reddit.com: 无计数器
- Roblox.com: 无搜索字段
- Samsung.com: 无任何结果
- Spotify.com: 无任何结果
- Stripchat.com: 色情网站
- T.me: 无搜索字段
- Temu.com: 无计数器
- Tiktok.com: 无计数器
- Twitch.tv: 无计数器
- Twitter.com: 无搜索字段
- Vk.com: 无计数器
- Weather.com: 无任何结果
- Whatsapp.com: 无搜索字段
- X.com: 无搜索字段
- Xhamster.com: 色情网站
- Xnxx.com: 色情网站
- Xvideos.com: 色情网站
- Yahoo.co.jp: 来源无法解析
- Yahoo.com: 来源无法解析
- Yandex.ru: 无计数器
- Youtube.com: 无计数器
- Zoom.us: 来源无法解析
编程语言
本节阐明了 TIOBE 指数中哪些被视为编程语言。有 3 个必须全部满足的要求:
- 该语言应在 维基百科 上拥有自己的条目,并且维基百科应明确指出其为编程语言。这就是为什么 (Ruby on) Rails、Excel、Android、Boost、Cocoa、ASP 和 AJAX 不被该指数视为编程语言的原因。
- 该编程语言应是 图灵完备的。因此,HTML 和 XML 不被视为编程语言。
- 该编程语言在 Google 上搜索 "+"<语言> 编程" 时,至少应有 5,000 次点击。
非常相似的编程语言会被归类在一起。目前,在计算分组评分时,会考虑各语言点击量的最大值。将来,我们将改进方法,并取所有点击量的并集(来自数学集合论)。
关于语言如何分组的定义已根据以下规则正式化:
- 如果一种语言有其自己的维基百科条目,则不会与其他语言分组。
- 如果语言 A 自动重定向到另一个维基百科条目 B,则 A 将与 B 分组。
- 如果语言 A 没有单独的维基百科条目,但作为另一个维基百科条目 B 的一部分被提及,则 A 将与 B 分组。
为了过滤掉误报,使用了两种机制。首先,为每种语言定义了一个置信度。默认情况下,置信度为 100%,但对于某些困难的搜索查询,例如“Basic Programming”,置信度会较低。除了置信度之外,有时还会使用例外或强制附加条件来剔除误报。
下表包含所有跟踪的编程语言,包括其分组、置信度和例外情况。
- (Visual) FoxPro: FoxPro, Fox Pro, VFP, VFPA
- 1C:Enterprise script
- 4th Dimension/4D: 4D, 4th Dimension
- ABAP
- ABC: ABC (例外:-tv -channel)
- ActionScript: ActionScript, AS1, AS2, AS3
- Ada
- Agilent VEE
- Algol
- Alice: Alice (置信度:90%)
- Angelscript
- Apex
- APL
- Applescript
- Arc
- AspectJ
- Assembly language: Assembly, Assembly language
- ATLAS
- AutoHotkey: AutoHotkey, AHK
- AutoIt
- AutoLISP
- Automator
- Avenue
- Awk: Awk, Mawk, Gawk, Nawk
- B4X
- Ballerina
- Bash
- Basic: Basic (置信度:0%)
- BBC BASIC
- bc
- BCPL
- BETA: BETA (置信度:10%)
- BlitzMax: BlitzMax, BlitzBasic, Blitz Basic
- Boo
- Bourne shell: Bourne shell, sh
- Brainfuck
- C shell: Csh, C shell (置信度:90%)
- C#: C#, C-Sharp, C Sharp, CSharp, CSharp.NET, C#.NET
- C++
- C++/CLI
- C-Omega
- C: C (例外:-"Objective-C")
- Caml
- Carbon
- Ceylon
- CFML: CFML, ColdFusion
- cg: cg (置信度:80%,例外:-"computer game" -"computer graphics")
- Ch: Ch (例外:+ChScite)
- Chapel: Chapel (例外:-christ)
- CHILL
- CIL
- Citrine
- CL (OS/400): CL (例外:-Lisp), CLLE
- Clarion
- Classic Visual Basic: Visual Basic (置信度:50%), VB (置信度:50%), VBA, VB6
- Clean: Clean (置信度:43%)
- Clipper
- CLIPS
- Clojure: Clojure, ClojureScript
- CLU
- COBOL
- Cobra
- CoffeeScript
- COMAL
- Common Lisp
- CORAL 66
- Crystal: Crystal (置信度:61%,例外:-healing), crystallang
- cT
- Curl
- D: D (置信度:90%,例外:-"3-D programming" -"DTrace"), dlang
- Dart
- DCL
- Delphi/Object Pascal: DwScript, Object Pascal, Delphi, Delphi.NET, Pascal (置信度:95%)
- DiBOL: DBL, Synergy/DE, DIBOL
- Dylan
- E: E (例外:+specman)
- ECMAScript
- EGL
- Eiffel
- Elixir
- Elm
- Emacs Lisp: Emacs Lisp, Elisp
- Emerald
- Erlang
- Etoys
- Euphoria
- EXEC
- F#: F#, F-Sharp, FSharp, F Sharp
- Factor
- Falcon
- Fantom
- Felix: Felix (置信度:86%)
- Forth
- Fortran
- Fortress
- FreeBASIC
- Gambas
- GAMS
- GLSL
- GML: GML, GameMaker Language
- GNU Octave
- Go: Go, Golang
- Gosu
- Groovy: Groovy, GPATH, GSQL, Groovy++
- Hack
- Harbour
- Haskell
- Haxe
- Heron
- HPL
- HyperTalk
- Icon: Icon (置信度:90%)
- IDL: IDL (例外:-corba -interface)
- Idris
- Inform
- Informix-4GL
- INTERCAL
- Io
- Ioke
- J#
- J: J (置信度:50%)
- JADE
- Java
- JavaFX Script
- JavaScript: JavaScript, JS, SSJS
- JScript
- JScript.NET
- Julia: Julia, Julialang, julia-lang
- Korn shell: Korn shell, ksh
- Kotlin
- LabVIEW
- Ladder Logic
- Lasso
- Limbo
- Lingo
- Lisp
- LiveCode: Revolution, LiveCode
- Logo: Logo (置信度:90%,例外:-tv)
- LotusScript
- LPC
- Lua: Lua, LuaJIT
- Lustre
- M4
- MAD: MAD (置信度:50%)
- Magic: Magic (置信度:50%)
- Magik
- Malbolge
- MANTIS
- Maple
- MATLAB
- Max/MSP
- MAXScript
- MDX
- MEL
- Mercury
- Miva
- ML
- Modula-2
- Modula-3
- Mojo
- Monkey
- MOO
- Moto
- MQL5: MQL4, MQL5
- MS-DOS batch
- MUMPS
- NATURAL
- Nemerle
- NetLogo
- Nim: Nim, Nimrod
- Nix
- NQC
- NSIS
- NXT-G
- Oberon
- Object Rexx: Object Rexx, ooRexx, Open Object Rexx
- Objective-C: Objective-C, objc, obj-c
- OCaml: Objective Caml, OCaml
- Occam
- OpenCL
- OpenEdge ABL: Progress, Progress 4GL, ABL, Advanced Business Language, OpenEdge
- OPL
- Oxygene
- Oz
- Paradox
- Pascal: Pascal (置信度:5%)
- Perl
- PHP
- Pike
- PILOT: PILOT (置信度:50%,例外:-"Palm Pilot programming")
- PL/I: PL/1, PL/I
- PL/SQL
- Pliant
- Pony
- PostScript: PostScript, PS
- POV-Ray
- PowerBasic
- PowerScript
- PowerShell
- Processing: Processing (例外:+"sketchbook")
- Programming Without Coding Technology: Programming Without Coding Technology, PWCT
- Prolog
- Pure Data: Pure Data, PD
- PureBasic
- Python
- Q
- R: R (置信度:90%,例外:+"statistical")
- Racket
- Raku: Perl 6, Raku
- REBOL
- Red: Red (置信度:20%)
- REXX
- Ring
- RPG: RPG (置信度:80%,例外:-role), RPGLE, ILERPG, RPGIV, RPGIII, RPG400, RPGII, RPG4
- RPL
- Ruby
- Rust: Rust, Rustlang
- S-PLUS: S-PLUS (例外:+statistical)
- S: S (例外:+statistical)
- SAS
- Sather
- Scala
- Scheme: Scheme (例外:-tv -channel)
- Scratch
- sed
- Seed7
- SIGNAL: SIGNAL (置信度:10%)
- Simula
- Simulink
- Slate: Slate (置信度:57%)
- Small Basic
- Smalltalk
- Smarty
- Snap!
- SNOBOL
- Solidity
- SPARK
- SPSS
- SQL
- SQR
- Squeak
- Squirrel
- Standard ML: Standard ML, SML
- Stata
- Structured Text
- Suneido
- SuperCollider: SuperCollider (置信度:80%)
- Swift
- SystemVerilog: SystemVerilog, Verilog
- TACL
- Tcl: Tcl/Tk, Tcl
- tcsh
- Tex
- thinBasic
- TOM: TOM (置信度:50%)
- Transact-SQL: T-SQL, Transact-SQL, TSQL
- TypeScript: TypeScript, TS
- Uniface
- V: V (置信度:80%)
- Vala/Genie: Vala, Genie
- VBScript
- VHDL
- Visual Basic: Visual Basic .NET, VB.NET, Visual Basic.NET, Visual Basic (置信度:50%), VB (置信度:50%)
- WebAssembly: WASM, WebAssembly
- WebDNA
- Whitespace
- Wolfram: Mathematica, Wolfram
- X++
- X10
- xBase
- XBase++
- XC
- Xen
- Xojo: REALbasic, Xojo
- XPL
- XQuery
- XSLT
- Xtend
- yacc
- Yorick
- Z shell: Z shell, zsh
- Zig: Zig, zlang
评分
评分是通过统计最受欢迎搜索引擎的点击量计算得出的。使用的搜索查询为:
+"<language> programming"
点击量决定了语言的评分。列表中所有语言的点击量在每个搜索引擎中都进行了标准化。换句话说,所有语言的总分加起来为 100%。我们定义 "hits(SE)" 为搜索引擎 SE 中所有语言的点击量总和,"hits(PL,SE)" 为搜索引擎 SE 中编程语言 PL 的点击量。查询中可能出现的误报在 "hits(PL,SE)" 的定义中已被过滤。这是通过对每个查询使用手动确定的置信度来完成的。例如,查询“Basic programming”也会返回包含“Improve your basic programming skills in Java”的页面。每个搜索引擎的前 100 个页面都会检查是否存在可能的误报,并以此来定义置信度。如果该因子为 90%,则 "hits(PL,SE)" 仅使用 90% 的点击量。
评分通过以下公式计算:
(hits(PL,SE1)/hits(SE1) + ... + hits(PL,SEn)/hits(SEn))/n
其中 n 是所使用的搜索引擎数量。
任何关于改进 TIOBE 指数计算方法的建议或想法都将不胜感激(tpci@tiobe.com)。