Как стать автором
Обновить

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

Время на прочтение12 мин
Количество просмотров12K
Всего голосов 10: ↑6 и ↓4+2
Комментарии30

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

НЛО прилетело и опубликовало эту надпись здесь

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

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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


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

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

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

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

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

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

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

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

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

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


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

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


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

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

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


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


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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий