как стать «мастером спорта» по программированию — Разработка на vc.ru

В карьере разработчика нет высшей финальной точки – осваивать новое приходится постоянно. Зато можно быстро прокачать навыки и перепрыгнуть сразу несколько ступенек карьерной лестницы. Лучший способ это сделать – освоить спортивное программирование.

Школу олимпиадного кодинга прошли сотни тысяч айтишников, в том числе топ-менеджеры Google, Facebook и VK. Команда Moscow Workshops составила подробную инструкцию для начинающего «спортсмена».

8062 просмотров

Что такое спортивное программирование?

Спортивное программирование, как понятно из названия, – это разновидность интеллектуального спорта. Разработчики решают сложные алгоритмические задачи на скорость, используя популярные языки программирования – в основном C/C++, Kotlin, Java и Python.

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

От обычного промышленного программирования спортивное отличается более жесткими требованиями и регламентами. Инструменты и задачи на контестах порой оказываются сложнее, чем в офисе. Поэтому спортивные программисты часто становятся выдающимися разработчиками.

А зачем это нужно?

Во-первых, это сильно затягивает. На платформе Codeforces зарегистрировано больше 750 тыс. человек и из них 60 тыс. участвует в рейтинговых раундах. Большинство решает задачи в свободное от работы время, чтобы получить красный статус гроссмейстера.

Интервью со спортивными программистами и видео с лайфхаками собирают миллионы просмотров на YouTube. Например, ролик, в котором Геннадий Короткевич завершает финальный раунд чемпионата Google Code Jam, посмотрели почти полмиллиона раз. Геннадий Короткевич – легенда спортивного программирования, двукратный чемпион мира, который победил практически во всех существующих соревнованиях.

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

Из спортивного программирования выходят успешные предприниматели и топ-менеджеры. Например, бывший CTO Facebook и основатель Quora Адам Д’анджело или сооснователь стартапа AI Factory Александр Машрабов, который продал свою компанию гиганту Snap. Ну а о том, какую роль спортивные программисты сыграли в истории «ВКонтакте» и Telegram, можно не упоминать.

Кстати, именно в России базируются лучшие спортивные программисты. Россия стабильно занимает верхние строчки рейтингов Google Code Jam, Facebook Hacker Cup и TopCoder Open, а на студенческих турнирах МГУ, ИТМО, МФТИ и НИУ ВШЭ обходят MIT, Гарвард, Оксфорд, Кембридж и Университет Цинхуа.

С чего начать?

Проверьте «базовые настройки».

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

Главное для начинающего «спортсмена» – это знание хотя бы одного языка программирования. Лучше всего подойдут С, С++ и Java, но популярный сейчас Python тоже неплохой вариант для начала. Раньше в ходу был и Pascal, но на современных турнирах этот язык уже давно не практикуется.

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

Также обязательно пригодится базовая математическая подготовка, знание векторной геометрии и тригонометрии. Делимость, ее свойства, представление целых чисел, теория графов, алгоритм Евклида – это точно нужно знать. Без опыта алгоритмического программирования и базовых знаний информатики тоже не обойтись. Увы, но школьных знаний в этих сферах недостаточно – на уроках и задачи не те, и инструменты другие.

Если планируете выступать на чемпионатах в высших дивизионах, потребуется более серьезная прокачка. Теория графов, остовные деревья, алгоритм Флойда – Уоршелла, преобразование Фурье, выпуклые оболочки, базовая теория игр, основы динамического программирования – все это вы должны знать так, чтобы, проснувшись посреди ночи, применить знания на практике.

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

  • На Coursera есть большой выбор бесплатных базовых курсов по работе с алгоритмами.
  • На edex доступен курс How to Win Coding Competitions: Secrets of Champions – там разбирают лайфхаки чемпионов по спортпрограммированию.
  • А у MIT есть отличная программа Mathematics for Computer Science.
  • Есть курсы и на русском: например, бесплатный интенсив «Быстрый старт в спортивное программирование» от команды фестиваля RuCode.
  • Почитайте справочник «Олимпиадное программирование» Антти Лааксонена или гид «Спортивное программирование» Стивена и Феликса Халимов. Еще тренеры часто рекомендуют книги А. Х. Шеня «Программирование: теоремы и задачи» и Е. В. Андреевой “Программирование — это так просто, программирование — это так сложно”.

