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

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

Привет, Codeforces!

В январе в грантовой программе фонда Виктора Шабурова Botan Investments приняли участие 14 вузов. Больше всего студентов — 19 человек — удалось привлечь к тренировкам в УрФУ (Екатеринбург). Больше всего тренировок провели в СибГУТИ (Новосибирск), МГУ (Саранск) и УрФУ (Екатеринбург).

В этом месяце фонд выступил спонсором сборов в Петрозаводске, которые проходят с 30 января по 9 февраля, а также помог командам из Владивостока, Казани и Екатеринбурга с поездкой на сборы. Напоминаю также о новой грантовой программе от Botan Investments в области Machine Learning. Первые участники уже приступили к работе, прием заявок будет продолжаться до середины февраля.

В группе Botan Investments в ВК вышли новые посты Михаила droptable Рубинчика о подготовке школьников и более подробно о подготовке школьников в Свердловской области, а также о компьютерном времени на контестах и использовании принтера для экономии времени. А сегодня Михаил подготовил пост о снижении порога входа в спортпрог и о создании третьего дивизиона на CF.

В этом посте я продолжаю разговор о том, что для новичков сложно найти задачи. Например, их нет здесь, на CF — самой крупной точке входа для новичков в спортивное программирование.

Считается, что в первом дивизионе сложные задачи, а во втором простые. Но, на мой взгляд, это не так: в первом дивизионе задачи очень сложные, а во втором — просто сложные. В предыдущем посте я описывал, как проводил двухнедельные сборы для школьников, которые перед этим весь год целенаправленно готовились к олимпиадам: решали задачи, раз в неделю слушали лекции по алгоритмам и т.д. На одной из тренировок я дал им подборку из 20 задач Div2.A. И пошло очень тяжело, несмотря на то, что я сильных игроков распределил по разным командам.

Наверное, можно подумать, что команды были слишком слабые, но это не так. В этом сезоне команда Первоуральск прошла на ВКОШП и решила 3 задачи. Эти же ребята обогнали 200 команд на отборах с УрКОП (уральский отбор на ВКОШП). Результат не суперкрутой, но всё-таки далеко не нулевой. И вот им было тяжеловато решать подборку из Div2.A

Но если мы говорим о задачах из второго дивизиона, как о задачах для новичков, то они должны быть действительно простыми! Много людей приходит в олимпиады именно через CF. А раз CF — это парадный вход спортивного программирования, то наверное, стоит упростить этот вход и быть более дружелюбными к новичкам.

Представьте, что на раунды второго дивизиона приходит человек, который недавно выучил язык программирования. И если каждый раз за 2,5 часа он решает только одну задачу (или вообще ничего не решает), то у него просто опустятся руки и он уйдет из олимпиад.

Из этого у меня напрашивается следующий вывод: на CF должен быть более простой третий дивизион с раундами, которые состоят из нескольких задачах для новичков (с решением в один for без if или один if без for) и еще парой по уровню сложности как задачи А и B из второго дивизиона. Только тогда мы сможем говорить, что на CF есть формат тренировок, на которых школьник сможет решить что-то сам (без тренера, который стоит рядом), не разочаруется в своих силах и останется в спортивном программировании.


А если развивать мысль дальше, то можно сделать и 4 дивизион на детских обучающих языках программирования — например, как на https://studio.code.org/courses. Тогда мы сможем преодолеть пропасть между обучением языку и обучением олимпиадам. Интересный опыт в этом плане есть у тренера Александра Кленина из Владивостока, который проводит среди школьников муниципальные соревнования на собственном игровом языке программирования. Здесь можно посмотреть пример. Это обучающий язык, но при этом есть таблички с результатами, как на олимпиадах. А представляете, если будут взломы на таком языке? ;) Мы будем иметь дивизион, например, из трёх задач на обучающем языке программирования и двух задач уровня А+В на обычных языках. Это будет, с одной стороны, усиленно подталкивать к обучению основных языков программирования, с другой стороны, начинать с такого дивизиона будет легко даже первокласснику.

Если перенять этот опыт и встроить его в CF, мы дадим возможность детям на старте изучать визуальные околоигровые языки программирования. А после этого они естественным образом будут переходить в следующий дивизион и решать задачи на программирование.

