Мы продолжаем рассказывать о курсе «How to Win Coding Competitions: Secrets of Champions», который Университет ИТМО запустил на платформе edX в этом году (первую часть материала читайте здесь).
Во второй части нашей беседы с авторами и инструкторами курса — Максимом Буздаловым и Павлом Кротковым, чемпионами ACM ICPC, и Дарьей Яковлевой, призером Google Code Jam for Women, речь пойдет о том, важен ли победителям олимпиад правильный настрой, как развить навык поиска креативных решений и кому будет полезен курс от чемпионов Университета ИТМО.
Michael Pollak / Flickr / CC
Максим Буздалов считает, что успех команды (или участника, если речь идет об одиночном соревновании) зависит от тренировок и слаженности работы, которые нарабатываются долгими часами практических занятий — чем больше участники тренируются, тем меньше их результат зависит от правильного настроя или его отсутствия.
А вот совместимость участников друг с другом, и их личные качества, по мнению Максима, играют очень большую роль. При этом некоторые из таких качеств — как положительных, так и отрицательных — могут проявиться только на финальном соревновании, от осознания ответственности: раньше команда отвечала только за себя, а в финале она представляет уже весь университет или даже страну. Пример из личного опыта Максима (чемпиона ACM ICPC 2009 года):
Команда Университета ИТМО-2016 на ACM ICPC: Адам Бардашевич, Антон Ковшаров, Андрей Станкевич (тренер) и Владимир Смыкалов
Павел Кротков уточняет — для команды профессионалов «заряженность на победу», возможно, и отходит на второй план, но вот начинающим участникам олимпиад без нее не обойтись:
Дарья Яковлева подчеркивает: если этап соревнования сразу не задался, у участников действительно могут «опуститься руки» — но бороться с проблемой эффективнее всего помогают дополнительные тренировки, а не какие-либо психологические приемы. Однако хорошее настроение и самочувствие перед началом соревнований отходят на второй план, если команда или кто-то из ее участников не испытывает особого интереса к процессу.
Мы предложили авторам курса «Как побеждать в соревнованиях по программированию: секреты чемпионов» поделиться советами и приемами, полезными в олимпиадном программировании — получилось несколько больших тем:
Практика
Максим Буздалов и Павел Кротков отмечают — постоянные тренировки помогают не просто добиваться успеха в решении задач, но и дают возможность предчувствовать правильный ход мысли. Однако одного онлайн-курса для развития такой способности будет явно мало (для его прохождения слушателям потребуется 4-6 часов в неделю) — придется ежедневно решать задачи (кстати, авторы курса в рамках занятий дают советы о том, как продолжать регулярные тренировки самостоятельно).
Парное программирование
Еще один совет от Павла — практиковаться в парном программировании. Такой подход позволяет экономить время команды и добиваться синергетического эффекта (задачу сокомандники решают уже не каждый по отдельности, а сообща):
Тактические решения во время олимпиады
Максим Буздалов дает совет, вполне применимый и для работы команды «промышленных» программистов в условиях жесткого дедлайна (например, когда нужно решить сразу несколько заранее известных, но не тривиальных задач в очень сжатые сроки):
Изучение смежных областей
Еще один совет от Максима касается развития творческого мышления: помимо постоянной практики (которая закладывает определенные «паттерны» решения задач) иногда полезно заставлять себя думать нестандартно. Лучше всего на достижение этой цели «работает» изучение смежных дисциплин – от очевидных до сравнительно экзотических.
Robert Gourley / Flickr / CC
Ежедневная практика, решение задач, изучение смежных областей знаний, учеба в вузе — кажется, что такие требования полностью исключают из жизни участников олимпиад какой-либо отдых. Максим, Павел и Дарья развеяли наши сомнения — хотя оказалось, что и во время отдыха чемпионов по программированию тянет кодить:
Авторы курса отмечают: далеко не все из записавшихся собираются в ближайшем будущем участвовать в чемпионатах по программированию. Многие из тех, кто прошел курс, просто хотели узнать что-то новое в знакомой области или даже развить профессиональные навыки и сделать более привлекательным свое портфолио.
Павел Кротков (который параллельно с преподаванием курса работает в Facebook) объясняет, почему ИТ-гигантам интересны программисты-олимпиадники:
Добавим, что второй поток курса «Как побеждать в соревнованиях по программированию: секреты чемпионов» стартует 6 марта 2017 года, но записаться на него можно уже сейчас. Занятия продлятся 5 недель: для обучения понадобится знание английского и одного из популярных языков программирования (C++, Java или Python). Пройти обучение можно бесплатно (сертификат о прохождении обучения — если он вам понадобится — обойдется в $49). Ждем вас в числе слушателей курса и будущих победителей олимпиад!
Во второй части нашей беседы с авторами и инструкторами курса — Максимом Буздаловым и Павлом Кротковым, чемпионами ACM ICPC, и Дарьей Яковлевой, призером Google Code Jam for Women, речь пойдет о том, важен ли победителям олимпиад правильный настрой, как развить навык поиска креативных решений и кому будет полезен курс от чемпионов Университета ИТМО.
Michael Pollak / Flickr / CC
Настрой vs опыт: какую роль в победе играет психология
Максим Буздалов считает, что успех команды (или участника, если речь идет об одиночном соревновании) зависит от тренировок и слаженности работы, которые нарабатываются долгими часами практических занятий — чем больше участники тренируются, тем меньше их результат зависит от правильного настроя или его отсутствия.
Я бы не сказал, что «настрой» играет значительную роль в успехе. Чем выше уровень команды, тем выше интеллект ее участников, и тем реже работают методы самообмана, направленные на повышение уверенности в своих силах и на «поднятие духа»
— Максим Буздалов
А вот совместимость участников друг с другом, и их личные качества, по мнению Максима, играют очень большую роль. При этом некоторые из таких качеств — как положительных, так и отрицательных — могут проявиться только на финальном соревновании, от осознания ответственности: раньше команда отвечала только за себя, а в финале она представляет уже весь университет или даже страну. Пример из личного опыта Максима (чемпиона ACM ICPC 2009 года):
Разумеется, наличие встроенного в головы «боевого духа» может очень сильно помочь: так, наши соперники в 2009 году, команда университета Циньхуа, за последний час решили четыре, что ли, задачи, и вырвались на второе место, обеспечив себе золотую медаль и титул чемпиона Азии. Хороший пример…
… если бы не тот факт, что первое место заняли мы, которые, спустя несколько минут после начала последнего часа, сдали свою последнюю девятую задачу, и за оставшийся час не успели написать ничего толкового. Правда, мы, конечно же, не «опустили руки», просто ситуация сложилась таким образом, что все предыдущие четыре часа у нас были задачи в очереди на написание, а тут они внезапно кончились. Мы писали решение десятой задачи, но времени на нее нам не хватило
— Максим Буздалов
Команда Университета ИТМО-2016 на ACM ICPC: Адам Бардашевич, Антон Ковшаров, Андрей Станкевич (тренер) и Владимир Смыкалов
Павел Кротков уточняет — для команды профессионалов «заряженность на победу», возможно, и отходит на второй план, но вот начинающим участникам олимпиад без нее не обойтись:
Мой опыт говорит, что основное [для новичка] — это все-таки психология и стрессоустойчивость. Андрей Станкевич в шутку говорил, что для развития своей карьеры как тренера ему нужно получить образование психолога/психиатра
— Павел Кротков
Дарья Яковлева подчеркивает: если этап соревнования сразу не задался, у участников действительно могут «опуститься руки» — но бороться с проблемой эффективнее всего помогают дополнительные тренировки, а не какие-либо психологические приемы. Однако хорошее настроение и самочувствие перед началом соревнований отходят на второй план, если команда или кто-то из ее участников не испытывает особого интереса к процессу.
Люди, не испытывающие удовольствия от решения задач, конечно, не получат никаких призовых мест, просто не имеют шансов
— Максим Буздалов
Лайфхаки и советы
Мы предложили авторам курса «Как побеждать в соревнованиях по программированию: секреты чемпионов» поделиться советами и приемами, полезными в олимпиадном программировании — получилось несколько больших тем:
Практика
Практика, практика и ещё раз практика. Главный лайфхак — решать по одной задаче каждый день, даже в выходные, и не пропускать ни одного дня
— Дарья Яковлева
Максим Буздалов и Павел Кротков отмечают — постоянные тренировки помогают не просто добиваться успеха в решении задач, но и дают возможность предчувствовать правильный ход мысли. Однако одного онлайн-курса для развития такой способности будет явно мало (для его прохождения слушателям потребуется 4-6 часов в неделю) — придется ежедневно решать задачи (кстати, авторы курса в рамках занятий дают советы о том, как продолжать регулярные тренировки самостоятельно).
Чутье (или тонкая настройка в мозге эвристик, с помощью которых расставляются приоритеты в поиске направлений мысли) может быть развито только при решении очень большого числа задач. Нагрузка, предлагаемая курсом на эту тему — одна-три олимпиадных задачи в неделю в течение четырех недель — очевидно, недостаточна. Для развития чутья нужно длительно и регулярно решать олимпиадные задачи различной степени сложности (от субъективно легких до субъективно непосильных)
— Максим Буздалов
Когда ты видел тысячу задач на разные алгоритмы и идеи, понять, в каком направлении идти в поисках решения тысяча первой существенно проще. В этом смысле курс может заложить некую основу и показать хотя бы самые базовые темы и виды задач.
[Спортивное программирование] — это все-таки математика, и редко задачу можно решить методом, кардинально отличающимся от задуманного автором. Хотя и такое тоже бывает, и чтобы это увидеть, опять же, нужно иметь опыт решения разнообразных задач
— Павел Кротков
Парное программирование
Еще один совет от Павла — практиковаться в парном программировании. Такой подход позволяет экономить время команды и добиваться синергетического эффекта (задачу сокомандники решают уже не каждый по отдельности, а сообща):
Понятно, что в такой ситуации количество «мозгов», работающих над решением, удваивается, и решение должно появляться быстрее/более качественным
— Павел Кротков
Тактические решения во время олимпиады
Максим Буздалов дает совет, вполне применимый и для работы команды «промышленных» программистов в условиях жесткого дедлайна (например, когда нужно решить сразу несколько заранее известных, но не тривиальных задач в очень сжатые сроки):
Предположим, идет пятичасовое командное соревнование. В этом случае, все участники команды должны прочитать все нерешенные задачи к концу первого часа. Именно так. Таким образом, вы 1) найдете все простые задачи, и 2) сможете обсуждать на равных сложные задачи.
Расширением этой техники является бумажка, размеченная в виде таблички, на которой строчками выступают задачи, а столбцами — участники. В ячейках участник отмечает, что он прочитал условие задачи, а также вносит краткие комментарии (например, «задача на динамическое программирование по подмножествам»). Решенная задача вычеркивается. Таким образом, текущее состояние команды становится обозримым для самой команды
— Максим Буздалов
Изучение смежных областей
Еще один совет от Максима касается развития творческого мышления: помимо постоянной практики (которая закладывает определенные «паттерны» решения задач) иногда полезно заставлять себя думать нестандартно. Лучше всего на достижение этой цели «работает» изучение смежных дисциплин – от очевидных до сравнительно экзотических.
Есть такая «полуолимпиадная» дисциплина, называется «теория решения изобретательских задач». Я не могу сказать, что я являюсь в ней профессионалом — скорее, я работаю в этой сфере интуитивно — но в ней предлагаются некоторые высокоуровневые идеи, которые могут помочь в оптимизации и де-стандартизации процесса мышления.
Мне в свое время очень сильно помогли олимпиады по математике. В них, во-первых, большое разнообразие способов думать над задачей, а во-вторых, они приучают думать не одним способом из перечня, а, скорее, «выпуклой комбинацией» этих способов. Таким образом, каждая новая идея, придуманная или где-то увиденная, увеличивает вашу способность решать задачи не на одну идею, а на бесчисленное множество идей, появляющихся в результате гибридизации новых знаний и того, что вам уже известно.
Много читайте, причем не только в выбранной вами предметной области (предположим, computer science), но и в разных других областях (например, биология). Эти знания помогут вам находить решения задач в одних областях, пользуясь идеями и знаниями из других областей — и тем самым потрясать мир радикальными новыми взглядами
— Максим Буздалов
Robert Gourley / Flickr / CC
Как отдыхают победители олимпиад
Ежедневная практика, решение задач, изучение смежных областей знаний, учеба в вузе — кажется, что такие требования полностью исключают из жизни участников олимпиад какой-либо отдых. Максим, Павел и Дарья развеяли наши сомнения — хотя оказалось, что и во время отдыха чемпионов по программированию тянет кодить:
Если пытаться выделить что-то общее, я бы сказал, что настольные игры очень популярны. Но по большому счету каждый отдыхает по-своему
— Павел Кротков
Ребята любят играть в настольные игры, в которых нужно придумывать интересные стратегии, тактики для того, чтобы победить. Также программисты [-олимпиадники] любят активный отдых: футбол, волейбол, фрисби. Есть ребята, которые любят танцевать хастл. Участники очень разносторонние личности, и у каждого свои интересы
— Дарья Яковлева
Участники олимпиад — обычные люди, так что хобби и увлечения могут быть такими же, как и у других людей. Правда, программирование сейчас настолько большое, как область деятельности, и позволяет столько свободы, что программист может иметь в качестве хобби… программирование, просто отличающееся от того, которое является его работой.
Так, когда я участвовал в олимпиадах, из программистских хобби у меня были генетические алгоритмы (позднее выросшие в магистральное направление моей научной деятельности) и обработка звука. А «обычным» моим хобби уже больше десяти лет является игра на гитаре, сочинение музыки и свободная импровизация
— Максим Буздалов
Не только олимпиады: кому еще (кроме будущих чемпионов) полезен этот курс
Авторы курса отмечают: далеко не все из записавшихся собираются в ближайшем будущем участвовать в чемпионатах по программированию. Многие из тех, кто прошел курс, просто хотели узнать что-то новое в знакомой области или даже развить профессиональные навыки и сделать более привлекательным свое портфолио.
Да, курс полезен ИТ-специалистам. Он рассказывает о том, какие бывают соревнования по программированию, как в них участвовать, как решать олимпиадные задачи, какие методы использовать и как дальше развивать навыки решения задач. И все эти идеи можно применить и реализовать в ИТ-сфере
— Дарья Яковлева
Общение на форуме с некоторыми слушателями курса, показало, что некоторые ИТ-специалисты с помощью нашего курса вновь обрели веру в то, что программирование может быть интересным.
Как показывает опыт общения с различными программами и сайтами, многим ИТ-специалистам было бы неплохо пройти хотя бы базовый курс в области вычислительной сложности, чтобы хоть как-то понимать, на каких масштабах размеров данных их программы начнут тормозить, и что с этим делать. Этот курс (несмотря на название, разумеется) вполне может сыграть такую роль
— Максим Буздалов
Павел Кротков (который параллельно с преподаванием курса работает в Facebook) объясняет, почему ИТ-гигантам интересны программисты-олимпиадники:
С одной стороны, такие [олимпиадные] задачи, конечно, имеют мало общего с повседневной работой «промышленного» программиста. С другой, ведущие IT-компании (Google, Facebook – из мировых), Яндекс – из российских, как раз любят нанимать на работу людей с олимпиадами бекграундом. Более того, даже собеседования в эти компании имеют много общего с соревнованиями.
Я бы сказал, что прохождение такого собеседования (опыт успешного участия в соревнованиях) даёт возможность понять, что кандидат умеет «соображать» в условиях стресса и ограниченного времени.
В общем и целом, сам по себе курс скорее не поможет в повседневной работе, но может помочь начать лучше ориентироваться в области алгоритмов/математики тем, у кого в этой области есть пробелы. А само участие в соревнованиях, в целом, может помочь «не заржаветь» мозгам в случае, если работа иногда становится несколько скучной
— Павел Кротков
Добавим, что второй поток курса «Как побеждать в соревнованиях по программированию: секреты чемпионов» стартует 6 марта 2017 года, но записаться на него можно уже сейчас. Занятия продлятся 5 недель: для обучения понадобится знание английского и одного из популярных языков программирования (C++, Java или Python). Пройти обучение можно бесплатно (сертификат о прохождении обучения — если он вам понадобится — обойдется в $49). Ждем вас в числе слушателей курса и будущих победителей олимпиад!
Поделиться с друзьями
Laney1
я конечно извиняюсь, но судя по силлабусу этот курс, несмотря на громкое название, — абсолютно заурядная банальщина с парой базовых алгоритмов сортировки и обходов графа, о которых без всякого ИТМО можно прочитать в паре статей в википедии.
itmo
Тогда ждем в списках победителей олимпиад ;)
gorodnev
Фокус курса — командная работа и хаки от непосредственных участников, какие-то иные важные моменты, о которых никто не пишет. Тоже посмотрел силлабалс — на курс по алгоритмам как таковой тянет с большой натяжкой :) особенно для таких АСМ монстров.
Laney1
ну и кому это нужно? Даже если взять только олимпиадное программирование, там из всех топовых контестов командным является один ACM ICPC. И даже если взять один ACM ICPC — какой смысл студентам тренироваться со случайными людьми из интернета?