Начните решать задачи. Practice makes perfect – это правило работает и для спортивного программирования. Чтобы понять специфику заданий на соревнованиях, зарегистрируйтесь на популярных платформах, например, Timus Online Judge, SPOJ, Codechef, тех же TopCoder и Codeforces, Codingame и C Puzzles. На русском есть отличный ресурс informatics.mccme.ru.

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

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

Посмотрите мастер-классы на YouTube – там часто пошагово показывают решения сложных кейсов. Еще стоит заглянуть в тред вопросов на Quora: там программисты делятся своими тревогами, а новички советуются с мастерами. Например, можно узнать, был ли Цукерберг хорошим кодером и как олимпиадное программирование помогает в карьере.

А что потом?

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

Регистрируйтесь на сборы, буткэмпы и интенсивы – сейчас большинство проходит в онлайн-режиме. Начинать можно еще в старших классах – например, на кампуспе МФТИ проходит лагерь Moscow Workshops Juniors. Занятия в них ведут преподаватели российских и зарубежных вузов.

Приготовьтесь к жесткому графику – например, студенческие сборы Moscow Workshops длятся 8 дней, причем тренировки проходят ежедневно. Мастер-классы организуют в Европе, Азии, на Ближнем Востоке, в Южной Америке – география широкая. Это не только отличный способ быстро прокачать навыки, но и возможность познакомиться с новыми людьми – в том числе с будущими конкурентами из разных стран. Многие, кстати, заводят друзей на сборах, а потом вместе открывают бизнес.

На сборах программисты учатся работать в команде – а это ценный навык на чемпионатах. Дома в одиночку его не прокачаешь, поэтому все чемпионы так или иначе участвуют в командной подготовке. К тому же большинство контестов предполагают коллективное участие – обычно в состав команды входит три человека.

Начинайте участвовать в контестах. Большинство крупных чемпионатов проводят онлайн-раунды, в которые попасть может любой желающий. В редких случаях в чемпионате можно участвовать без предварительного отборочного турнира – например, международный фестиваль RuCode, который запустили МФТИ, Яндекс и МегаФон при поддержке Фонда президентских грантов, открыт для программистов всех возрастов разного уровня. Чемпионат пройдет в это воскресенье и поучаствовать в нем сможет любой, кто прошел регистрацию на сайте.

HashCode, Google Code Jam, TopCoder Open и VK Cup устанавливают минимальные требования для прохождения отборочных туров – можно попытать удачу и, если повезет, пройти в финал.

Студентам стоит попробовать свои силы на крупнейшем чемпионате ICPC, а школьникам – на Всероссийской олимпиаде школьников по информатике, а затем и международной IOI, Открытой олимпиаде школьников по программированию, ВКОШП и Технокубке.

Продумайте стратегию заранее и почитайте об особенностях начисления баллов. На школьных олимпиадах часто очки можно набрать даже за частичное решение – в этом случае важно набросать хотя бы какие-то варианты, чтобы получить частичный зачет. В приоритет ставьте самые простые задачи, потому что все задачи стоят одинаково. Но не забывайте переключаться – тренеры советуют не зацикливаться на одной задаче долгое время, потому что фокус «замыливается». Лучше вернуться к ней попозже, чтобы посмотреть свежим взглядом. На студенческих соревнованиях баллы начисляют только за полное решение: каждая задача либо решена полностью, либо не решена. Очки на Сodeforces вообще имеют принципиально другой смысл.

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

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

Чек-лист: олимпиадное программирование — с чего начать школьнику?

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


На старте

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

Если вам интересно программирование, и у вас уже начало формироваться абстрактное мышление, с поддержкой увлечённого педагога довольно быстро освоите базовые знания, достаточные для участия в олимпиадах. Однако подготовиться к соревнованиям можно и самостоятельно, главное — сопровождать каждую пройденную тему, даже самую простую, усиленной практикой.


С чего начать?

Сперва нужно освоить какой-нибудь язык программирования. Например, раньше учебным языком был Pascal. Сейчас принято начинать с Python, который популярен среди тех, кто хочет быстро научиться писать код. Этот язык очень дружелюбный к начинающим, у него есть подробная и понятная документация и большое количество библиотек. Но чтобы продолжать участвовать в более сложных олимпиадах, надо будет рано или поздно овладеть C++. 

Минимум тем, которые нужно изучить: переменные, операторы присваивания, логические и арифметические операции, условные операторы, потом — массивы и циклы, процедуры и функции. Для того, чтобы в них разобраться, можно, например, посмотреть курс Михаила Густокашина по C++ на Stepik. С этой базой можно решать первые олимпиадные задачи.


Как тренироваться?

Для программирования в первую очередь важна практика, хотя оно требует и теоретической подготовки. Это как водить машину: правила движения можно изучить и в классе автошколы, но научиться ездить можно только сидя за рулём автомобиля. 

Я думаю, есть два основных способа выучить программирование: 

  1. «Задачное» обучение — изучение конструкции языка через решение абстрактных задач. Например, когда надо прочитать все числа из файла и подсчитать сумму нечетных.
  2. Проектное обучение, при котором учащийся получает наглядный результат своей работы, небольшой работающий «продукт».

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

Например, есть сайт «Информатикс», созданный коллективом московских преподавателей олимпиадной информатики. На нём есть и теоретические материалы: например, вводные лекции по Python, к которым прикреплены примеры олимпиадных задач. Прошёл тему — и сразу выполняешь по ней задание.

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

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

Когда сталкиваетесь с незнакомым алгоритмом — знакомьтесь с ним, смотрите лекции на эту тему, изучайте статьи, форумы и книги. Например, «Алгоритмы: построение и анализ» Томаса Кормена и соавторов. Так выглядят дни тех, кто занимается олимпиадным программированием уже профессионально. 

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


Продолжение обучения

Когда человек освоил базу и знает конструкции языка, ему пора идти дальше: углубленно изучать теорию и разнообразные алгоритмы, которые позволяют по-новому работать с уже известными комбинаторными объектами. Знать алгоритмы и уметь применять сложные трюки — это хорошо, но задача никогда не состоит только из применения готовых знаний. Надо уметь сопоставлять разные параметры, вспоминать алгоритмы и модифицировать их для дальнейшего применения. 

В любой задаче есть своя уникальная идея — даже если ты видел до этого тысячу других идей и задач, то 1001-я всё равно будет новой.

До многих вещей можно дойти самостоятельно, но проще и быстрее будет, если знающие люди расскажут готовые способы решения. Самый действенный путь — общаться с единомышленниками и посещать места, где делятся знаниями и опытом: выездные школы и сборы. Например, есть смена «Алгоритмы и анализ данных» в «Сириусе», где много времени уделяется тому, чтобы помочь ребятам прокачать необходимые навыки для участия в олимпиадах по информатике. Поищите и регулярные занятия, которые можно посещать круглый год: например, кружки олимпиадного программирования, которые работают в вашем городе.

Самостоятельное обучение по книгам и материалам из интернета — это длинный и сложный путь, хотя поиск самой информации и не составит труда. В частности, на сайте MAXimal собраны 145 алгоритмов для решения разных задач, а также в открытом доступе опубликованы книги по алгоритмам, оптимизации, С++ и Java.


Тактическое преимущество

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

Я подразделяю задачи на четыре уровня сложности:

  • Первый уровень: даже не замечаешь, как решил задачу. Решение приходит в голову сразу же, как только прочитал условие. Это бесполезные с точки зрения опыта задачи, хотя их и можно встретить на олимпиаде. Если есть возможность их не решать — не решайте.
  • Второй уровень: задание вызывает небольшое напряжение. Сходу его не решить, хотя и примерно ясно, в каком направлении нужно двигаться. На такие задания уходит минут 5-15. Подумал, попробовал наиболее очевидный вариант решения или два — и решил. 
  • Третий уровень: трудные, но подъёмные задачи. Для выполнения придётся опробовать или с нуля придумать новую идею. Не просто собрать решение из готовых кирпичиков, а распутать головоломку. Пока выполняешь такие задачи, осознаёшь то, с чем раньше не сталкивался, возможно, пробуешь малознакомые алгоритмы. На обдумывание может уйти час, а на написание кода — ещё пару часов. Это тяжело и требует волевых усилий, но очень полезно.
  • Четвёртый уровень: не для тебя (пока). Например, ты семиклассник, а для решения задачи нужны знания университетских математических формул и громоздких алгоритмов. Прочитал разбор и всё равно вообще ничего не понял. Ты можешь попытаться разобраться и в итоге выполнить это задание, потратив колоссальное время, но получится неэффективно для общего результата. 

На смене в «Сириусе» ребята, например, решали такие задачи:

Задача 1. Еловая аллея 

Задача 2. Петя и снегоуборочная машина


Ошибки при подготовке к олимпиаде

Ударяться в крайности. «Я всегда дохожу до решения сам и никогда никуда не подсматриваю. Если мне нужно будет потратить три недели, чтобы решить задачу, то я потрачу три недели». До всего доходить самостоятельно — это круто, но неэффективно. К тому же, этот путь потребует слишком много силы воли, которая редко у кого встречается, а также может привести к выгоранию и утрате мотивации. 

Тут же сдаваться. «Если я не понял, как решать задачу за 15 минут, то я узнаю, как она решается, прочитав её разбор». При помощи ресурса Codeforces, про который я говорил выше, можно узнать, как автор видел решение этой задачи, и как эту задачу решили бы другие люди. Но ты не дал себе шанса подумать как следует, упустил возможность найти решение самостоятельно, а это плохо для опыта и развития интуиции. 

Решать только те задачи, которые нравятся. В олимпиадном программировании существуют разные типы задач: некоторые требуют в первую очередь развитого математического аппарата (например, знания теории чисел), в других идёт упор на написание кода, в-третьих — на математику (системы уравнений, теория чисел), а иногда — комбинаторику (графы). Углубляться всегда надо в те области, где возникло сопротивление. Для успеха на соревнованиях полезнее решить пять задач на нелюбимую тему, чем на ту, которая легко даётся. 

Не уделять достаточно внимания коду. В процессе написания программы наброски решения переводятся на формальный язык. Иногда ты за пять минут находишь решение и потом пару часов пишешь код, а бывает и наоборот. Писать код так, чтобы в нём было меньше ошибок, способность эти ошибки находить и исправлять — навык, который можно и нужно нарабатывать. Чем больше пишешь код, тем лучше  начинаешь это делать. Также полезно обсуждать с другими людьми, как писать программы с меньшим количеством ошибок и читать чужой код.


Что дают олимпиады?

  1. Льготы при поступлении. Есть линейка всероссийских предметных олимпиад, диплом которых — билет в вуз на бюджетное место. 
  2. Олимпиадный опыт помогает проходить собеседования в крупные компании, так как на них очень часто дают олимпиадные задачи.
  3. Призовое место — это весомое дополнение к любому портфолио и резюме. Перспектива повышать уровень олимпиадного программирования и дальше, поехать на международные соревнования. Например, на международный чемпионат по алгоритмическому программированию ICPC, который считается самым престижным соревнованием в мире.
  4. Возможность попасть в специальные летние или зимние школы, на сборы, в проекты вроде «Сириуса», и стать частью сплоченного сообщества.
  5. Даже если вы не будете занимать призовые места на олимпиадах, участие в них позволит набраться фундаментальных знаний и опыта разработки, разовьёт умение размышлять.

 Фото на обложке: Unsplash

Программирование как спорт. Краткое руководство по конкурентному программированию

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

Что такое спортивное программирование?

