Подборка контента по алгоритмам с 4 лет до бесконечности
Алгоритмы — они повсюду. Помните, грызли структуры данных в первую сессию? Или открывали лекции по ИТ и видели, что программирование начинается не с реальных жизненных задач, а с алгосов.
Компании перестали давать алгоритмические задачи на собеседованиях ещё в 2000-ых. Конечно, есть исключения, но я считаю, что трёхэтапный отбор разработчиков не станет серебряной пулей.
Тем не менее, алгоритмы — штука крайне полезная. Это быстрый легальный источник дофамина, сравнимый с прохождением хардкорной игры типа Dark Souls. Все бытовые процессы тоже можно разложить на алгоритмическую последовательность: припарковать машину или приготовить ужин — это набор действий.
Я 6 лет преподаю основы ИТ детям, студентам и очень взрослым коллегам. В статье поделюсь, на какие сайты захожу, чтобы взбодрить себя задачей, и как вижу идеальный план развития алгоритмического мышления (ну вдруг вы растите дома айтишника или преподаёте сами).
Путёвка в жизнь через алгоритмы
Ко мне как к преподавателю постоянно приходят родители с запросом «ребёнку нужно в МФТИ, МГТУ или ИТМО». Способов усилить школьный курс немного:
1. Проектная работа. Не знаю, ценятся ли олимпиадные проекты всеми вузами, но мой знакомый получил проходку в МИФИ с проектной работой.
2. Подработка/фриланс: помощник программиста или разработчик ботов для Телеграм. Можно делать сайты под заказ руками или в конструкторе (правда это дело подминает под себя ChatGPT). Потом может быть стыдно за портфолио, но опыт получишь.
3. Алгосы — самый натоптанный и довольно очевидный из всех путей: понятно, что делать шаг за шагом. Спойлер: делать шаги совсем не просто. Давайте попробуем нарисовать этот самый путь развития.
Как погружать в ИТ дошкольника
Частый вопрос — когда начать воспитывать инженера. ИТ-курсами для 9-леток уже никого не удивишь, и не удивлюсь, если скоро выпустят учебник Java для детских садов. В этой шутке есть доля истины: навыки айтишника можно закладывать до школы.
6 лет назад я искал место преподавателя программирования. Компании звонили наперебой, профессия в Подмосковье была штучной. Я устроился на курсы робототехники — пособирать Lego за деньги с кайфом.
Конечно, сперва мне дали самую взрослую группу, но постепенно я дошёл до малышей от 4 лет — тарабанил с ними по столу большими детальками Lego Duplo. На занятиях мы прокачивали словарный запас — запоминали всякие канаты и лебёдки. Без практики я всё забыл и сейчас помню только червячную шестерёнку.
Назвав детали, мы начинали их соединять. Я показывал инструкцию и помогал детям перейти от 2D к 3D — от картинки к объёмной модели. За 40 минут всей группой мы собирали механизм и смотрели, как в нём что работает.
Малышей лучше всего обучать на конструкторах. Lego Duplo — самый популярный. В этом возрасте развиваем пространственное мышление и моторику, чтобы в школе перейти к алгоритмическому мышлению.
Вкалывают роботы, а не человек
Так, до школы доросли, сейчас решаем алгоритмы? Нет, всё ещё играем в конструктор. Ребята хорошо справляются с основами программирования лет с 13. В 7–11 лет отдавать на программирование рано, и мы начинаем с роботехники.
Сперва это Lego WeDo — простые конструкторы до 150 деталей с этапом сборки из одной картинки. Я самостоятельно ищу в интернете механизмы, которые собираю с детьми на уроках: пример сайта со схемами и видеоинструкциями. Затем составляем алгоритм для робота из блоков. Получается что-то такое:
После пары лет с WeDo можно изучать Lego Mindstorms с поэтапной сборкой. Тут уже есть среда разработки, похожая на Scratch, и блочное программирование. После них хорошо заходят алгоритмические секции. Ребёнок не только программирует, у него перед глазами механизм, который выполняет его команды в реальном мире.
Важно, чтобы дети закрепляли навыки. Если просто повторять сборку за учителем, группа уйдёт без знаний. Практика крайне важна, а домашек на робототехнике у ребёнка не будет: 50к на набор Lego у большинства родителей нет.
Что дают соревнования по алгоритмам
Лет с 13 я преподаю детям основы программирования. Заходит не всем: половина детей отваливается в первый месяц. Я преподаю на бесплатном курсе по госпрограмме, и там многие даже не начинают ходить. Мы проходим Python (сейчас в ЕГЭ именно он, я сдавал в 2017-ом ещё Pascal) и алгосы. В отличие от робототехники, домашка есть, и она обязательна.
Цель максимум — поступить в вуз без ЕГЭ, по результатам олимпиад.
Топ-20 всероса — билет в рай. Всероссийских олимпиад по информатике масса, за год во всех даже не успеешь поучаствовать. Вот перечень олимпиад первого уровня за 2023/24 учебный год, только по информатике было 19 соревнований.
Участвовать надо не в одном всеросе, а во всех возможных. Можно дополнительно брать соревнования на платформе Codeforces, но они не котируются в вузах. Циферки в лидерборде Codeforces — это способ почесать эго и попонтоваться перед одноклассниками объективный показатель знаний. По моим прикидкам, 1600–1800 баллов — навык, соответствующий заключительным этапам всероссийских олимпиад.
Большинство вузов принимают результаты олимпиад четыре года, не считая год проведения олимпиады. Можно в 7–8 классе победить во всеросе и обеспечить себе билет в любой вуз, какой захочешь, и больше ничего не изучать.
Лучше начинать пораньше и привыкнуть к атмосфере олимпиады. Прийти и с первого раза стать призёром нереально. Но победители — это не каста богов, а те, кто потратил много сил.
Как нарешивать алгоритмы к экзамену
Для подготовки к ЕГЭ я беру банк задач и «дрессирую» ребят, чтобы они поняли суть, а не заучивали решение. Если просто зубрить, можно получить достойные баллы (80–85 из 100). Отличные баллы не набрать, нужно понимать, как изменить решение под новые условия.
Нормальный банк задач — решу ЕГЭ. Им надо уметь пользоваться, чтобы исключать неактуальные задания, навык приходит с опытом. Можно смотреть демо-варианты и прошлогодние ЕГЭ. Банк задач посложнее есть на сайте К.Ю. Полякова. Здесь можно найти примеры хардовее, чем были на ЕГЭ в прошлом году.
Хотя бы раз в четверть мы 4 часа пробуем решать ЕГЭ. Так формируется привычка высиживать экзамен и перепроверять себя, чем дольше, тем лучше. Я вместе с учениками садился за примеры и честно показывал, как нахожу у себя ошибки, которые допустил неспециально.
Поступили в вуз: что дальше
В вузе алгоритмы становятся менее актуальны, ведь ЕГЭ и ОГЭ уже сданы.
Лучше всего прокачивать знания в команде по спортивному программированию, в вузовской движухе это популярная штука.
Есть крутые соревнования студентов в России и международные ICPC. Команды из ИТМО, Высшей школы экономики и МФТИ часто побеждают, а победителей активно зовут в Google.
Алгосы всё ещё нужны для собеседований в крупных компаниях на стажёрские и позиции, а где-то даже на мидлов и сеньоров. Алгоритмические задачи — простой способ выбрать самых способных из массы претендентов без опыта коммерческой разработки. Кто решил лучше, тот больше увлечён и погружен в программирование.
Как подтягивать алгоритмы взрослым
Проверить себя можно хоть на этом задании — попробуйте понять, что это за алгоритм и определить его сложность:
func algorithm(_ sortedArray: [Int], target: Int) -> Int? {
var left: Int = -1
var right: Int = sortedArray.count
while right - left > 1 {
let mid: Int = (left + right) / 2
if sortedArray[mid] > target { right = mid }
else if sortedArray[mid] < target { left = mid }
else { return mid }
}
return nil
}
Подумали? Смотрите правильный ответ
Это бинарный поиск. Сложность O (n) = log_n
Для подтягивания алгоритмов мне подошли тренировки от Яндекса. Сейчас идёт 6 сезон, первые пять были классной подборкой задач с решениями в свободном доступе. Там замечательный лектор, который курирует олимпиадное направление в Вышке. Я сам по нему изучал программирование и C++. Это уже не детский материал, я хочу разбирать эти задачи на алгоритмической секции с опытными iOS-разработчиками.
Также время от времени я добираю знания на курсах, мне нравится Stepik, там я проходил курс по Python. Ещё рекомендую курс МФТИ по спортивному программированию.
Самоподготовка требует дисциплины: надо себя заставлять, никто не будет пинать как в школе. Просто садишься и ботаешь очередной контест.
Ну и зачем мне, взрослому, алгоритмы?
Давайте подумаем, что дают алгоритмы бывалым айтишникам. С ними вы можете:
Собеседоваться и собеседовать. Если вы только вкатываетесь в ИТ, алгоритмы пригодятся для прохождения на стажировку или даже на работу. Если вы собеседуете сами, у вас точно будут перед глазами ответы, да и задачи со множественными решениями редко кто даёт. Но можно флексить на собесах и лучше понимать кандидатов.
Знать, что ты молодец. В Альфе мы считаем количество операций, изучаем Big 0 и скобочные последовательности на техтолках. За полчаса получаем дофамин за сделанную задачку, и даже Джиру двигать не надо. Привыкаешь быстро придумывать корнер-кейсы, если ещё не.
Тренировать мозг. Если качать алгоритмическое мышление, меньше риска закостенеть на рутинных задачах.
Заниматься с детьми. Помнишь, как собирал первый конструктор с отцом? Если нет, можешь собрать и запрограммировать робота со своими детьми, племянниками, в гостях у друзей.
Стать преподавателем или наставником. Отличный пример — Филипп Рухович, он несколько раз выходил в финал ICPC и сейчас тренирует студентов. Его звали за рубеж, но он остался и обучает алгоритмам в физтехе. Я сам уже два года работаю в iOS, но всё ещё преподаю алгоритмы для души.
Спидран по статье
Моя выжимка из курсов и задач по алгоритмам:
Выводы
Алгоритмы — структурированный путь, на котором нужна капелька таланта, заряженность и много усилий. На этом пути вы точно сможете найти ментора и бесплатный контент, но надо приготовиться к сложностям: голова ломается сильно.
Я рассказал, как выглядит «идеальный» подрастающий айтишник, изучающий алгоритмы с садика. Как и с любой другой темой, важно не переборщить, чтобы не выгореть к моменту выхода на первую работу.
Рассказывайте, пригодились ли вам в жизни алгоритмы и какие ещё ресурсы по алгоритмам вы знаете.