Я думаю, что в этом заинтересован и сам CF, так как у портала будет огромными темпами расти база клиентов. Ну и, конечно, в этом заинтересовано все олимпиадное сообщество, ведь чем больше в него вовлечено людей, тем больше спонсоров, организаторов и популярности у самого движения. На мой взгляд, вопрос только в том, кто первым это сделает, CF или какая-то другая платформа :)

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

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

http://acmp.ru/index.asp?main=tasks&ob=iq&id_type=0 Задачи доступны после первой лекции по программированию, прорешка первых 100 позволяет начинать решать div2 A или 250.

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

Достаточно спорное утверждение, что CF кровь из носу необходимо снижать порог вхождения. Уже сейчас можно наблюдать сотни фейковых аккаунтов, созданных жёлто-красными за пару часов до див2-only контеста, просто чтобы новичков "по фану" поломать. Второе: увеличение аудитории обязательно приведёт за собой яжматерей, неадекватную школоту, защитников животных, защитников защитников животных и иже с ними, что, возможно, отобьёт желание некоторых адекватных людей вообще сюда заходить. Ок, допустим, из множества новых людей пару нормальных сможет выкристаллизоваться, тогда остаётся открытым вопрос, что лучше: 10к топовых программистов, собранных в одном месте, либо 10100 топовых программистов, разбавленных миллионом случайных людей. Может, другие сайты и созданы, чтобы их отсеять, а те, кому действительно надо, сами сюда придут.

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

    Про комьюнити, которое неизбежно наполнится некими слегка неадекватными людьми (я не могу подобрать иного слова, к сожалению, а это, имхо, звучит немного обидно, но во всяком случае наиболее соотвествует предмету разговора) — абсолютно согласен. Что касается "понижения порога"... Лично мне в самом начале "карьеры" очень хотелось соревноваться (такой у меня мотиватор был, что поделать) и КФ в этом плане идеально подходил во всём, кроме одного — задачи были достаточно сложными для меня (бесспорно, с Ашками проблем обычно не было, иногда даже решались Бшки, но чувство, что "игра не стоит свеч" оставалось). Среди других площадок CF выделяло то, что тут задачи на родном языке (да будет срач по поводу того, может ли ученик 9, 8, а уж тем более 7 или 6 класса понять, что от него хотят, читая английский текст) и наличие регулярных соревнований.

    Возможно, есть смысл рассмотреть некое ответвление CF (некий sandbox для "детей") в сторону "базовых" контестов для начинающих, с более удобным способом задания вопросов (текущая схема "блогов", "кармы" и "прямого эфира" хороша для комьюнити "продвинутых" программистов, но не слишком хороша для задания банальных вопросов в стиле "а как перевести строку в число в C++", но это, опять-таки, моё имхо).

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

      История из жизни. Приезжаю я, такой, прошедшим летом в свой родной город. Встречаюсь с одной бывшей олимпиадницей из своей школы (она как раз в том году выпустилась и поступила в универ). И она мне рассказывает про то, что когда у нее спрашивают: "Куда ты поступила?" — она отвечает: "Туда-то, на факультет компьютерных наук", — и именно так, а не "на программиста", потому что в этом городе слово "программист" ассоциируется с теми оболтусами, что учатся в местных шарагах на соответствующей специальности.

      Честно говоря, мне предложение г-на Рубинчика напоминает идею устроить соревнования по бегу для детей, которые только учатся ходить.

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

        "Туда-то, на факультет компьютерных наук" Вышка не палится

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

          Отличные рассуждения, но, увы, в данном случае они приводят к неправильному ответу.

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

    Я удивлён, что до сих пор защитники животных еще не здесь...

    Анатолий и тараканы

    Эпидемия в Монстрополисе

    Гнев

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

Я думаю, что создание дивизиона с задачами "напиши один if" не нужно. Приведу пример из другой области: игроков в Magic: the Gathering можно разделить на две группы: есть соревновательные маги, которые обсуждают и играют большие турниры (чемпионаты, гран при, прочее), а есть т.н. кухонные маги, которые играют у себя дома фановыми колодами. Почти все кухонные маги не становятся соревновательными, так что и тут будут новички копаться в своих див3 задачах, не желая развиваться дальше, будут между собой "соревноваться", типа кто быстрее десять ифов напишет.

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

    В той же MTG есть формат Casual для новичков, который специально собирает новичков и приучает их к соревновательному формату. И там этот формат отличается от настоящего не только тем, что в него играют новички: профи в нём просто неинтересно. Суть в том, чтобы их поначалу отделить друг от друга, а те, кого затянет соревновательный дух пойдут дальше. Тут то же самое: Div 3 можно отделить от остальных, а те, кого "затянет" пойдут соревноваться в Div 2 со всеми. Хуже CF от этого не станет, зато привлечёт новую аудиторию и, может быть, кто-то из тех, кто начинал с Div 3 станет новым Petr)

    UPD: Для того, чтобы профи было "неинтересно" можно запретить хаки и тогда никто из красных туда явно не полезет.

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

      А как же "занять первое место среди синих"?

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