Соревновательное программирование — это вид интеллектуального спорта, в котором участники решают задачи кодирования, используя свои навыки программирования и знания дисциплин CS, таких как алгоритмы и структуры данных. Участникам таких соревнований, также называемым спортивными программистами, необходимо писать код с различными ограничениями и в соответствии с предоставленными спецификациями. Для победы спортивному программисту необходимо придумать код, который будет решением поставленной задачи. Победитель объявляется на основе ряда критериев, таких как затраченное время, качество конечного кода, время выполнения, размер программы и т. д. Многие крупные технологические компании, такие как Google, Facebook, Amazon, Microsoft и другие, поддерживают соревновательное программирование и участвуют в организации соревнований, а также нанимают талантливых спортивных программистов. Международное студенческое соревнование по программированию (ICPC), зародившееся в 1970-х, известен как старейшее соревнование по программированию. Хотя массовую популярность этот интеллектуальный спорт приобрел только с 2000-х годов с ростом интернет-компаний и технологического бизнеса.

Преимущества соревновательного программирования

Вот краткий список преимуществ, которые вы можете получить, участвуя в соревновательном программировании в качестве профессионального программиста.

  • Улучшенные навыки программирования, такие как логика и алгоритмы, базовая математика, структуры данных, вычислительное мышление, отладка и так далее.
  • Отличное дополнение к вашему профессиональному портфолио и резюме.
  • Шансы быть замеченными лидерами рынка и получить привлекательные предложения о работе.
  • Способ практиковать различные аспекты кодирования.
  • Социальные связи и общение в сообществе разработчиков.
  • Увлекательные и соревновательные конкурсы.

Платформы для соревновательного программирования

Это одни из самых популярных платформ для соревновательного программирования, доступных в Интернете.

  • CodeChef
CodeChef — это соревновательное сообщество программистов с сотнями задач и несколькими новыми конкурсами каждый месяц.

  • Codewars
Codewars — это онлайн-сообщество программистов с проблемами программирования. Позволяет отправлять свои собственные задачи, которые будут оцениваться другими пользователями.

  • Topcoder
Одна из самых популярных платформ конкурентного программирования. Каждый год здесь проводятся регулярные марафоны по соревновательному программированию и предлагаются десятки задач.

  • HackerEarth
HackerEarth предлагает более 10 000 задач по программированию различной сложности, доступных каждому.

  • Codeforces
Codeforces — российская платформа для соревновательного программирования, на которой есть сотни задач по программированию и часто проводятся всевозможные соревнования.

  • HackerRank
Предлагает задачи по программированию в различных областях компьютерных наук и проводит ежегодные Codesprints и другие соревновательные соревнования по программированию.

Соревнования по программированию

Ежегодно проводятся десятки соревнований по программированию. Вот некоторые из самых популярных и престижных.

  1. ICFP Programming Contest
Международные соревнования по программированию, которые проводятся ежегодно примерно в июне или июле с 1998 года. Марафоны Topcoder обычно длятся около двух недель, что дает участникам возможность улучшить свои решения. Каждое совпадение имеет свой механизм подсчета очков, который определяет качество каждого решения.

  1. CodeChef Long Challenge
CodeChef Long Challenge — это ежемесячный конкурс, который длится до 10 дней.

  1. Facebook Hacker Cup
Hacker Cup — ежегодное открытое соревнование Facebook по программированию. Открытый для участников со всего мира, он состоит из нескольких раундов со значительными призами.

  1. Google Code Jam
Google Code Jam — это международное соревнование по программированию, организованное и управляемое Google. Проводится ежегодно с 2003 г.

  1. Американская лига компьютерных наук (ACSL)
Американская лига компьютерных наук (ACSL) организует соревнования по информатике и программированию для учащихся средних и старших классов.

  1. Международная студенческая олимпиада по программированию (ICPC)
Международная студенческая олимпиада по программированию — это соревнование по алгоритмическому программированию для студентов колледжей. Одно из старейших соревнований по программированию.

Советы и рекомендации

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

  • Выберите язык программирования.
Это довольно очевидно, но все же стоит упомянуть. Вы должны начать с выбора языка программирования, который вам наиболее удобен, чтобы использовать его в соревновательном программировании. C++, Java, Python являются наиболее распространенными и общепризнанными на большинстве соревнований по программированию.

  • Развить хорошие знания структур данных и алгоритмов.
