<< 재개발에 대하여 | Home | 정보 과잉 시대 효률적 정보 소비를 가능하게 해주는 큐레이션 >>

프로그래밍 언어별 랭킹(2012년)

Ranking the popularity of programming languages(2012)

Paul Graham은 "Revenge of the Nerds"와 "Beating for average"에서 언어의 관성을 언급하면서, 익숙해지면 그 언어의 틀 속에서 자신의 생각을 가두게 되어 편견에 사로잡혀 언어의 활용을 효과적이지 못하게 된다면서, 익숙한 언어보다는 적합한 프로그래밍 언어를 선택할 줄 알아야 한다고 했죠.
즉, 최소한 몇가지 언어를 알고 자신의 업무에 적합하게 사용할 줄 알아야 한다는 말입니다.

그 다음은 최소한의 몇가지 언어를 선택해야하는데....

적어도 확률적으로 인기있는 언어 순으로 접해보고 그 언어가 가지는 장점, 특성을 파악한 다음 업무 등에 적합한 언어를 선택하면 될 것이 가장 좋아 보이죠. 그런 의미에서 재미삼아 프로그래밍 언어에 대한 최신 랭킹 정보를 공유합니다. ^^

항상 할일 많고, 시간 없는 대한 민국 개발자들을 언어의 관성과 대중성(인기)에 몰입되어, 생산성, 적합성을 무시하는 무뇌자(언어의 관성으로 인해 적절한 선택을 하지 못하는 사람)로 몬다. 넋두리... ^^

아래의 프로그래밍 언어의 랭킹 정보는 GitHubStackOverflow에서 데이터를 수집해서 랭킹 도표를 만들었습니다.
통계 지표의 기초 자료는 GitHub에는 등록된 프로젝트의 수로 산정된 Gihhub 랭킹 정보와 StackOverflow에는 Tag 수를 가지고 만들었고 수집 소스, 그리고 통계에 관련된 소스들을 공유해요.

1. 상위 언어별 순위
순위GitHubStackOverflow
1JavaScriptC#
2RubyJava
3PythonPHP
4ShellJavaScript
5JavaC++
6PHPPython
7C#Objective-C
8CC
9PerlRuby
10C++Perl
11Objective-CDelphi


상위권에 드는 언어중에 스크립트 언어가 많죠. 이유는 프로그래밍 언어 자체의 완성도도 중요하겠지만, 빨리 배울 수 있고, 개발 생산성도 높고, 관련 오픈 소스들도 많고, 개발하는 데 편리한 도구이 있는 등이 해당되겠죠.
Python에는 pip/easy_install + PyPI, Perl은 CPAN, Ruby는 Gems, PHP는 PEAR, node에는 npm 등이 쉽게 확장 가능하고 개발에 편이성을 증대시켜주는 것들이죠.
그리고 최근에는 R, Scala, Objective-C, CoffeeScript, Lua, Clojure, Groovy 등이 많이 뜨고 있는 것도 볼 수 있네요.

위 통계 자료를 보니 TIOBE Programming Community Index for February 2012자료와 비슷하다.


2. 통계 그래프


3. 프로그래밍 언어별 랭킹 수집 소스(Python - GitHub, StackOverflow)
   - GitHub
#!/usr/bin/env python

import urllib, re
from multiprocessing import Pool

content = urllib.urlopen("http://github.com/languages").read()
ranks = {}

def fetch(lang):
    lang = urllib.unquote(lang)
    sub = urllib.urlopen("http://github.com/languages/" + lang).read()
    matches = re.findall("is the #([0-9]+)", sub)
    if(len(matches) > 0):
        rank = matches[0]
        ranks[lang] = rank
        print lang,',',rank
    else:
       matches = re.findall("is the most popular", sub)
       if(len(matches) > 0):
          ranks[lang] = 1
          print lang,',',1

if __name__ == '__main__':
    langs = re.findall("/languages/(.+)\"", content)
    p = Pool(45)
    p.map(fetch, langs)

   - StackOverflow
#!/usr/bin/env python
#

import urllib
import re

