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

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

Всем привет!

В апреле в грантовой программе Botan Investments приняли участие преподаватели 21 вуза. Больше всего студентов удалось привлечь к тренировкам в Иркутском ГУ (23 человека). Больше всего тренировок (восемь) провели в Кубанском ГТУ, Саратовском ГУ и Мордовском ГУ.

В нашей группе ВК можно найти новый пост Михаила Рубинчика со списком того, что необходимо сделать, чтобы создать крутое олимпиадное сообщество в регионе/городе/образовательном учреждении. А сегодняшний пост посвящен массовости олимпиад и подготовке задач для новичков.

Сегодня я хочу немного поговорить про массовость олимпиад и более подробно про подготовку задач для новичков. Я во многих своих постах говорю, что рост числа участников олимпиад — это важно, и перечисляю, как нам этого добиться. Комментаторы часто с этим не согласны, но я продолжаю гнуть свою линию и настаиваю на том, что массовость все-таки полезна, в том числе для тех, кто выступает против :)

В первой части поста я кратко попробую доказать свое мнение. Во второй расскажу о том, что для массовости важно проводить олимпиады с очень простыми задачами, а также классифицирую такие задачи.


Почему нам нужно больше олимпиадников?

1. Чтобы сообщество развивалось, в нем должны появляться новые ресурсы

Ресурсы — это деньги и энергия людей (тренеров, организаторов, авторов задач). Эти ресурсы влияют друг на друга. Чем больше будет денег, тем больше людей останутся в олимпиадах, а не уйдут в науку или промышленное программирование. Чем больше активных людей в тусовке, тем больше олимпиад, тренировок, публичных мероприятий и внимания людей извне (в том числе журналистов), а в итоге и денег. Дальше я приведу примеры, как новые деньги влияют на развитие тусовки и количество людей в ней.

Сейчас два главных источника денег — IT-компании и университеты (+ немного Минобр). Но есть еще один источник — родители школьников или студенты. Например, Moscow Workshop (+ Juniors) проводят сборы и некоторые участники участвуют в них целиком за свой счет. Есть ЛКШ, в котором люди участвуют за свой счет. Если бы родители и школьники не тратили на это деньги, то этих проектов бы не было. А ЛКШ — это прокачка огромного количества школьников, заработок и тусовка для огромного количества студентов и выпускников.

Эти деньги остаются в сообществе в том или ином виде. Например, Moscow Workshop могут потратить заработанные на сборах деньги на то, чтобы организовать ЧМ по программированию, Всероссийскую олимпиаду или Moscode — то, что нам всем полезно.

При этом уровень участников постоянно растет. Например, в ЛКШ убрали самую слабую параллель Д, потому что могут занять всю смену более сильными школьниками. А это значит, что спрос повышается, ведь бывшие участники параллели D где-то должны учиться. И нам нужно поддерживать этот спрос.

2. Чем больше людей, которые попробовали решать контесты, тем известнее сообщество

Сейчас олимпиады по информатике не так известны, как более массовые спортивные события, например, футбол :) Организаторы делают трансляции соревнований, но их смотрят только олимпиадники и совсем немного программисты-неолимпиадники. Но если мы не можем повысить внимание неолимпиадников к тусовке, давайте увеличим число олимпиадников — тех, кто хоть раз участвовал в простенькой олимпиаде и кому интересно наблюдать за крутыми олимпиадниками. Так же, как дворовой футбольной команде интереснее смотреть на своих кумиров, чем тем людям, которые в футбол не играют совсем.

Да, это будут не те олимпиадники, которые могут решить и написать задачу на декартово дерево. Но у них будет достаточный уровень, чтобы понимать, что происходит во время трансляции и жать F5 :) Просмотры — это тоже ресурсы, которые в какой-то момент могут конвертироваться в деньги.

3. Вырастет престиж олимпиадников в IT-мире

Чем больше программистов в прошлом участвовали в олимпиадах, тем больше людей знает, что это такое, и тем выше будет рейтинг крутых олимпиадников среди программистов-неолимпиадников. Допустим, вы пишете в резюме, что среди достижений есть победа на одном из контестов. А тот, кто вас собеседует, решил на том же контесте 2 задачи из 10. Вы заработали очки уважения. Говорю это как человек, который провёл несколько десятков собеседований в Контуре совместно с другими разработчиками :)

4. Больше вариантов занятости для людей, которые хотят остаться в олимпиадах

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

Например, на наших сменах в Екатеринбурге за год побывали 60 разных преподавателей (практически все — студенты из Свердловской области, но есть немного из ближайших регионов). Вы же понимаете, что на Урале нет 60 топовых олимпиадников :). Некоторые из них — это люди, которые приходили на контесты пару раз. Но этого уровня достаточно, чтобы рассказать самым новичкам, что такое Python.

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

Я считаю, что этих пунктов достаточно, чтобы доказать важность массовости. А теперь перейдём к основной части поста.

Почему нам нужно больше простых задач?

В Свердловской области увеличить массовость помогают в том числе простые олимпиады — например, квалификационные туры для УрКОПа и вузака.

Обычные олимпиады сложные — нужно много думать и кодить. Допустим, на такую олимпиаду придет 5-классник. Он ничего не решит и уйдет навсегда или вернётся только через несколько лет. А если он решит на простой олимпиаде несколько задач, ему понравится, и в следующий раз он решит уже больше, а через какое-то время сдаст на муниципальном этапе всероссийской больше одной задачи. Так он войдёт в тусовку и, быть может, когда-то выйдет на приличный уровень.

Наша работа по подготовке простых олимпиад достигла такого масштаба, что нам нужно очень много задач, которые проще, чем самые халявные на обычных школьных соревнованиях. Я решил их классифицировать.

Базовые правила подготовки задач

1. Не нужно запутанных историй. Сказка нужна для того, чтобы упростить понимание мат.модели, а не усложнить. Поэтому в 99% задач нужно писать кратко. “Дано а и b. Выведите a + b”.
2. Каждое число/слово должны быть в отдельной строке, чтобы не было сложностей у тех, кто пишет на Python.
3. Хитрых случаев/подколок не нужно, оставьте их для более сложных задач и соревнований.
4. Входные данные должны быть такими короткими, чтобы самый тупой ввод и вывод на Java и Python укладывался в 0.1 секунды при ТL в 1 секунду.
5. Решения участников с более плохой асимптотикой также должны заходить. У вас есть решение за O(1)? Ок, пусть за O(n^2) тоже заходит.

Типы задач

В первых 10 пунктах задачи, в которых не надо думать:

1. А+В / print(input)
2. Простая формула (напоминаю, без думания!), причём на вход только int’ы
3. Простой if
4. Простой for без if'a и без массивов
5. If + for (по одному) и без массивов
6. Вложенные if'ы (2, максимум 3 штуки)
7. Вложенные for'ы ( + if) и без массивов
8. Одномерный массив
9. Простые строки
10. Двумерный массив

Когда я говорю “без думания”, то имею в виду, что такую задачу должен сдать даже ученик 5-го класса, который знает школьную математику на четверку и только-только начал учить синтаксис первого в своей жизни языка программирования. Человек выучил синтаксис for и if, почему бы нам не дать ему возможность решить 2-3 задачи вместо 0 на обычных олимпиадах?

Далее идут задачи, в которых уже нужно немного думать:

11. Формула на подумать без for’ов и if’ов
12. If + Формула на подумать
13. For + подумать (можно вложения for’ы и if ’ы)
14. Простая олимпиадная задача, без стандартных алгоритмов
15. Простая техника (строк на 100) без думания
16. Простой стандартный алгоритм (dfs, Дейкстра, gcd, бин.возведение в степень, бин.поиск)

Я ранжировал задачи от совсем элементарных до простейших олимпиадных. Как считаете, забыл ли я что-то в этой иерархии? Если да, то напишите в комментариях. Может, что-то еще можно добавить между уровнями.

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

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

Не знаю, сочтете ли вы это противоречием или подтверждением своего мнения, но условный чемпион мира по программированию, как и условный чемпион мира по условному биатлону это скорее отброс системы чем результат ее работы. Если это определение показалось слишком грубым, то можно смягчить его до такого: чемпион это инструмент поддержания системы в стабильном состоянии. Но неправильно считать целью системы выращивание чемпионов. Невозможно обосновать необходимость существования любой достаточно сложной системы, опираясь только на ее внутреннее содержание. (Вольная трактовка теорем о неполноте.) Целью системы олимпиадной подготовки (как минимум декларированной) должна быть массовость, или, другими словами, направленность вовне. Только так она избежит превращения в очередную масонскую ложу. Когда условный представитель IT бизнеса спросит: "А какой смысл в ваших чемпионах мира, если они не работают у меня в компании?" — ему надо ответить: "Посмотрите другую статистику, сколько людей, работающих у вас, начали свой путь к вам с олимпиад и кружков?". Не стоит смотреть на начинающих участников только как на источник денег или как на фундамент пирамиды. Я собственно попытался немного исправить ударение в исходном посте. А сложность задач — штука весьма сложная. Ее неправильно измерять в количествах if. Все знают, что со сложными задачами проблем нет, а вот простые — на вес золота. Отмечу, что не просо простые, а простые и полезные. Я бы скорее предложил сделать тренировочную базу простых задач с модерируемой статистикой решаемости. Модерируемая для того, чтобы учитывать только начинающих. Грубо говоря, для задачи типа a+b учитываем только тех, кто решил или не решил ее на первом занятии. Я лично на первом занятии или на олимпиаде для новичков начинаю с задач на форматированный вывод. Это пункт 1.5 в списке.