Как не вылететь из IT через 5 лет. Часть 1 – Алгоритмы.

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

algorithm

Как понятно из названия, в данной статье мы рассмотрим алгоритмы.

Крайне трудно назвать человека инженером по разработке ПО, если он не знает базовые алгоритмы и алгоритмы, которые лежат в основе структур данных, которые он использует ежедневно.

Давайте рассмотрим, что необходимо знать абсолютно каждому разработчику:

  • Понятие сложности алгоритма (что это такое в принципе и как она рассчитывается). Временная и пространственная сложность.
  • Побитовые операции (XOR, OR, AND)
  • Базовые аспекты криптографии
  • Основы безопасности
  • Теория вероятности (основы)
  • Основы геометрии (конечно же евклидовой, если вы не собираетесь работать в CERN)
  • Комбинаторика

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

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

Приступим:

  • Стеки и очереди
  • Деревья: BFS, DFS (во-первых, нужно знать, что это за буквы, а во-вторых – понимать, что это такое)
  • Массивы
  • Кучи
  • Графы
  • Хэш-структуры
  • Строки (реализация в вашем языке программирования, работа с регулярными выражениями, как найти подстроку, ASCII, кодировки и т.д.)
  • Связные списки

После того, как вы разобрались со структурами данных имеет смысл ознакомиться с базовыми алгоритмами:

  • Поиск (бинарный поиск, линейный поиск, поиск в графах и т.д.)
  • Что такое жадные алгоритмы
  • Рекурсия
  • Сортировка (quicksort, heapsort, mergesort)
  • Понятие NP-алгоритмов

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

  • “Алгоритмы. Построение и анализ” Кормен
  • “Алгоритмы” Седжвик
  • “Дискретная математика для программистов” Хаггарти
  • Сайт http://bigocheatsheet.com/. Здесь приведены сложности операций для базовых структур данных – выучить наизусть и уметь рассказать, даже если вас разбудили в 3 часа утра.
  • Желательно пройти курс Алгоритмы, Часть 1.

Для понимания большинства алгоритмов крайне рекомендую просмотреть их визуализации на сайте https://visualgo.net/.

На этом мы заканчиваем обзор материалов по алгоритмам.

  • Виталий

    Понравился ваш сайт. Буду следить.

    • proselytear

      Добро пожаловать, Виталий :)

  • Ruslan

    Статья хорошая. Алгоритмы – это фундаментальная вещь. В зависимости от технологий на проекте, требуется тот или иной уровень. Где-то достаточно знаний в рамках упомянутого первого курса по алгоритмам на курсере, а где-то нужно владеть продвинутыми навыками.
    Евгений, пытался ли проходить курс от Седжвика или хотя-бы прочитать и прорешать всю книжку по алгоритмам на Java от этого автора?

    • proselytear

      Спасибо за отзыв, Руслан.
      По поводу курса Седжвика – конечно, прошёл и 1 и 2 части.
      На данный момент лучший курс в открытом доступе по алгоритмам.

      • Ruslan

        Это здорово и очень похвально. Просто я сам не проходил еще. Планирую где-то в следующем году, т.к. курс тяжелый. В этом году хочу пройти весь алгоритмический набор из 6 курсов (который на курсере).

        • proselytear

          Я бы крайне рекомендовал прочитать для начала Алгоритмы Java. Лафоре для старта крайне интересная и полезная книна. А после – Кормен. По моему мнению, это будет хорошим стартом.

          • Ruslan

            Жень, чем нравится мне твой бложик – в статьях “как быть”, “кем стать” есть дорожная карта развития. Это, конечно, очень здорово

          • Игорь Смол

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

          • proselytear

            Честно говоря, и многим мидлам она не помешала бы :)