Блог пользователя Sehnsucht

Автор Sehnsucht, 9 лет назад, По-русски

Я создал статистику языков, используемых в решениях на 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 раза соответственно.

Исходники парсера

  • Проголосовать: нравится
  • +184
  • Проголосовать: не нравится

»
9 лет назад, # |
  Проголосовать: нравится +4 Проголосовать: не нравится

while(1)
{
(c++)++;
}

»
9 лет назад, # |
  Проголосовать: нравится +25 Проголосовать: не нравится

А если окажется, что доля паскаля означает не удобство его в промышленном программировании, а количество школьников, приходящих каждый год на CF? А ведь это количество, в свою очередь, характеризует популярность олимпиадного движения в стране. И это количество продолжает падать! А ведь популярность олимпиадного движения — находится в зависимости с уровнем развитости научной сферы и всей системы образования! Так что, мы все умрем?) В пещере?)

PS Шутка)

  1. Про количество школьников нельзя ничего утверждать, не ознакомившись с данными о росте количества пользователей. И то, неизвестно, например, действительно ли (как я думаю) — на cf паскаль используют только русскоговорящие школьники.

  2. Об удобстве в промышленном программировании тоже нельзя, т.к. для этого нужно подсчитать "сколько на cf промышленных программистов, которые сабмитили на паскале, но потом пересели на C++". Это если с некоторой долей уверенности предположить, что и контесты они писали на тех же языках, что используют в работе. Это если их вообще окажется хоть сколько-нибудь много))

  3. Ну а уж про сферу образования и прочих коней в вакууме это был совсем бред — там имеет смысл подсчитывать статистику только по гораздо более периодичным и массовым процессам (ну т.е. всяко не по количеству школьников на cf).

PPS Не получается что-либо интересное сказать по приведенной статистике, единственное, в чем можно быть уверенным — "теперь еще больше удачных посылок на C++, чем на других языках")) Хотя автору несомненный +, как и всем, кто любит писать код и что-нибудь подсчитывать)))

  • »
    »
    9 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    Нет, я начал с С# :) Но быстро поменял язык на C++ на этапе, когда умел решать Div2 AB, потому что тогда важнее оказалась быстрота написания кода
    Статистика в отдельно взятой глубинке по тем, кто ездил на областной этап, другая — 5/6 и 6/7 используют Паскаль, остальные 1/6 и 1/7 были C# и C++. Никого на Codeforces нет, кроме меня. Такая же картинка в других городах

  • »
    »
    9 лет назад, # ^ |
    Rev. 4   Проголосовать: нравится +14 Проголосовать: не нравится

    Когда я заканчивал школу, школьников, использующих С++, почти не было. По крайней мере, в Саратове. Даже среди тех, кто занимал наиболее высокие места(например, SergeyRogulenko, RAD, NALP на момент моего окончания школы были паскалистами. Хотя, возможно, в год перед университетом начали переходить на С++, сейчас уже не помню. Скорее всего, все-таки "паскалистами" вплоть до окончания школы и оставались). Года через два-три ситуация стала уже совершенно другой: PavelKunyavskiy заканчивал школу, уже программируя на С++, и было еще один-два "плюсовика" среди победителей и призеров местного этапа РОИ. Сейчас же уже почти все топовые участники регионального ВКОШП пишут на "плюсах", в редких случаях на JAVA. Так что не уверен, что падение популярности паскаля говорит о падении интереса школьников к СП.

»
9 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
  1. А какие "свободные сервисы" использовались для построения графиков? А то мне на лабы неохота чертить миллиметровку/делать что-то через Excel)
  2. Спасибо за исходник на Java, в очередной раз поражаюсь мощи языка=)
»
9 лет назад, # |
  Проголосовать: нравится +21 Проголосовать: не нравится

Очень странно что py2 и py3 у Вас один язык, а py2 и pypy2 — разные. Или это только на первой диаграмме?

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Python2 и Python3 относятся к PyPy2 и PyPy3 как С++ к С и FPC к Delphi — они похожи очень сильно, но это как бы разные форки

»
9 лет назад, # |
  Проголосовать: нравится -21 Проголосовать: не нравится

Интересно, на самом деле. Году в 2010 я думал, что популярность С++ начнет постепенно падать. В конце концов, в Java есть длинка, встроенные HashSet и HashMap(правда, как выяснилось позже, не самые качественные). В конце концов Java намного чаще используется промышленниками. А небольшая потеря во времени работы обычно не существенна, так как TL ставится с запасом. И некоторые университеты в 2010 году активно продвигали Java. В чем же дело? Неужели e-maxx оказал столь существенное влияние?

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится

    А небольшая потеря во времени работы обычно не существенна, так как TL ставится с запасом

    с запасом относительно авторского решения. А если например у тебя в асимптотике вылез лишний log, то уже очень велика вероятность того что решение на Java получит TLE.

    Кроме того, стандартная библиотека Java по сравнению с плюсовой очень многословна и неинтуитивна.

  • »
    »
    9 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +6 Проголосовать: не нравится

    Мне очень напряжно писать на Java из-за отсутствия, например, Pair. TL бывает часто. Шаблон быстрого ввода данных видел только на РОИ 2015 из всех поездок.
    Постоянно всякие приколы типа сегфолта в легкой задаче, где рекурсия 10^6 вызовов, а на С++ заходит. В C++ когда в set надо брать первое или предпоследнее значение, последняя операция делается итератором в 2 строчки, тогда как в Java (можно только с начала идти) придется поддерживать велосипед из двух сетов с разным порядком сортировки

    Я прощу Яве абсолютно все, если в новой версии встроят эту коллекцию, и конечно же Pair

»
9 лет назад, # |
Rev. 2   Проголосовать: нравится +21 Проголосовать: не нравится

Интересна была бы статистика, как рейтинг (и вклад :)) зависит от используемого языка.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Юзеров нельзя брать >9000 за раз, как посылки. Можно код модифицировать и посмотреть статистику сдачи D и E в Div1 по языкам (можно и C). Тогда в контесте не должно быть OUT_OF_COMPETITION и значение point у Submission должно быть больше или равно 2000 (можно и 1500)

»
9 лет назад, # |
Rev. 2   Проголосовать: нравится +14 Проголосовать: не нравится

Ах, ну и да, почему-то никто не сказал. Автор, большой респект за работу, я сам буквально пару недель назад думал, что было бы неплохо иметь статистику по языкам программирования среди СПшников. Очень полезная работа, еще одно мерси.

ЗЫ: если распарсить этот рейтинг — то работа станет вообще бесценной.

»
9 лет назад, # |
  Проголосовать: нравится +13 Проголосовать: не нравится

An appreciated effort

»
9 лет назад, # |
Rev. 2   Проголосовать: нравится +13 Проголосовать: не нравится

Идея для графика:

Кто-нибудь знает, как такие графики по-научному называются?

»
9 лет назад, # |
  Проголосовать: нравится +50 Проголосовать: не нравится

Допустим, не "лишние" языки, а языки с Surprise Language Round-ов. Secret_171 на самом деле COBOL, а "Mysterious Language" — Fortran.

»
9 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

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.

  • »
    »
    8 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    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.