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

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

В отличие от предыдущих, этот пост именно про Java. Топкодер, как известно, дает нам datafeeds, по которым можно подсчитать статистику какого-нибудь рода. Вот здесь и подсчитана зависимость по 50 последним SRM'ам частоты использования Java. Для задач, для которых участник произвел Submit, или только Compiled, топкодер указывает язык в датафиде для SRM'а. Это лучше, чем default language в профиле, т.к. он не у всех указан и его нет в датафидах.

Участники, у которых было <3 участий в SRM-ах из выборки, или менее 3 submit or compiled, не учитывались. Остальные были поделены на 20 столбиков и в каждом столбике считалось среднее арифметическое частоты использования Java для каждого участника. На оси X подписано правое граничное значение рейтинга для каждого столбика.

Исходный файл скрипта-скачивателя и парсера приаттачен к рисунку (RARPNG). Рекомендуется использовать Linux или cygwin для запуска.

http://img188.imageshack.us/img188/701/graph1v.png


[p.s. не совсем понятный интерфейс CodeForces - я думал, что сервер хранит копию картинки]

Кажется, видна корреляция. Поставьте мне кучу минусов за неправду.

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

14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
У меня одного картинка не отображается? или так и задумано, что картинки не видно? :)
14 лет назад, # |
  Проголосовать: нравится +4 Проголосовать: не нравится
Вот если бы ты представил статистику, отражающую частоту успешности сдачи задачи в зависимости от её сложности с разбивкой по ЯП, было бы действительно интересно.
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Вот вспомнил одно забавное преимущество C++ над Java на TopCoder. За счет использования большого количества макросов, зачастую очень специфичных для конкретного участника, его код становится менее уязвимым для челленджей, потому что для понимания кода требуется вникать в многочисленные макросы. Конечно, любой код, в том числе и на Java, можно пообфускейтить до невероятной трудночитаемости, но за это вполне реально получить по шапке, а вот к использованию двух десятков макросов, хитрых и не очень, никто не придерется.
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Преимущество для кого?
    Если решение неверно, то не так важно, челленжнули его или нет. Максимум от челленжа можно опуститься на одно место вниз, и то в маловероятном случае, если тот кто челленжнул отставал менее чем на 50 очков от тебя.
    • 14 лет назад, # ^ |
        Проголосовать: нравится -6 Проголосовать: не нравится
      Тому, кто пишет на С++ легче читать чужой С++ код. Т.к. потенциальные "жертвы" челленджей чаще пишут на С++, то знание его, может быть, дает преимущество. Потом выложу статистику.
14 лет назад, # |
  Проголосовать: нравится +10 Проголосовать: не нравится
Ты хотел показать, что опытные участники реже пишут на джава? Давай я это объясню попробую. 

Подавляющее большинство участников пишет олимпиадные задачи на языке, на котором они привыкли писать олимпиадные задачи. Поменять "язык для олимпиад" дело довольно непростое, и на это требуется какое-то время. А реальной разницы между C++, Java и C# на олимпиадах нет при условии хорошего знания языка и вещей, с ним связанных. Поэтому для многих и смысла менять язык нет, они пользуются сильными сторонами того языка, к которому привыкли (и да, многие еще и пытаются убедить других, что их выбор лучший, хотя выбор этот, возможно, был просто стечением обстоятельств).

Теперь возьмем сильных опытных участников с высоким рейтингом на топкодере и вспомним, какие из языков разрешены на международных соревнованиях: IOI - Pascal/C++, ICPC - C++/Java, TopCoder - C++/Java/C#/Vb. В пересечение попадает только С++. То есть многие из этих участников либо писали когда-то на С++, либо переходили с Паскаля на Java/С#. Вспомнив про эффективность С++ и про то, в каком порядке часто изучают языки программирования в университетах, понятно, что первых должно было быть существенно больше, чем вторых.
Кроме нынешних и бывших "олимпиадников" в топкодере участвует еще очень много начинающих программистов, либо профессионалов, решивших посмотреть, что ж это за топкодер такой. У них нет привычки писать на чем-либо олимпиадные задачи, поэтому они выбирают язык, либо который сейчас изучают, либо используют в работе. Рейтинг у них обычно не сильно высокий, а Java - один из самых (если не самый) распространенный язык в мире.