Также я думаю, что новичков привлекать и обучать должен не кодефорсес, а университеты, которым это надо

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

Согласен с тем, что для новичков необходимо обеспечить более комфортное вхождение, ибо сейчас его нет или оно менее интересное или менее привлекательное. Дети, которых я обучал, много раз высказывали мнение, что CF — красивый и приятный для пользователей сайт, в то время как та же система cats (imcs.dvfu.ru/cats) страшная и неудобная (хотя для меня, как для тренера, вторая открывает больше возможностей и удобностей, которых на CF либо нет, либо у меня нет к ним доступа, либо я не в курсе где они находятся). CF сейчас обладает всем необходимым, чтобы привлечь людей внешним видом, дальше вопрос — сбегут ли эти люди спустя месяц пользования, сможет ли CF предложить что-то для их уровня. Есть много систем с простыми задачами уровня "учимся писать Hello World", но эти системы не такие привлекательные и они подойдут скорее для тех, кто обладает огромным желанием самостоятельно что-то изучать. CF может дать то, чего другие системы не дают — соревновательность. Из личного опыта: раньше я часто ленился делать что-то в одного, но мне всегда было интересно делать две вещи: решать задачи командно (даже вдвоём), решать соревнования, в которых в этот момент участвует еще пара тысяч человек. Именно соревновательность может замотивировать что-то делать тех, у кого есть задатки, но не особо есть желание самостоятельно длительное время в чем-то разбираться.

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

Идею сделать что-то вроде 3-го дивизиона я обдумываю уже довольно давно. В самом деле, есть тонкость, что если в Div2-Only раундах раздражают участники первого дивизиона, кто зарегистрировался для легкой победы, то для Div3-Only таких будет на порядок больше. Буду рад мыслям сообщества на этот счёт. Есть некоторые идеи как можно уменьшить мотивацию такого поведения, но пока руки не дошли их реализовать.

