С какого возраста можно обучать ребенка программированию и какой язык лучше выбрать? Как попасть на самые крутые IT-направления в лучшие вузы? Становятся ли дети разработчиков разработчиками? Как попасть на стажировку в Яндекс или на работу в Google?

Обо всем этом нам рассказывает Михаил Рубинчик — лидер и главный тренер по спортивному программированию в Уральском федеральном университете и основатель онлайн-школы по спортивному программированию SPGuide.

Расскажи немного о себе. Как ты попал в спортивное программирование и почему остался в нем?

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

В 5 классе я поступил в лицей №1 города Кунгур. Там было принято участвовать в олимпиадах по математике, и я стал ими заниматься. Так я попал в олимпиадную среду и остался в ней, потому что любил решать задачи.

В 9 классе я случайно зашел на кружок по программированию. Тренер (который был всего на 4 года старше меня) рассказал мне и моему однокласснику про спортивное программирование, и мы стали пробовать решать задачи. Получается, как участник я занимался спортивным программированием 9 лет: 3 года школы и 6 лет университета.

Почему я остался? Наверное, потому что мне всегда нравилось преподавать. В 10 классе я начал вести кружок по математике для 5-6 классов, а в 11 классе вел кружок по программированию. Даже когда я поступил в УрФУ и переехал в Екатеринбург, я продолжал ездить в свой лицей по выходным (4 часа на поезде в одну сторону!) и обучать школьников. Когда я был на третьем курсе, мои ученики поступили в УрФУ и я начал тренировать уже студентов. Сейчас я отошел от преподавания и ушел в менеджерскую работу, которая мне не менее интересна.

Михаил Рубинчик - главный тренер по спортивному программированию в Уральском федеральном университете и основатель онлайн-школы по спортивному программированию SPGuide
Михаил Рубинчик - главный тренер по спортивному программированию в Уральском федеральном университете и основатель онлайн-школы по спортивному программированию SPGuide

Расскажи о своей работе сейчас. Что ты делаешь общественно-полезного и чем занимаешься для себя?

Сейчас я занимаюсь двумя крупными проектами: развиваю спортивное программирование в УрФУ и свою онлайн-школу по программированию Sport Programming Guide (или путеводитель по спортивному программированию). 

В УрФУ спортивное программирование по большей части бесплатно. Финансово нас поддерживает университет и спонсоры, первым из которых стал СКБ Контур. В компании поняли, что можно начать сотрудничать с университетом и создать на Урале институт спортивного программирования. Все начиналось с выплаты грантов (в частности, на мою зарплату тренера), а сейчас в Контуре есть целый отдел, занимающийся развитием спортивного программирования. Помимо Контура и УрФУ, нас поддерживают и другие местные компании: Naumen, Targem Games, Eastwind, ProSoft и т.д.

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

Второй проект  — онлайн-школа спортивного программирования. Он не такой масштабный, и мы занимаемся им вместе с женой: она решает организационные задачи, а я методические. Наша школа — это команда преподавателей, завучей и не только. В отличие от спортивного программирования в УрФУ с лагерями, тренировками и кучей поездок, в школе все проще. Ученик с преподавателем в формате индивидуальных занятий (занятие в школе длится 1 час) обсуждают и решают задачи, готовятся его к школьным и студенческим олимпиадам. Еще в нашей школе можно подготовиться к собеседованиям в IT-компании — мы учим решать задачи, подобные тем, которые дают на собеседованиях.

Чем твоя школа отличается от онлайн-школ программирования без приставки "спортивное"?

Первые ученики появились у нас в 2016 году. Если бы тогда меня спросили, чем моя школа отличается от других, я бы ответил, что олимпиадному программированию кроме нас не учит никто. Сейчас ситуация изменилась, на рынке обучения программированию выделилось несколько крупных сегментов. Первый — школы промышленной разработки (Яндекс.Практикум, GeekBrains, Skillbox), которые ориентированы на взрослых учеников. Там учат языкам, конкретным технологиям и фреймворкам. Второй сегмент — онлайн-школы программирования для детей, где ребят помладше обучают визуальному программированию (типа Scratch), а более старшим ученикам преподают Python. Навскидку это школы вроде Кодиум, Kodland, Алгоритмика. Обучение языкам в них часто идет на стыке с робототехникой. Попыток бесшовного перехода от игрового программирования и изучения языка к промышленной разработке на рынке очень мало.

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

