Заметка

Мой опыт прохождения курса по алгоритмам

Это опыт прохождения курса в 2023 году. Программа и условия могли с тех пор измениться.

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

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

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

  1. Наличие обратной связи - поддержка менторов в чате, проверка ДЗ по каждому модулю.
  2. Покрывал все базовые темы, ничего лишнего.
  3. Продолжительность - 4 месяца (а не 8-10, как в других местах).

Что оказалось сложным

Гладко было на бумаге, да забыли про овраги 🙂 Курс я в итоге успешно прошёл, но есть ряд нюансов, которые выяснились только в процессе.

  1. Бешеная нагрузка. Темп обучения очень высокий. На каждую тему отводится спринт - 2 недели. И если для сортировок и связных списков этого даже много, то на деревьях и графах я успевал с огромным трудом.
  2. Менторы в теме разбираются, но далеко не всегда могут внятно подсказать направление мысли в решении задачи. Они не дают прямых ответов (что хорошо), но частенько их намёки меня только запутывали.
  3. Были проблемы с прохождением бенчмарков по скорости/памяти на NodeJS. Это известная проблема, но несколько задач я просто не смог в итоге сдать.

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

Также я под конец решал не все задачи модуля, а только необходимый минимум (50%, в среднем 5-6 задач). У меня параллельно наложилась ещё и смена работы с сильным выгоранием, поэтому было вдвойне тяжко.

По проверке домашек могу только сказать, что с ревьюером мне повезло и я получал подробную, понятную обратную связь с конкретными рекомендациями и замечаниями. Ни с какими проблемами не сталкивался. Хотя от коллег по курсу с других языков слышал и обратный фидбек. По видимости, здесь как повезёт.

Курс выстроен по принципу “минимум теории, максимум практики”. С одной стороны это хорошо - не приходится штудировать талмуды. С другой стороны, периодически этой самой теории не хватало и приходилось что-то догугливать. Не считаю это существенным минусом, навыки гугления в процессе ещё никому в жизни вреда не приносили.

Что в итоге

  1. Я рад, что прошёл курс. Я прям ощутимо прокачал навыки алгоритмов и достаточно хорошо разобрался во всех темах. Да, спустя год что-то уже вылетело из памяти, но восстановить эти знания - не проблема.
  2. Полученные знания я в процессе финализации обучения протестировал на собесах. Несколько раз попадал в ситуацию, когда интервьюер со смешками срочно доставал задачу откуда-то из “заначки”, потому что я их щёлкал как семечки. Ни один собес не вызвал сколько-нибудь ощутимых затруднений.
  3. Из приятного - материалы остаются со мной навсегда. Когда я учил Go, то немного практиковался на задачках из курса.

Мои рекомендации

  1. Вполне можно обойтись и без курса - достаточно пары хороших книг (Гроккаем алгоритмы, книги Тима Рафгардена) + leetcode. При затыках можно взять ментора 🙂 Но если у и без того высокая нагрузка в жизни (как было у меня) - курс помогает держать темп и сохранять мотивацию. Поэтому выбирайте под себя. Я бы рекомендовал начать с книг и leetcode, затем пойти на курс (если сами не справляетесь).
  2. Если пошли на курс - закладывайте в неделю часов 15-20 на теорию и задачи. Работы не просто много, а очень много. Применяйте весь свой тайм-менеджмент, фиксируйте в календаре слоты и так далее.
  3. Не стесняйтесь просить о помощи. Я как-то задачу решал около 8 часов 🙂 И это с помощью менторов, сам бы раза в два дольше просидел.
  4. Идите с опережением. Если тема лёгкая - проскочите её быстро, решите задачки и двигайтесь к более сложному. Оставьте себе запас по времени на сложные темы.
  5. Не забывайте отдыхать. Работа над алгоритмами изрядно выжирает умственную энергию. Лучше делайте по чуть-чуть, но каждый день.
  6. Опционально - не решайте все задачи сразу. Можно решить необходимый минимум и потом вернуться, чтобы дорешать оставшееся. Так будет даже эффективнее, потому что вам придётся заново вспомнить все материалы темы, чтобы решить задачи.

Желаю вам успехов на пути освоения алгоритмов 🔥