Я создал статистику языков, используемых в решениях на Codeforces. Статистика есть за годы с 2010 по 2015, и по языкам программирования в процентах.
Codeforces API
Для парсинга использовал Java и библиотеку org.json для удобного хранения файла формата JSON. Считывается весь текст с запроса contest.status, потом оттуда каждый Submission обрабатывается отдельно
Что именно учитывается
Учитывались посылки ТОЛЬКО с соревнования (participantType = CONTESTANT и OUT_OF_COMPETITION), и ТОЛЬКО те, которые полностью прошли все тесты (verdict = OK). Участники могли бы сознательно использовать непопулярные языки программирования в дорешивании, или сделать десять неудачных посылок, а это не отражает реальное использование языка в контестах.
Объединение языков
Последний контест на время написания блога — Codeforces Round 321 (Div. 2), является самым массовым за весь 2015 год. Его начальная статистика в текстовом виде представлена здесь — http://ideone.com/X4GYBi. Первые три строчки по популярности занимают GNU C++, GNU C++11, MS C++. Несмотря на то, что компиляторы и версии языков различаются, фактически используется один и тот же язык. Поэтому я объединил различные спецификации одних и тех же языков в один язык. Некоторые из них уже не существуют на Codeforces, такие как GNU C++0x или Java 6.
Результаты Surprise Language Round не учитываются. В конце концов, через эти языки нельзя было бы решить "нормальную" задачу :)
Использовались свободные онлайн-сервисы для создания графиков
Все графики сделаны в двух видах — с C++ и без него.
Статистика по годам
2015 год (контесты 501 — 580)
2014 год (контесты 380 — 500)
2013 год (контесты 261 — 379)
2012 год (контесты 140 — 260)
2011 год (контесты 52 — 139)
2010 год (контесты 1 — 51)
Языки из Surprise Language Round-ов за все время работы Codeforces — Picat, Ada, FALSE, Mysterious Language (на самом деле Fortran), Roco, Factor, Secret_171 (на самом деле COBOL), Befunge, Pike, Tcl, Io.
Статистика по языкам
Общий график изменения популярности языков
Итоги
Многие языки являются слишком непопулярными в промышленном программировании, чтобы находить поклонников, которые не променяют их на более удобные для спортивного программирования — их доля равняется одной десятой или даже одной сотой процента от всего количества посылок. Также, по моему мнению, многие языки настолько неудобные для спортивного программирования, что решать контесты на Codeforces в них не имеет никакого смысла.
За 5-6 лет произошли изменения в популярности языков. C++ наращивает долю пользователей. Delphi потерял в популярности в 20(!) раз. Доля FPC и C# упала в 4 и в 3 раза соответственно.
while(1)
{
(c++)++;
}
А если окажется, что доля паскаля означает не удобство его в промышленном программировании, а количество школьников, приходящих каждый год на CF? А ведь это количество, в свою очередь, характеризует популярность олимпиадного движения в стране. И это количество продолжает падать! А ведь популярность олимпиадного движения — находится в зависимости с уровнем развитости научной сферы и всей системы образования! Так что, мы все умрем?) В пещере?)
PS Шутка)
Про количество школьников нельзя ничего утверждать, не ознакомившись с данными о росте количества пользователей. И то, неизвестно, например, действительно ли (как я думаю) — на cf паскаль используют только русскоговорящие школьники.
Об удобстве в промышленном программировании тоже нельзя, т.к. для этого нужно подсчитать "сколько на cf промышленных программистов, которые сабмитили на паскале, но потом пересели на C++". Это если с некоторой долей уверенности предположить, что и контесты они писали на тех же языках, что используют в работе. Это если их вообще окажется хоть сколько-нибудь много))
Ну а уж про сферу образования и прочих коней в вакууме это был совсем бред — там имеет смысл подсчитывать статистику только по гораздо более периодичным и массовым процессам (ну т.е. всяко не по количеству школьников на cf).
PPS Не получается что-либо интересное сказать по приведенной статистике, единственное, в чем можно быть уверенным — "теперь еще больше удачных посылок на C++, чем на других языках")) Хотя автору несомненный +, как и всем, кто любит писать код и что-нибудь подсчитывать)))
Нет, я начал с С# :) Но быстро поменял язык на C++ на этапе, когда умел решать Div2 AB, потому что тогда важнее оказалась быстрота написания кода
Статистика в отдельно взятой глубинке по тем, кто ездил на областной этап, другая — 5/6 и 6/7 используют Паскаль, остальные 1/6 и 1/7 были C# и C++. Никого на Codeforces нет, кроме меня. Такая же картинка в других городах
Когда я заканчивал школу, школьников, использующих С++, почти не было. По крайней мере, в Саратове. Даже среди тех, кто занимал наиболее высокие места(например, SergeyRogulenko, RAD, NALP на момент моего окончания школы были паскалистами. Хотя, возможно, в год перед университетом начали переходить на С++, сейчас уже не помню. Скорее всего, все-таки "паскалистами" вплоть до окончания школы и оставались). Года через два-три ситуация стала уже совершенно другой: PavelKunyavskiy заканчивал школу, уже программируя на С++, и было еще один-два "плюсовика" среди победителей и призеров местного этапа РОИ. Сейчас же уже почти все топовые участники регионального ВКОШП пишут на "плюсах", в редких случаях на JAVA. Так что не уверен, что падение популярности паскаля говорит о падении интереса школьников к СП.
http://www.rapidtables.com/tools/pie-chart.htm — круги, http://www.chartgo.com/en/chartbar.jsp — столбцы и финальный график
Очень странно что py2 и py3 у Вас один язык, а py2 и pypy2 — разные. Или это только на первой диаграмме?
Python2 и Python3 относятся к PyPy2 и PyPy3 как С++ к С и FPC к Delphi — они похожи очень сильно, но это как бы разные форки
Интересно, на самом деле. Году в 2010 я думал, что популярность С++ начнет постепенно падать. В конце концов, в Java есть длинка, встроенные HashSet и HashMap(правда, как выяснилось позже, не самые качественные). В конце концов Java намного чаще используется промышленниками. А небольшая потеря во времени работы обычно не существенна, так как TL ставится с запасом. И некоторые университеты в 2010 году активно продвигали Java. В чем же дело? Неужели e-maxx оказал столь существенное влияние?
с запасом относительно авторского решения. А если например у тебя в асимптотике вылез лишний log, то уже очень велика вероятность того что решение на Java получит TLE.
Кроме того, стандартная библиотека Java по сравнению с плюсовой очень многословна и неинтуитивна.
Мне очень напряжно писать на Java из-за отсутствия, например, Pair. TL бывает часто. Шаблон быстрого ввода данных видел только на РОИ 2015 из всех поездок.
Постоянно всякие приколы типа сегфолта в легкой задаче, где рекурсия 10^6 вызовов, а на С++ заходит. В C++ когда в set надо брать первое или предпоследнее значение, последняя операция делается итератором в 2 строчки, тогда как в Java (можно только с начала идти) придется поддерживать велосипед из двух сетов с разным порядком сортировки
Я прощу Яве абсолютно все, если в новой версии встроят эту коллекцию, и конечно же Pair
Интересна была бы статистика, как рейтинг (и вклад :)) зависит от используемого языка.
Юзеров нельзя брать >9000 за раз, как посылки. Можно код модифицировать и посмотреть статистику сдачи D и E в Div1 по языкам (можно и C). Тогда в контесте не должно быть OUT_OF_COMPETITION и значение point у Submission должно быть больше или равно 2000 (можно и 1500)
А в чём проблема распарсить рейтинг?
Ах, ну и да, почему-то никто не сказал. Автор, большой респект за работу, я сам буквально пару недель назад думал, что было бы неплохо иметь статистику по языкам программирования среди СПшников. Очень полезная работа, еще одно мерси.
ЗЫ: если распарсить этот рейтинг — то работа станет вообще бесценной.
An appreciated effort
Идея для графика:
Кто-нибудь знает, как такие графики по-научному называются?
stacked area chart
Допустим, не "лишние" языки, а языки с Surprise Language Round-ов. Secret_171 на самом деле COBOL, а "Mysterious Language" — Fortran.
Anyone know the reason for the rise of C++? I would have imagined, people would prefer Python slowly since many colleges/high-schools are starting their courses with Python/Java nowadays.
Perhaps this is because of the powerful libraries and containers of C++ saves a lot of time in coding (I am not an expert in Python so if Python 3 library is that powerful compare to C++ I take it back). Moreover since C++ has a big head start of Python there are a bunch of online tutorials and implementation code that are written in C++. Not to mention that in some places C/C++ still considers as the fundamental language.