Игровое начало обучения у нас есть, но только для тех, кто пока не может программировать без игр. Затем мы плавно переходим на настоящие языки программирования и начинаем готовить учеников к олимпиадам и соревнованиям, параллельно изучая необходимую математику. Для младших школьников и тех, кто только начинает программировать, мы даем Python. После Python мы постепенно переводим ребят на C++ (или даем сразу его, если видим, что ученику “заходит”). Он не самый простой для изучения, но это самый быстрый из высокоуровневых языков, и в какой-то момент он занял нишу олимпиадного программирования. Примерно 80% всех решений на олимпиадах пишется именно на C++.

И C++, и Python изучаются в нашей школе на уровне базового синтаксиса. Мы считаем, что для решения задач ученикам полезнее знать алгоритмы, чем разбираться во всех структурах языка.

Как выглядит решение олимпиадной задачи?

Вам нужно написать код, который считывает входные данные с консоли и выводит выходные данные в консоль. Технологически это делается легко, нужен всего лишь экзешник или скрипт, который сделает все за вас. Сложность в том, чтобы быстро обработать считанные данные. Вы можете прочитать задачу и придумать программу, которая будет работать 100 лет, а вам нужно написать код, который будет работать 1 секунду. Олимпиада — это про то, как увеличить скорость выполнения программы. И в нашей школе, помимо игрового программирования, Python и C++, учат ускорять алгоритмы. Мы специализируемся именно на этом.

Где применить навыки решения олимпиадных задач?

Олимпиадные задачи встречаются в трех местах:

  • Школьные олимпиады — Всероссийская олимпиада школьников (самая крутая в стране) и олимпиады из перечня РСОШ (Российского совета олимпиад школьников). Победители и призеры этих олимпиад могут поступить в вуз без экзаменов или получить 100 баллов за ЕГЭ по профилю олимпиады. 

  • Студенческие олимпиады, в основном турнир ICPC. Это командное соревнование, которое длится 5 часов. В течение олимпиады команда из 3 человек, сидящая за 1 компьютером, должна решить определенное количество задач. За каждую решенную задачу команда получает 1 балл. Чтобы участвовать в ICPC, нужно учиться в вузе и подходить по году рождения. 

  • Собеседования в крупные IT-компании. Чтобы попасть на стажировку в Яндекс, нужно решить реальный контест с олимпиадными задачами. На собеседовании в Google и Facebook тоже дают подобные олимпиадным задачи.

Так получилось, что студенческие олимпиады не очень привлекательны с практической точки зрения. Конечно, на соревнованиях вас могут заметить интересные IT-компании и позвать на работу, да и в целом участие в ICPC можно воспринимать как тренажер для подготовки к собеседованию в компании с мировым именем. Но если вы хотите пройти на чемпионат мира, вам нужно иметь уровень гораздо выше, чем нужно для собеседования. И такие серьезные цели уже не коррелируют с практической полезностью "здесь и сейчас".

Давай остановимся на практической пользе подробнее.

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

У школьников тоже много выгоды. Во-первых, это поступление в университет. Призерам заключительного этапа Всероссийской олимпиады школьников даже ЕГЭ сдавать не надо, они и так могут поступить без экзаменов почти в любой российский вуз. Что же касается призеров РСОШ, то их поступление зависит от уровня олимпиады и баллов на ЕГЭ. Если призер РСОШ сдаст ЕГЭ по профилю олимпиады на 75 и более баллов, он поступит в университет без экзаменов. Но это работает не для всех олимпиад и университетов. 

Поясню, как это происходит. Олимпиады РСОШ бывают 3 уровней: первого, второго и третьего. И каждый вуз сам решает, призеров каких олимпиад принимать без экзаменов. Один универ берет исключительно победителей олимпиад первого уровня, а призеров (не говоря уже о победителях и призерах второго и третьего уровней) уже не возьмет без экзаменов. Другой вуз возьмет победителей и призеров олимпиад первого уровня и только победителей второго. Есть вузы (и это 99% университетов страны), которые берут победителей и призеров всех трех уровней. 