langs = ('ASP','ActionScript','Ada','Arc','Arduino','Assembly','AutoHotkey','Boo',
'C#','C++','C','Clojure','CoffeeScript','ColdFusion','Common Lisp',
'D','Delphi','Dylan','Eiffel','Emacs Lisp','Erlang','FORTRAN','Factor',
'Fancy','Go','Gosu','Groovy','HaXe','Haskell','Io','Ioke','Java','JavaScript',
'Lua','Matlab','Mirah','Nemerle','Nu','OCaml','Objective-C','Objective-J','PHP',
'Parrot','Perl','Prolog','Pure Data','Python','R','Racket','Rebol','Ruby','Rust',
'Scala','Scheme','Self','Shell','Smalltalk','Standard ML','SuperCollider','Tcl',
'Turing','VHDL','Vala','Verilog','VimL','Visual Basic','XQuery','ooc')
surl = 'http://stackoverflow.com/questions/tagged/'

counts = {}
HexCharacters = "0123456789abcdef"

def UrlEncode(s):
    r = ''
    for c in s:
        o = ord(c)
        if (o >= 48 and o <= 57) or \
            (o >= 97 and o <= 122) or \
            (o >= 65 and o <= 90) or \
            o == 36 or o == 45 or o == 95 or \
            o == 46 or o == 43 or o == 33 or \
            o == 42 or o == 39 or o == 40 or \
            o == 41 or o == 44:
            r += c
        else:
            r += '%' + CleanCharHex(c)
    return r

def CleanCharHex(c):
    o = ord(c)
    r = HexCharacters[o / 16]
    r += HexCharacters[o % 16]
    return r

for lang in langs:
    enclang = UrlEncode(lang)
    response = urllib.urlopen(surl + enclang).read()
    message = re.search('summarycount.*>(.*)<', response)
    if message!=None:
        count = int(message.group(1).replace(',', ''))
    else:
        count = 0
    counts[lang] = count
    #print lang, ':', count
sorted_counts = sorted(counts.items(), key=lambda(k,v):(v,k))
sorted_counts.reverse()
for i in range(0, 68):
   print sorted_counts[i][0],',',i+1


4. R 그래프 소스

if (!require(calibrate)) install.packages('calibrate')
library(calibrate)

con <- 
 url("http://mimul.com/pebble/default/files/blog/language_rank.csv")
rank_data <- read.csv(con,sep=",",head=TRUE)

plot(rank_data$github.rank,rank_data$so.rank,
       main="programming languages popularity",
       xlab="Rank On GitHub",
       ylab="Rank On StackOverflow", bg="yellow", col="red")
abline(lm(github.rank ~ so.rank, data= rank_data), col= "blue")
textxy(rank_data$github.rank,rank_data$so.rank,rank_data$Language)


어떤 프로그래밍 언어들이 상위권에 있는지 트랜드 확보차원에서 한번 보시기 바랍니다.

관련 소스 다운로드는 github.com에서 받으실 수 있습니다.
Tags :


Re: 프로그래밍 언어별 랭킹(2012년)

스크립트언어가 강세인걸 보니 프로그래밍 언어의 선택 기준에서 생산성도 무시못할 요소인것 같네요.

Re: 프로그래밍 언어별 랭킹(2012년)

stackoverflow에 태그가 많다는것은 인기도 있겠지만 그많큼 복잡하거나 자료를 찾기힘들거나 선택의 갈림길이 많은(비슷한종류의 플레임웍, 라이브러리) 언어이기 때문에 질문등이 많이올라가는 영향도 있을것같네요.  

Avatar: 미물

Re: 프로그래밍 언어별 랭킹(2012년)

네. 배우기 어렵고, 레퍼런스 적으면 질문이 많겠네요. 한국사람들은 검색에 열올리지 말고 질문을 하고 답하는 문화가 활발했으면 좋겠어요 그것도 지식물들인데. 계속 검색해서 눈팅만 하다보면 지식이 풍부해지지 않죠.

Re: 프로그래밍 언어별 랭킹(2012년)

검색에 나오지 않는것은 질문하는게 맞겠지요, 하지만 왠만한 문제는 거의 검색으로만 찾을 수 있는데, 그걸 질문하는것은 아닌것 같은데요?

Add a comment Send a TrackBack