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

Что это за курс?

Это курс по алгоритмическому программированию (алгоритмы, структуры данных и т.д.)

Он в первую очередь рассчитан на школьников и в качестве подготовки к школьным олимпиадами (и многие материалы в курсе написаны именно как для школьников), но также в курсе могут заочно заниматься (и реально занимаются) вообще все желающие: студенты, выпускники вузов и т.д. Занятия для нижегородских школьников бесплатные, для всех остальных — платные.

Эта страничка — она как раз для студентов, выпускников и т.д., а не для школьников. Для школьников есть отдельная страничка.

Чему тут учат?

Основное направление — это алгоритмическое программирование. Начиная с основ программирования, и далее в алгоритмы и структуры данных. Это то, что по-английски называется Computer Science.

Чему тут НЕ учат?

Мы не занимаемся "техническими" вопросами:

  • Созданием пользовательских интерфейсов, кнопочек, окошек и т.д.
  • Программированием под конкретные платформы: созданием web-приложений, программированием под Android, iOS и т.п.
  • Использованием различных фреймворков, библиотек и т.д.

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

Вы действительно будете учить?

И да, и нет. Формат заочного курса подразумевает, что существенную часть материала вы будете изучать сами. Я буду скорее направлять вас, советуя, где можно посмотреть тот или иной вопрос, на каких задачах отладить навыки, а также буду довольно активно комментировать ваши программы. Кроме того, вы всегда можете со мной связаться (контакты в разделе "О курсе") и задать любой вопрос.

Какой язык программирования?

Вообще говоря, какой хотите, из тех, что позволяют писать консольные приложения и поддерживаются этим сайтом. Это C++, Java, Python, C#, PHP, Ruby, Perl, Pascal, Basic, даже 1С.

При этом, если вы еще не знаете никакого языка программирования, то я рекомендую Python. На страничке курса есть материалы для начинающих по питону. Если вы знаете какой-то из перечисленных в предыдущем абзаце языков, то можете использовать его; но вообще все продвинутые темы (начиная с уровня 2) не зависят от языка.

Лично я лучше всего знаю C++, питон и паскаль; по этим языкам я смогу вам достаточно подробно помогать. По другим языкам я не смогу вам подсказывать по различным тонкостям языка, хотя, как показывает опыт, для алгоритмов это не очень существенно.

А какие изначальные знания требуются?

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

Что надо сделать, чтобы начать заниматься?

  • Зарегистрируйтесь на сайте (для этого вас попросят еще зарегистрироваться на сайте informatics.msk.ru). При регистрации укажите свое настоящее имя и правильный населенный пункт, чтобы я вас мог отличить среди других пользователей сайта.
  • Напишите мне любым из указанных в разделе "О курсе" способов. В письме укажите, как вас зовут, где вы учитесь/работаете. Кроме того, напишите вкратце, какой ваш опыт в программировании, или вы будете заниматься "с нуля".
  • Прочитайте, или хотя бы просмотрите, все тексты в разделе "О курсе".
  • Дождитесь ответа и дальнейших инструкций от меня.

Когда можно начать заниматься? Когда "следующий набор"?

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

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

Занятия только заочные?

Да, очных занятий для не-школьников нет. А если бы и были, то стоили бы намного дороже.

А кто вообще вы такой?

Я — Петр Андреевич Калинин, к.ф.-м.н., старший разработчик компании Яндекс, выпускник ВШОПФ ННГУ. Я в свое время активно участвовал в различных олимпиадах: бронзовый призер международной олимпиады школьников по информатике (IOI) 2001 года, золотой призер IOI 2002 года; в составе команды ННГУ дважды участник финала чемпионата мира по командному программированию ACM (ACM ICPC). С 2017 по 2019 год я преподавал в Школе анализа данных Яндекса. Я ученик В.Д. Лелюха.

В том или ином виде я учу школьников программированию с тех пор, как сам окончил школу в 2002 году (я ездил преподавателем в различные летние школы и т.п.); этот курс существует с 2013 года. Среди моих учеников — ряд участников и один победитель заключительного этапа Всероссийской олимпиады школьников по информатике (не считая моего брата Николая, в обучении которого я тоже принимал не последнее участие и который является абсолютным победителем заключительного этапа 2013 года и дважды — в 2013 и 2014 годах — золотым призером международной олимпиады школьников по информатике).

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

Вы всегда можете связаться со мной, контактные данные указаны в разделе "О курсе".

А что за сайт informatics.msk.ru?

Informatics.msk.ru — это сайт дистанционной подготовки по информатике, организованный Московским центром непрерывного математического образования (МЦНМО) и Московским институтом открытого образования (МИОО); он очень удобен для организации курсов подобных этому, и, как вы можете видеть на главной странице сайта, реально широко используется, но в первую очередь для организации очных занятий. Я не имею непосредственного отношения к этому сайту (хотя и знаком с людьми, которые его создали и поддерживают).

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