Я согласен с droptable, что даже задачи Div2-Only раундов сложны для начинающих. В качестве примера я всегда смотрю на студентов Саратовского ГУ — иногда даже приличные студенты на старте не могут решить две задачи, просто потому что у них и слабая техника программирования и задача уже эксплуатирует какую-то простую, но идею, которая пока им не по зубам.

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

    Участники первого дивизиона идут в Div2 в основном тогда, когда нет раунда для первого дивизиона. Аналогично: если одновременно будет проходить раунд Div2+Div3, то участникам Div2 не будет смысла идти решать Div3. Ну а так как Div2 раунды проводятся довольно часто, то нет смысла делать Div3 раунды отдельно от них или более часто.

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

    Сначала молодые программисты решают простые задачи на таких сайтах как informatics, acmp и др. Там действительно есть 50-100 очень простых задач (задачи в один if, задачи на циклы и т.д). Почему бы не оставить все как есть, а сделать нормальную подборку задач с их полным и понятным разбором вместо создания div3-раундов?

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

    Можно показывать не точное место, которое занимает участник, а только в которой сотне участник находится, внутри каждой сотни упорядочивать случайно (а рейтинг считать в зависимости от точного места). Это уберёт желающих покрасоваться. Всё равно для подавлающего большинства участников даже попадание в первую-вторую сотню -- большой успех, пара таких успехов -- и ты уже дивизионом выше; по крайней мере, такая ситуация сейчас в Div-2.

    По поводу любителей похачить, можно разрешить внеконкурсным участникам хачить виртуально: 1. Хакеру показывается результат хака и начисляются очки. 2. Но если хак успешный, то решение остаётся прошедшым претесты. 3. Похаченный видит всё так, как как будто даже не было попытки хака. 4. После конца контеста можно показать похаченому, кто, когда и как его хачил.

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

    Проблемы новичков div.2 :
    1. Если не придумалась B, то C даже читать смысла нет
    2. Взламывают решения беспощадно
    3. Или того хуже — все задачи не прошли финальный тест
    4. Рейтинг падает много контестов подряд
    5. В разборах большое число идей незнакомых

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

      О 4) я писал еще 6 лет назад

      хорошо видно, что первые 10 контестов CF занимается в основном демотивацией, рассматривая нового пользователя, как медианного

      И с это проблема, которая серьезно демотивирует моих школьников, стабильно падающих несколько месяцев подряд, побуждающая их заводить новые аккаунты (которые падают ровно так же) и бросать СП. 1000-1200 выглядит куда более гуманным нулевым рейтингом.

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

        Так не рейтинг на codeforces должен быть мотивацией для новичков. Это просто показатель прогресса, и то нельзя говорить, что он отражает полную картину. Если рейтинг падает, то надо учить новые алгоритмы и решать задачи из архива. А если вместо того, чтобы осознать свои ошибки, они заводят новый аккаунт (что запрещено правилами), то и div. 3 раунды не помогут им достигнуть результата.

        Еще есть идея, как делают многие онлайн-игры, в первом контесте обязательно повышать рейтинг, тогда да, многие новички останутся на codeforces, но только смысла от этого нет. Если они хотят научиться, то пусть ищут способы сделать это.

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

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

          На мой взгляд, div3 не нужен, поскольку напоминает (в плохом смысле) паралимпиады. Слабым участникам больше бы помогли две разные А задачи в div2 — шанс решить хотя бы одну или провести больше времени над посильными задачами ощутимо выше.

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

    Давайте разберёмся, зачем люди из Div1 идут в Div2.
    1.Потроллить новичков хаками
    2. Сдать все задачи быстрее всех
    3. Поднять рейтинг, пусть и на втором аккаунте, но всё же приятно видеть большое число после +
    Как с этим бороться? Надо сделать так, чтобы им было чем заняться в это время со своего аккаунта. Ввести какую-нибудь систему поощрений даже за внеконкурсное участие, чтобы у них не было желания создавать новый аккаунт.

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

      Кстати... Мы упустили один важный момент. Если появится div3 то, очевидно, новичкам (новым пользователям) нужно будет участвовать в нём, а это значит, что и div1 придётся участвовать там, уверен — они буду в восторге от такого. То есть если проходит div2+div3 раунд, то div1 либо внеконкурсно решать div2, либо конкурсно div3.

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

      я вот хожу писать div2, потому что там часто есть полезные / интересные / непростые задачи.

      то есть, да, div2 сложнее, чем нужно, было бы проще, интерес бы пропал.

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

Не надо мешать соревнования и тренировки. Раунды CF это все же соревнования, пусть даже тренировочные. Технику в любом спорте осваивают на тренировках, когда не давит секундомер. А здесь речь идет именно об освоении техники. (Задачи с одним for-ом и т.п.). Хотя, в целом, с утверждением о том, что порог входа хорошо было бы снизить, можно согласиться. Но не до нулевого уровня.

А вот соревнования во всяких Лого и Кумирах конечно имеют право на существование, но к реальному программированию все же не относятся. Опыт показывает, что если набирать группу детей на уровне 8 класса, то дети с опытом Кумира не выделяются на фоне всех остальных. А вот дети с опытом олимпиадной математики — очень выделяются.

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

    http://codeforces.com/blog/entry/57555?locale=ru#comment-412469 — я клоню примерно в ту же сторону во втором абзаце. Кстати сказать, задачи на один цикл for можно найти в книгах по языкам программирования для новичков. Может быть, есть смысл новичкам начинать именно с этих книг и задач оттуда, а не с попыток войти в спортивное программирование?

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

Возможно стоит начать с создания тренировок, которые в себя включают наборы обучающих задач?

Лично мне удобно проводить занятия с начинающими именно на Codeforces, но задачи уровня div2-A слишком сложны для начинающих.

Было бы круто, если внутри тренировок или отдельно был раздел для начинающих и можно было бы решать самые простейшие задачи на циклы, массивы и т.д. Конечно есть ресурсы, где такие задачи можно найти, но хотелось бы не выходить за пределы Codeforces при проведении занятий.

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

На CodeFights встречаются достаточно простые задачи.

Пример 1
Пример 2
Пример 3
  • »
    »
    6 лет назад, # ^ |
      Проголосовать: нравится -10 Проголосовать: не нравится

    Мне стало сложно на этапе чтения условия на английском. Так что есть смысл в русскоязычным аналоге с простыми задачами.

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