Подборка контента по алгоритмам с 4 лет до бесконечности

Алгоритмы — они повсюду. Помните, грызли структуры данных в первую сессию? Или открывали лекции по ИТ и видели, что программирование начинается не с реальных жизненных задач, а с алгосов.

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

6be91bf368a1eab93ad23da12c458fe7.png

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

12d2f84392e8ef818fb74432b8250130.png

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

Путёвка в жизнь через алгоритмы

Ко мне как к преподавателю постоянно приходят родители с запросом «ребёнку нужно в МФТИ, МГТУ или ИТМО». Способов усилить школьный курс немного:

1. Проектная работа. Не знаю, ценятся ли олимпиадные проекты всеми вузами, но мой знакомый получил проходку в МИФИ с проектной работой.

2. Подработка/фриланс: помощник программиста или разработчик ботов для Телеграм. Можно делать сайты под заказ руками или в конструкторе (правда это дело подминает под себя ChatGPT). Потом может быть стыдно за портфолио, но опыт получишь.

3. Алгосы — самый натоптанный и довольно очевидный из всех путей: понятно, что делать шаг за шагом. Спойлер: делать шаги совсем не просто. Давайте попробуем нарисовать этот самый путь развития. 

Как погружать в ИТ дошкольника

Частый вопрос — когда начать воспитывать инженера. ИТ-курсами для 9-леток уже никого не удивишь, и не удивлюсь, если скоро выпустят учебник Java для детских садов. В этой шутке есть доля истины: навыки айтишника можно закладывать до школы.

6 лет назад я искал место преподавателя программирования. Компании звонили наперебой, профессия в Подмосковье была штучной. Я устроился на курсы робототехники — пособирать Lego за деньги с кайфом. 

Конечно, сперва мне дали самую взрослую группу, но постепенно я дошёл до малышей от 4 лет — тарабанил с ними по столу большими детальками Lego Duplo. На занятиях мы прокачивали словарный запас — запоминали всякие канаты и лебёдки. Без практики я всё забыл и сейчас помню только червячную шестерёнку. 

Назвав детали, мы начинали их соединять. Я показывал инструкцию и помогал детям перейти от 2D к 3D — от картинки к объёмной модели. За 40 минут всей группой мы собирали механизм и смотрели, как в нём что работает. 

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

Вкалывают роботы, а не человек

Так, до школы доросли, сейчас решаем алгоритмы? Нет, всё ещё играем в конструктор. Ребята хорошо справляются с основами программирования лет с 13. В 7–11 лет отдавать на программирование рано, и мы начинаем с роботехники. 

Сперва это Lego WeDo — простые конструкторы до 150 деталей с этапом сборки из одной картинки. Я самостоятельно ищу в интернете механизмы, которые собираю с детьми на уроках: пример сайта со схемами и видеоинструкциями. Затем составляем алгоритм для робота из блоков. Получается что-то такое:

456ad6025a8535920f1550a5852557a9.png

После пары лет с WeDo можно изучать Lego Mindstorms с поэтапной сборкой. Тут уже есть среда разработки, похожая на Scratch, и блочное программирование. После них хорошо заходят алгоритмические секции. Ребёнок не только программирует, у него перед глазами механизм, который выполняет его команды в реальном мире. 

b062b4c464f5d75cf4b8be0274e25e13.png1b9c8bda5e12c5fe102245d962d2f7a1.png

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

Что дают соревнования по алгоритмам

Лет с 13 я преподаю детям основы программирования. Заходит не всем: половина детей отваливается в первый месяц. Я преподаю на бесплатном курсе по госпрограмме, и там многие даже не начинают ходить. Мы проходим Python (сейчас в ЕГЭ именно он, я сдавал в 2017-ом ещё Pascal) и алгосы. В отличие от робототехники, домашка есть, и она обязательна.

Цель максимум — поступить в вуз без ЕГЭ, по результатам олимпиад.

Топ-20 всероса — билет в рай. Всероссийских олимпиад по информатике масса, за год во всех даже не успеешь поучаствовать. Вот перечень олимпиад первого уровня за 2023/24 учебный год, только по информатике было 19 соревнований.

Участвовать надо не в одном всеросе, а во всех возможных. Можно дополнительно брать соревнования на платформе Codeforces, но они не котируются в вузах. Циферки в лидерборде Codeforces — это способ почесать эго и попонтоваться перед одноклассниками объективный показатель знаний. По моим прикидкам, 1600–1800 баллов — навык, соответствующий заключительным этапам всероссийских олимпиад. 

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

f22b863a7572acaff2f6d59767add5b8.jpg

Лучше начинать пораньше и привыкнуть к атмосфере олимпиады. Прийти и с первого раза стать призёром нереально. Но победители — это не каста богов, а те, кто потратил много сил.

Как нарешивать алгоритмы к экзамену

Для подготовки к ЕГЭ я беру банк задач и «дрессирую» ребят, чтобы они поняли суть, а не заучивали решение. Если просто зубрить, можно получить достойные баллы (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-разработчиками.

5933faa9ceef07ffa3702862e90de44c.png

Также время от времени я добираю знания на курсах, мне нравится Stepik, там я проходил курс по Python. Ещё рекомендую курс МФТИ по спортивному программированию.

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

Ну и зачем мне, взрослому, алгоритмы?

Давайте подумаем, что дают алгоритмы бывалым айтишникам. С ними вы можете:

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

  2. Знать, что ты молодец. В Альфе мы считаем количество операций, изучаем Big 0 и скобочные последовательности на техтолках. За полчаса получаем дофамин за сделанную задачку, и даже Джиру двигать не надо. Привыкаешь быстро придумывать корнер-кейсы, если ещё не.

  3. Тренировать мозг. Если качать алгоритмическое мышление, меньше риска закостенеть на рутинных задачах.

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

ea45e87d8099db80dbd28633f83404fe.png

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

Спидран по статье

Моя выжимка из курсов и задач по алгоритмам:

Выводы

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

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

Рассказывайте, пригодились ли вам в жизни алгоритмы и какие ещё ресурсы по алгоритмам вы знаете.

© Habrahabr.ru