Конечно, многие школьники стремятся в “престижные” университеты, и поступить на ряд их специальностей без олимпиад невозможно. Самые популярные среди олимпиадников университеты — это МГУ, СПбГУ, МФТИ, ИТМО и ВШЭ.

Ты замечал какую-то зависимость: дети программистов становятся программистами?

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

А кто приводит ребят к тебе в школу? Или они приходят сами?

Ко мне приходят даже взрослые разработчики, которые говорят: "Я крутой разработчик, у меня все хорошо. Но я хочу в Google/Facebook, а для этого требуется подучить алгоритмы". Такие люди учатся у нас, успешно проходят собеседования и остаются благодарны школе. 

К примеру, у нас учился Илья Щукин. Он жил в Тель-Авиве, работал в местной IT-компании и целый год пытался попасть в Google, но никак не получалось. После полугода обучения в SPGuide он прошел отбор. 

Но в основном мы, конечно, ориентируемся на школьников. Их можно условно разбить на две категории:

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

  • Ребята, которые никогда не участвовали в олимпиадах и хотят заниматься программированием или олимпиадной информатикой. Таких ребят обычно приводят родители.

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

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

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

Во-первых, имеет значение возраст, в котором ученик начал заниматься олимпиадным программированием. Например, человек без опыта математики и программирования приходит к нам летом после 9 класса и говорит, что хочет стать призером Всероссийской олимпиады. В этом случае я скажу, что нужно жестко пахать — около 40 часов в неделю. Даже так: я отвечу, что не уверен, что у него получится стать призером Всероссийской олимпиады, даже если он будет пахать по 40 часов в неделю. Потому что 2 года в таком случае — это очень мало, учитывая то, что первые этапы Всероссийской олимпиады начинаются осенью, и у этого школьника есть всего 1 год на подготовку и 1 шанс стать призером (уже в 11 классе). 

Есть более реалистичные цели, например, стать призером олимпиады 3 уровня. С нормальной школьной подготовкой по информатике и математике можно спокойно прийти к этой цели за 2 года, занимаясь 10 часов в неделю.

Во-вторых, эффективность занятий зависит от особенностей ученика. Кто-то более усидчивый, кому-то легче даются алгоритмы. Мы не раз наблюдали, как разные ученики достигают очень разных результатов за 1 час занятия.

Хайповый вопрос: зависит ли результат от пола?

Нет. В этом вопросе я феминист. Если от пола что-то и зависит, то только по социальным причинам. Когда родители (учителя, друзья) говорят девочке, что программирование — это для мальчиков, у нее пропадает мотивация, снижается уверенность в себе и результаты становятся хуже. Хотя для для некоторых девчонок это становится вызовом, они думают: "Я вам покажу, что тут не женское дело!" и добиваются успехов. 

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

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

Тоже очень острый вопрос!

Думаю, можно ответить не про программирование, а вообще про все. Ребенку должно быть интересно. Если ребенку интересны танцы, ему надо заниматься танцами. Если интересно программирование, нужно заниматься программированием. Вопрос в том, как понять, ЧТО нравится ребенку и не перепутать его желания со своими. Потому что если родитель хочет, чтобы ребенок стал программистом, а у ребенка нет к этому склонности и желания, шансы очень маленькие. Можно потратить кучу нервов и денег и сделать из ребенка программиста, но будет ли он счастлив?

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

Какой идеальный путь должен пройти юный программист, чтобы в будущем легко найти работу по душе?

Я думаю, оптимальный сценарий — поступить в как можно более сильный университет. Сейчас популярно мнение, что вуз — это просто корочки, на которые можно забить, но я знаю немало IT-направлений в российский вузах, где отлично учат разработчиков и дают практически полезные знания. Я сам приложил руку к ФИИТ УрФУ и знаю, что даже в регионах есть сильные вузы и направления.