Знание хотя бы основ структур данных и алгоритмов очень важно для успешного решения задач конкурентного программирования. В наших статьях об алгоритмах и структурах данных есть ссылки на учебные материалы по этим темам.

  • Найдите свой стиль программирования и подход к задачам программирования.
Большинство задач, которые необходимо решить участникам конкурсов по программированию, имеют более одного решения. Цель состоит в том, чтобы найти оптимальное решение. Поэтому имеет смысл сосредоточиться на разработке своего уникального стиля кодирования и подхода к этим задачам программирования, которые позволят вам создавать лучшие решения с точки зрения времени и приправлять код, необходимый для выполнения.

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

  • Регулярно решайте задачи программирования.
Регулярная практика важна для достижения успеха практически во всем, но особенно в соревновательном программировании. Развитие правильного мышления и подхода к проблемам кодирования требует много регулярных тренировок. Вам не нужно ограничивать себя специализированными платформами, перечисленными выше, особенно в начале, когда задачи соревновательного программирования могут показаться слишком сложными. Вы можете использовать CodeGym с его более чем 1200 задачами по программированию Java для практики, а также игры по программированию или платформы для подготовки к техническим собеседованиям.

Андрей Горковенко

Frontend Engineer в NFON AG

В прошлом Андрей руководил веб-студией в Киеве и работал фронтенд-разработчиком в CodeGym. Теперь он кодирует немецкий продукт c … [Читать полную биографию]

Начало программы After School Sports 101

After School

4 декабря 2017 г.

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

ОН НЕ ЗНАЛ, КАК ИГРАТЬ

Когда я пошел в среднюю школу, я встретил Льюиса. Он был немного застенчивым ребенком, пока вы не узнали его поближе. Пришли пробы в команду по флаг-футболу, и я спросил Льюиса, собирается ли он. Он сказал мне, что никогда не играл в футбол, он даже не знал правил.

В том же году я встретил Брэнди. Однажды во время обеда наша маленькая компания пригласила ее пойти в зал игровых автоматов после школы (я встречаюсь с собой?). Она сказала нам, что у нее хоккейная тренировка. Мы все были так заинтригованы идеей играть в хоккей с шайбой и были впечатлены тем, что она играла. Судя по всему, она была единственной девушкой в ​​команде. Думаю, меня больше впечатлило то, что она знала, КАК играть в хоккей. Кроме просмотра олимпийского хоккея с шайбой и просмотра «Могучих уток» (больше раз, чем я готов признать), я ничего не знал об игре или о том, как в нее играют. Так что, даже если бы я хотел играть в хоккей (а у меня было мимолетное желание попробовать и, может быть, произвести впечатление на Брэнди своими несуществующими навыками), у меня не было бы возможности, так как я не знал даже основ хоккея. игра.

Оглядываясь назад, я бы хотел, чтобы наши уроки физкультуры познакомили нас с другими видами спорта, помимо кикбола, флаг-футбола и баскетбола. Я даже никогда не играл в футбол. Вот где общественные организации отдыха, такие как городские парки и отдел отдыха, YMCA, клуб мальчиков и девочек и т. д., могут помочь, предлагая послешкольную программу Sports 101.

ОПИСАНИЕ ПРОГРАММЫ

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

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

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

ОБРАЗЕЦ ПРОГРАММЫ

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

  1. Познакомьте их со видами спорта, которыми чаще всего занимаются американские дети. Начните с предоставления им некоторых рук на время. Если вы начинаете с бейсбола, позвольте им ударить по мишени или начните с пары для простой ловли и броска. Если вы начинаете играть в волейбол, покажите им, как перебрасывать мяч через сетку. В зависимости от ваших временных рамок вы можете охватить все виды спорта или только некоторые из них.
  2. Как только группа освоит снаряжение и основные движения, начните обучать их основным правилам. Не загружайте новичков пьесами или теориями о спорте.
  3. Когда дети получат базовые знания об игре, сыграйте быструю схватку. Поначалу держите его беззаботным и неконкурентным. Убедитесь, что все поощряют других.

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

ДОПОЛНИТЕЛЬНЫЕ ПРЕДЛОЖЕНИЯ

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

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