Зачем разработчику алгоритмы и структуры данных | robot_dreams
Для отслеживания статуса заказа — авторизируйтесь
Введите код, который был выслан на почту Введите код с SMS, который был выслан на номер
 
Код действителен в течение 5 минут Код с sms действителен в течение 5 минут
Вы уверены, что хотите выйти?
Сеанс завершен
На главную
Скучная теория или полезный инструмент: зачем разработчику алгоритмы и структуры данных

Скучная теория или полезный инструмент: зачем разработчику алгоритмы и структуры данных

Рассказывают джуны, синьоры и хайринг-менеджеры

«Алгоритмы служат базовыми элементами любой машинной программы», — говорил автор языка программирования Pascal Никлаус Вирт. Но среди разработчиков до сих пор бытует мнение, что разбираться в алгоритмах и структурах данных нужно только для того, чтобы удачно пройти техническое собеседование. В результате специалисты могут даже успешно решать задачи, но при этом не понимать, как работает их код, и не иметь возможности улучшить его качество.

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

Каких знаний по алгоритмам ожидают компании и как их продемонстрировать

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

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

Андрей Белоус, Senior Dev Lead в Luxoft

В компании Roosh свои ожидания по количеству правильных ответов от кандидатов изобразили следующим образом:

  • джуниор: >50 %;
  • мидл: >70 %;
  • синьор: >90 %

 

На этапе технического собеседования эти знания обязательно проверяют. Инженеры используют их для понимания сложности ML-алгоритмов, процессинга данных и т. д.

В Luxoft отмечают, что на фронтенд-позицию в простых проектах знания алгоритмов менее важны и реже будут блокером. Для бэкэнд-позиций бывает по-разному: многое зависит и от бизнес-домена. Например, для проектов в сфере энергетики всегда проверяют эти знания в первую очередь, так как важно быстродействие при обработке больших объемов данных.

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

В Roosh считают подобные знания мастхэвом: разработчик должен продемонстрировать профиль с Leetcode, профиль на Github с решенными задачами с Leetcode.

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

«Плюсом это будет только для интерна. Если же кандидат с опытом 10 лет напишет, что год назад проходил курс по базовым структурам данных, то это скорее минус, потому что тогда непонятно, как он работал 9 лет до этого», — говорят в Luxoft.

О чем спрашивают на собеседованиях

Роман Аболмасов, Fullstack Developer и TechLead в SoftServe, говорит, что на собеседованиях обычно могут спросить об алгоритмах и структурах данных, начиная от сортировки пузырьком и деревьев — до просьбы оценить эффективность алгоритмов по временным и пространственным параметрам:

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

Роман Аболмасов, Fullstack Developer и TechLead в SoftServe

Назар Конюшенко, Middle Unity Developer, говорит, что об алгоритмах на собеседованиях его почти не спрашивали:

Максимум, что могу вспомнить, — просили перечислить алгоритмы сортировки, которые я знаю (просто названия). По моему опыту в геймдеве, задачи, где требовались бы знания каких-то специфических алгоритмов, мне не попадались, а типичные — давно уже реализованы в стандартных библиотеках. О структурах данных спрашивают почти всегда: какие знаете, как работают «под капотом», в чем разница и т. д.

Назар Конюшенко, Middle Unity Developer

Анна Костырко, Junior Node.js Developer, говорит, что на собеседовании ей пригодились знания о сложности поиска по массиву и дереву.

Как алгоритмы и структуры данных помогают в работе

Роман Аболмасов вспоминает, что на одном из проектов, связанном с подсчетом плоскостей деталей для обработки, полалгоритмом обертки Грэхемаьзовался алгоритмом обертки Грэхема и методом Монте-Карло. Первый помог с вычислениями выпуклой оболочки множества точек в пространстве, а второй пригодился для моделирования сложных систем, которые трудно изучать аналитически. Его суть заключается в том, чтобы генерировать случайные входные данные для системы и вычислять выходные данные. Затем результаты вычислений агрегируются, и на основе статистики определяются вероятность, риски или другие параметры системы.

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

Назар Конюшенко, мидл-специалист, реализовывал алгоритм только раз — для собственного пет-проекта:

«Структуры данных используются отовсюду: и обычные списки, и хеш-таблицы, и словари, и стек».

Он говорит, что любой более или менее типичный алгоритм уже много раз описан в сети и реализован. Поэтому здесь сложность только в том, как его адаптировать под конкретную задачу. Со стандартными структурами данных надо запомнить названия (их достаточно много) и принцип работы:

«Бывает, помнишь, какой принцип работы структуры тебе нужен, но не можешь вспомнить, как она называется. Тогда просто гуглишь».

Джуниор-разработчица Анна Костырко добавляет, что уверенно подступается к Leetcode и по возможности решает там задачи. На стажировке были таски из Map и Set, но это не главное:

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

Анна Костырко, джуниор-разработчица

Ещё статьи
Экспертки о том, как оценивают кандидатов на нетехнических интервью
Часть 2. Работа с записями: вставка, чтение, изменение и удаление