Главная цель в школьном возрасте — попасть на одно из таких направлений. Чтобы попасть, нужно участвовать в олимпиадах. И преимущество тут у того, кто начинает заниматься раньше. Общая рекомендация: как можно раньше начинайте учить Python — это самый простой язык для обучения. Если не получается, начните с чего-нибудь визуального, а потом переходите на Python.

Продолжи фразу: "Спортивное программирование - это шанс ..."

Я думаю, что это не шанс, а возможность. Спортивное программирование — это социальный лифт в программирование вообще. Есть вопрос "Как стать программистом?" и есть 1000 разных ответов, каждый из которых имеет свои нюансы и особенности. Но если вы пришли в спортивное программирование, то вы вне сомнения сможете стать программистом.

Три основных навыка, которые вы тренируете у ребят в школе?

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

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

Расскажи пару впечатляющих историй про своих учеников из серии "было/стало"

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

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

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

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

Тоже классный вопрос. Тут все зависит от мотивации школьника. История примерно такая:

  • Если у родителей нет денег, а у ребенка мотивации — ничего не получится.

  • Если у родителей есть деньги, а у ребенка нет мотивации нет — сделать из него олимпиадника можно, но сложно (дорого и нервно для всех участников процесса).

  • Если у родителей нет денег, но у ребенка есть мотивация — это неплохой сценарий, и ничего страшного в нем нет!

До какого-то уровня мотивированный школьник может дорасти и сам, решая задачи без помощи наставников и преподавателей. Конечно, нужна дисциплина и усидчивость, но это вопрос привычки и желания заниматься олимпиадной информатикой. Есть много полезных онлайн-ресурсов. Например, сайт Timus с архивом задач по олимпиадному программированию. Очень советую. Сначала решаете как можно больше задач, и только потом участвуете в соревнованиях. Например, на CodeForces

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

Также в развитии очень помогают лагеря и сборы, которые часто проводятся бесплатно или за не очень большие деньги. Например, есть российский лагерь "Сириус", и в нем смены Сириус Регионы и Сириус Юниоры. Юниоры - это 5-8 классы. Отбор проходит через онлайн курс. Вы регистрируетесь на сайте Сириуса и проходите курс, где фактически проверяется ваша усердность. Старт где-то в конце зимы, начале весны.

В нашей группе ВКонтакте мы выкладываем статьи, в которых даем советы по обучению олимпиадной информатике. Заходите, читайте, узнавайте полезную информацию. 

В общем, если есть желание, возможности найдутся :)

В заключение

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

Также благодарим Михаила за помощь в организации RustCon Contest 2021 — онлайн-соревнования по решению задач на языке Rust. Кому интересен Rust — welcome в чат RustCon Russia.

Комментарии (30)


  1. anonymous
    00.00.0000 00:00


    1. rumi13
      13.10.2021 23:45

      Ну тут же вопрос интересности :) Для меня преподавание, методическая работа, выстраивание системы подготовки интересней, чем промышленная разработка. Хоть в банке, хоть в Google. И я рад, что такой вариант нашёлся. У меня был момент, когда я хотел разработчиком в Яндекс пойти, но потом внезапно подвернулся другой вариант.


  1. daniil-dev
    13.10.2021 22:04
    +1

    leetcode, hackerrank, codewars нервно курят в стороне и ухмыляются)

    А если серьезно, то зачем тратить время и деньги на обучение, которое по сути списано с данных ресурсов, которые предоставляют всё это бесплатно, быстро, так ещё и в игровой форме? Из-за ментора? Так для вопросов существует кучу сервисов, от обсуждений на вышеприведенных площадках до StackOverflow, где есть отдельная ветка для алгоритмов..

    Я видел мало примеров, когда человек прошёл тот же leetcode и не мог решить алгоритмические задачи.


  1. anonymous
    00.00.0000 00:00


    1. rumi13
      13.10.2021 23:53

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

      И чем выше роль человека (преподавателя/ментора/тьютора) в этом обучении, тем выше эти числа. Это работает хоть с изучением технологий, хоть с алгоритмами, хоть с английским языком. Хоть с детьми, хоть со взрослыми. Поэтому для супермотивированных хватит книжки. Для посто достаточно мотивированных хватить литкод или аналога. Для среднемотивированных подойдёт только обучение с человеком. В этом смысле любой ресурс с человеком всегда для менее мотивированных важнее.

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

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


    1. rumi13
      13.10.2021 23:59
      +1

      Кстати, типовой портрет взрослого ученика именно такой.

      Много сидел на leetcode/cf или прошёл Яндекс-практикум по алгоритмам. Алгоритмов знает много, но задачи решать не получается.

      И первое, что я говорю в таком случае:

      1. Перестаньте читать теорию, нужно задачи решать (с подсказками препода)

      2. Перестаньте решать соревнования, нужно поштучно решать (по возрастанию сложности)

      3. Перестаньте смотреть решения или даже подсказки литкод, нужно все задачи дожимать самому, или с минимальными подсказками препода (даже лёгкими намёками, а не подсказками), или пропускать.


    1. enabokov
      02.12.2021 05:02

      Leetcode не бесплатный - решения с объяснениями доступны по подписке. Курсы (карточки) посвещёные какой-то теме - тоже за подписку. Подписка стоит $130 в год.


  1. SerjV
    14.10.2021 00:17
    +3

    А кроме лифта в ВУЗ - польза в виде формирования у обучаемых какие-то полезных в дальнейшей жизни и работе компетенций, - есть?


    1. rumi13
      14.10.2021 11:13

      Кроме лифта в вуз есть ещё и лифт в некоторые топовые ИТ-компании.

      А что касательно пользы в виде компетенций: это ооочень горячая тема для обсуждений :)

      Мы видим FAANG в мире и Яндекс в России, которые активно используют алгоритмы для отбора кандидатов. Значит кто-то там считает это полезным для своих разработчиков :) При этом есть много компаний и частных людей, которые говорят, что олимпиады не просто полезны, они вредны! https://tproger.ru/experts/8/ - вот здесь 6 лет назад я отвечал на вопрос о том, как нужно готовиться к олимпиадам, но там есть отвечающие, которые говорят, что ими заниматься вредно. Причём даже в самом мире спортивного программирования позиции неоднозначны. На codeforces.com периодически появляются посты с обсуждениями от очень авторитетных людей в сообществе о том, что СП - очень полезно или о том, что СП бесполезно или вредно.

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

      1. Я занимался олимпиадами по информатике 3 года в школе и 6 лет в универе. Это очень захватает :) Решать задачи - это очень приятно, побеждать кого-то на соревнования тоже очень приятно. Это были действительно счастливые годы.

      2. Учиться в школе/универе мне было очень скучно. Поэтому я забивал/прокрастинировал/списывал. В общем качество знаний из классического учебного процесса у меня ниже, чем из СП. Для меня СП - это просто альтернативная система образования. Возможно, что выстраивание подобной модели (соревновательной) в общеобразовательном процессе мне бы помогла. Но не факт, что всем :) В итоге в школе и универе у меня была куча троек и даже двоек, но при этом я кандидат наук. Знания и умения для работы в научной сфере дало мне только СП.

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


      1. SerjV
        14.10.2021 17:30
        +1

        А что касательно пользы в виде компетенций: это ооочень горячая тема для обсуждений :)

        Мне было бы интересно услышать мнение автора статьи до кучи ;)

        Мы-то много чего напридумывать можем...

        Я бы сказать, что разница примерно как между "физкультурой и спортом" и "спортом высоких достижений":

        • Первое еще никому не мешало (кроме ограниченных случаем медицинских противопоказаний), и даже даёт какие-то компетенции, которые полезны не только в спорте.

        • Второе - может что и даёт, конечно, но какой ценой? И не даёт ли организму больше вреда, чем пользы?


        1. rumi13
          16.10.2021 10:31

          Мне было бы интересно услышать мнение автора статьи до кучи ;)

          Автор статьи не спортивный программист :) Если речь о том, у кого брали интервью, то это я.


          1. SerjV
            16.10.2021 14:38

            Если речь о том, у кого брали интервью, то это я.

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

            Что касается вас... То из вашего комментария "Очевидные прямые бонусы в том, чтобы получить крутые премии и стипендии в школе и универе, в том, чтобы попасть в топовый универ и топовую ит-компанию. А всё остальное уже гораздо более размыто" следует, что спортивное программирование в своей сути - это ни что иное, как надрачивание под текущую систему KPI, используемой для поступления в ВУЗы. Стоит поменять эти показатели - и спортивное программирование превратится в сильно нишевое увлечение для "узкого круга ограниченных лиц".


            1. wataru
              16.10.2021 18:33

              Ну если автор в роли "мопед не мой

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


              1. SerjV
                16.10.2021 23:47

                Ну, постить собственное интервью — выглядело бы слишком самовлюбленно.

                Зато можно было бы изложить те же мысли, но от себя без формата интервью.

                может не хватать мотивации или идей.

                Мотивацию нашли, а идей, похоже, не хватило на двоих с автором. И вот в каментах что-то проявляется...


            1. rumi13
              16.10.2021 21:18
              +1

              Нет, вы переврали мои слова.

              Я сказал, что есть очевидные плюсы, а есть то, о чём люди спорят.

              А вы говорите "раз спорят, значит это неправда и поэтому нишевое увлечение". Нет, раз спорят, значит неизвестны стопроцентные плюсы и минусы. При этом есть достаточно авторитетные люди или организации (вроде компаний FAANG), которые считают, что это полезно, раз используют.


              1. SerjV
                16.10.2021 23:42

                Окей, запишем еще "помощь в прохождении некоторых видов собеседований".

                Может даже на компетенцию потянет (компетенция - это знания+умения+навыки+готовность их применять).


        1. wataru
          16.10.2021 12:54

          Второе — может что и даёт, конечно, но какой ценой? И не даёт ли организму больше вреда, чем пользы?

          Считается, что нельзя угробить когнитивку изучая что-либо и решая задачи. По крайней мере я такой точки зрения нигде не встречал.


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


          Вред от спортивного программирования, однако есть:
          1) Стиль кодирования получается ужасный. Решения задач — 100% write only код, который еще и надо как можно быстрее написать. Поэтому там ужасные имена, всякие нечитаемые макросы для сокращения std::vector в vi и т.д. Однако, если в компании есть code-review (как в гугле например) или над код олимпиадника контролировать специально, то это полностью лечится за первые пару недель.

          2) Как и у любого другого хобби, требующего много времени: вместо того, чтобы гулять со сверстниками по выходным, вы будете проводить время решая задачи. Выше риск вырасти стереотипным нердом.


          3) Не связанно конкретно с программированием, но если очень увлечься, можно решать задачи по ночам вместо сна, питаться на 5-ти часовых контестах шоколадками и чипсами и тут попортить себе здоровье. Но этот риск присущь всем неподвижным хобби. То же самое можно заработать, играя в компьютерные игры, читая книги или крася модельки.


          1. SerjV
            16.10.2021 14:55

            Считается, что нельзя угробить когнитивку изучая что-либо и решая задачи. По крайней мере я такой точки зрения нигде не встречал.

            Ну, "физкультура для ума" полезна, тут сомнений нет.

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

            То есть за пределами учебли и контеста - жизни нет?.. Профдеформаций у спортпрограммистов не возникает, например?

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

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

            Пока что из полезного назвали навык "ставить под сомнение привычные вещи". Но навык - это лишь компонент компетенции...


            1. wataru
              16.10.2021 18:28

              То есть за пределами учебли и контеста — жизни нет

              Есть конечно, но, если заниматься серъезно на результат — то мало. Как у профессиональных спортсменов или шахматистов. Это куча лекций, 5-ти часовые тренировочные контесты каждые выходные, решение какого-нибудь codeforces в свободное время.


              Профдеформаций у спортпрограммистов не возникает, например?

              Я уже про это написал: Есть риск стать "нердом". Но это скорее относится к "спортивной" части, чем к "программированию".


              Пока что из полезного назвали навык

              • умение решать задачи. Тут сложно формализовать, что именно это такое. Это некая комбинация из умений анализировать ситуацию, выделять свойства, перебирать известные методы и синтезировать из них решение.
              • знание структур данных и алгоритмов и умение их применять. До такого уровня и понимания просто слушая лекции/вяло решая упражнения не прокачаться. Это разница между решением 100 и 10000 задач.

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


              Еще — это дает 100% прохождение любых интервью в фаанги и яндексы.


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


              1. SerjV
                17.10.2021 01:16

                Есть конечно, но, если заниматься серъезно на результат — то мало. Как у профессиональных спортсменов или шахматистов. ... Есть риск стать "нердом".

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

                Звучит уже не так безобидно...


                1. wataru
                  17.10.2021 12:18

                  психологическую деформацию в сторону соревнований,

                  Что это вообще такое? Нет.


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


                  что станет элементом затормаживания личностного развития школьника в части применения его способностей в профессии.

                  Профессия тут вообще не при чем.


                  1. SerjV
                    17.10.2021 21:21

                    Что это вообще такое? Нет.

                    Для начала - о чём мы вообще говорим? О хобби или о "спорте высоких достижений", который суть профессия?

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


            1. vkni
              01.12.2021 23:09

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

              Спортивное программирование вообще сильно ортогонально реальному.

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


          1. vkni
            01.12.2021 23:05

            Мозг вы не перегрузите.

            Выгорание никто не отменял.


  1. forthuser
    14.10.2021 09:03

    Встретилась интересная табличка сделанная по данным ресурса rosettacode.org
    Rosetta Code: Popular Programming Languages
    и появился вопрос: В какой степени и если используются языки программирования, например, из топ этой таблице и ниже в спортивном программировании и при каких условиях?
    т.к., предположу, что решения изначально одной и той же задачи, по разному решается в рамках выбранного языка и парадигм в его использовании.
    image


    1. rumi13
      14.10.2021 11:22

      Денис Кириенко на codeforces выкладывает статистику по языкам программирования на этапах ВсОШ.

      https://codeforces.com/blog/entry/1917 - пример такой статьи для заключительного этапа.

      Общий тренд такой: на самых крутых соревнованиях почти всё - это С++.

      На соревнованиях новичков всё больше питона, там он имеет близко к половине (остальная половина - это С++).

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

      На соревнованиях студентов или взрослых разработчиков есть ещё какое-то количество Java. Всё остальное уже крайне редко.


    1. rumi13
      14.10.2021 11:24

      Ну то есть ответ такой: если вы новичок, то скорее всего вы всё пишете на Python.

      Если вы уже с опытом, то скорее всего вы почти всё пишете на C++. Исключением могут быть очень короткие исходники (там Python) или задачи, где нужна длинная арифметика (там Python, либо Java).

      Поэтому история с выбором языка для конкретной задачи практически не существует.


  1. habrisdead
    14.10.2021 17:21

    Programmer/Coder -> Developer -> Senior Developer or Software Engineer -> Senior Software Engineer -> Team Lead/Architect -> PjM - обычно карьерная лестница выглядит так. Очевидно, чтобы дорасти до Senior Software Engineer (настоящего) требуется не меньше 10 лет...


    1. rumi13
      16.10.2021 10:40

      Из этого плана выглядит так, будто стартуют все уже со статуса "программист" :) Правда не знаю, как это соотносится с Junior в FAANG. Кажется, что он здесь где-то правее, а не в самом начале.

      Или подразумевается, что первый уже способен пройти собеседование на джуна в FAANG? (там правда хорошо надо решать алгоритмические задачи) Если должен быть уже способен, то я бы хотел продолжения этой цепочки влево :) Что там происходит до?

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

      [Олимпиадный математик, опционально] -> Олимпиадный информатик -> призёр школьной олимпиады -> студент-олимпиадный информатик -> Становится джуном в FAANG

      В списке выше исключительно люди, которые ни разу в жизни не писали промышленного кода. Всё, что они умеют, это делать консольные однофайловые приложения в пределах 400-500 строчек. Никогда в жизни ничего не админили, не поднимали серверов, возможно не пользовались репозиториями даже. Только математика, алгоритмы и консольные приложения.


      1. rumi13
        16.10.2021 11:17

        Немного не завершил мысль :) Ну а потом уже в рамках работы в компании начинает учить промышленную разработку. Но не до этого