Это опыт прохождения курса в 2023 году. Программа и условия могли с тех пор измениться.
Чуть больше года назад я понял, что хочу систематизировать знания по алгоритмам. Я в целом знал базу, но были пробелы и не было уверенности в знаниях, хотя алгоритмические собесы я проходил без проблем.
Вариант с самостоятельным изучениям по книгам и leetcode я отмёл, потому что был очень загружен и мне бы не хватило терпения этим заниматься. Плюс хотелось иметь какую-то поддержку и обратную связь по своим задачам.
В итоге я решил пройти курс по алгоритмам от Яндекс Практикума. Из всех альтернатив выбрал Практикум по следующим причинам:
- Наличие обратной связи - поддержка менторов в чате, проверка ДЗ по каждому модулю.
- Покрывал все базовые темы, ничего лишнего.
- Продолжительность - 4 месяца (а не 8-10, как в других местах).
Что оказалось сложным
Гладко было на бумаге, да забыли про овраги 🙂 Курс я в итоге успешно прошёл, но есть ряд нюансов, которые выяснились только в процессе.
- Бешеная нагрузка. Темп обучения очень высокий. На каждую тему отводится спринт - 2 недели. И если для сортировок и связных списков этого даже много, то на деревьях и графах я успевал с огромным трудом.
- Менторы в теме разбираются, но далеко не всегда могут внятно подсказать направление мысли в решении задачи. Они не дают прямых ответов (что хорошо), но частенько их намёки меня только запутывали.
- Были проблемы с прохождением бенчмарков по скорости/памяти на NodeJS. Это известная проблема, но несколько задач я просто не смог в итоге сдать.
В целом программа обучения мне понравилась. Самый важный пункт, на который нужно обратить внимание - очень высокая нагрузка и темп обучения. Я справился только потому, что пошёл с опережением на первых темах и потом смог использовать это время для решения задач последующих модулей.
Также я под конец решал не все задачи модуля, а только необходимый минимум (50%, в среднем 5-6 задач). У меня параллельно наложилась ещё и смена работы с сильным выгоранием, поэтому было вдвойне тяжко.
По проверке домашек могу только сказать, что с ревьюером мне повезло и я получал подробную, понятную обратную связь с конкретными рекомендациями и замечаниями. Ни с какими проблемами не сталкивался. Хотя от коллег по курсу с других языков слышал и обратный фидбек. По видимости, здесь как повезёт.
Курс выстроен по принципу “минимум теории, максимум практики”. С одной стороны это хорошо - не приходится штудировать талмуды. С другой стороны, периодически этой самой теории не хватало и приходилось что-то догугливать. Не считаю это существенным минусом, навыки гугления в процессе ещё никому в жизни вреда не приносили.
Что в итоге
- Я рад, что прошёл курс. Я прям ощутимо прокачал навыки алгоритмов и достаточно хорошо разобрался во всех темах. Да, спустя год что-то уже вылетело из памяти, но восстановить эти знания - не проблема.
- Полученные знания я в процессе финализации обучения протестировал на собесах. Несколько раз попадал в ситуацию, когда интервьюер со смешками срочно доставал задачу откуда-то из “заначки”, потому что я их щёлкал как семечки. Ни один собес не вызвал сколько-нибудь ощутимых затруднений.
- Из приятного - материалы остаются со мной навсегда. Когда я учил Go, то немного практиковался на задачках из курса.
Мои рекомендации
- Вполне можно обойтись и без курса - достаточно пары хороших книг (Гроккаем алгоритмы, книги Тима Рафгардена) + leetcode. При затыках можно взять ментора 🙂 Но если у и без того высокая нагрузка в жизни (как было у меня) - курс помогает держать темп и сохранять мотивацию. Поэтому выбирайте под себя. Я бы рекомендовал начать с книг и leetcode, затем пойти на курс (если сами не справляетесь).
- Если пошли на курс - закладывайте в неделю часов 15-20 на теорию и задачи. Работы не просто много, а очень много. Применяйте весь свой тайм-менеджмент, фиксируйте в календаре слоты и так далее.
- Не стесняйтесь просить о помощи. Я как-то задачу решал около 8 часов 🙂 И это с помощью менторов, сам бы раза в два дольше просидел.
- Идите с опережением. Если тема лёгкая - проскочите её быстро, решите задачки и двигайтесь к более сложному. Оставьте себе запас по времени на сложные темы.
- Не забывайте отдыхать. Работа над алгоритмами изрядно выжирает умственную энергию. Лучше делайте по чуть-чуть, но каждый день.
- Опционально - не решайте все задачи сразу. Можно решить необходимый минимум и потом вернуться, чтобы дорешать оставшееся. Так будет даже эффективнее, потому что вам придётся заново вспомнить все материалы темы, чтобы решить задачи.
Желаю вам успехов на пути освоения алгоритмов 🔥