Пожалуй, надо заканчивать изображать из себя КО, но просто обилие обсуждений на тему языков на этом ресурсе удивляет своим низкокачественным содержанием.

P.S. А вообще, в идеале нужно уметь использовать наиболее подходящий для той или иной задачи язык из разрешенных. Жаль, что я этому так и не научился.
  • 14 лет назад, # ^ |
      Проголосовать: нравится -7 Проголосовать: не нравится

    Сменить язык сложно в промышленном программировании, когда есть миллион SLOC и недовольные пользователи. А для профессионального олимпиадника смена языка не представляет (реальной, а не воображаемой) сложности, да и длительных "окон", когда нет серьезных соревнований, в течение года предостаточно.

    Дальше мне непонятно: ты пишешь, что С++ распространен из-за преподавания в университетах, и что в то же время много новичков пишет на Java.

    Так какую надо сделать отсечку данных, чтобы обратить корреляцию в ноль?

    • 14 лет назад, # ^ |
        Проголосовать: нравится +3 Проголосовать: не нравится
      >А для профессионального олимпиадника смена языка не представляет (реальной, а не воображаемой) сложности, да и длительных "окон", когда нет серьезных соревнований, в течение года предостаточно.
      Я согласен. Я сам переходил с Паскаля на С++, но была веская причина: писать на топкодере и ICPC на одном языке (тогда еще на ICPC был паскаль). Но я говорил о том, что такой вот реальной необходимости менять язык у большинства людей нет.

      >Дальше мне непонятно: ты пишешь, что С++ распространен из-за преподавания в университетах, и что в то же время много новичков пишет на Java.
      Ну, я не совсем об этом писал. Я скорее имел ввиду, что школьники-олимпиадники, писавшие на паскале, чаще переходят на с++, который чаще изучается до джавы, чем наоборот.

      >Так какую надо сделать отсечку данных, чтобы обратить корреляцию в ноль?
      Да, черт его знает. Я бы вообще не делал каких-то особых выводов из статистики. Ведь популярность языков (это касается не только олимпиад) лишь частично зависит от их "качества". Есть еще много разных побочных факторов.
14 лет назад, # |
  Проголосовать: нравится +6 Проголосовать: не нравится
Я бы на граф Passed/Submitted  от выбранного языка посмотрел.
Отдельно для С++ и отдельно для Java :о)

А тут показано только то, что новички больше пишут на Java. У автора явно какая-то проблема с Java :о)
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

alliumnsk, я тоже очень не люблю java, но, убедить всех в том, что java sucks невозможно. Да и не нужно.

Лучше всего положить конец спорам, всё равно каждый останется при своём мнении. А то из интеллектуального ресурса получается базар: одни орут "СПАРТАК ЧЕМПИОН", другие ещё что-то...

Перефразирую слова одного своего знакомого: чем больше "дубов" пишут контесты, тем больше у нас рейта ;-)

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

Не знаю как остальные, а мне нравится следить за творениями alliumnskа (это как минимум весело).

Ведь именно в споре истина рождается.

Просто человек показывает свою целеустремлённость. :)


Хорошо (?) ещё здесь не начались споры о том, нужно ли спортивное программирование или нет.

Хотя здесь и можно собрать (аудиторией) кучу причин, почему оно нужно.

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

    Кстати неплохая темка. В последних книжках появилась статья, содержащая несколько (15?) причин, почему оно нужно. Но там это уж больно всё размазанно и нечётко.

    Возможно стоит сформировать несколько более конкретных тезисов по этому поводу.

14 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится
Этот график говорит о следующем:
1. Java на текущей момент является самым популярным языком среди новичков
2. Java ранее не была самым популярным языком среди новичков (так как ее в большинстве мест поддерживали через одно место (на старом uva, например), а так же из-за отсутствия человеческих коллекций), а потому среди текущих участников с неплохим рейтингом мало кто на ней пишет.