В предыдущей статье я писал об основных моментах, которые (с моей точки зрения) крайне помогут вам стать востребованным специалистом и удержаться в случае сокращений, волны увольнений и т.д. Да и в целом, помогут вам почувствовать себя разработчиком, который способен решать действительно сложные задачи.
Как понятно из названия, в данной статье мы рассмотрим алгоритмы.
Крайне трудно назвать человека инженером по разработке ПО, если он не знает базовые алгоритмы и алгоритмы, которые лежат в основе структур данных, используемых ежедневно.
Давайте рассмотрим, что необходимо знать абсолютно каждому разработчику:
- Понятие сложности алгоритма (что это такое в принципе и как она рассчитывается). Временная и пространственная сложность.
- Побитовые операции (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
Честно говоря, и многим мидлам она не помешала бы 🙂
Как не вылететь из IT через 5 лет. Часть 3 – Умение использовать знания на практике. – PROSELYTE
[…] Как не вылететь из IT через 5 лет. Часть 1 – Алгоритмы. […]
Как не вылететь из IT через 5 лет. Часть 4 – Многопоточность. – PROSELYTE
[…] Как не вылететь из IT через 5 лет. Часть 1 – Алгоритмы. […]
Красный властелин
Базовые аспекты криптографии – что имеется в виду? Знание алгоритмов вроде шифра Цезаря и XOR?
proselytear
Алгоритмы шифрования, вряд ли пригодятся большинству, а вот симметтричное шифрование и т.д., хотя бы знать, что это такое – не повредит.