Используете ли вы сложные алгоритмы на работе?
Типичный код, который пишет backend разработчик на Java, это:
1) boiler plate код связанный с каким-то фреймворком или библиотекой. Например, код для создания REST, RPC или какого-либо еще сервиса. Код для взаимодействия с базой, кэшом, очередью или потоком. Всяческие конфигурационные файлы и код.
2) Тривиальная бизнес логика. Это, обычно, прочитать из базы, кэша, потока, очереди или взять пришедший реквест, как-то его преобразовать (отфильтровать, трансформировать и т.д.) и положить снова в базу, очередь, поток или отправить назад реквест.
Обычно, для 1) знания каких-то алгоритмов и структур данных не требуется. Да и вообще, запоминать как это делается особого смысла нет. Все технологии и тулы быстро меняются и все эти вещи быстро гуглятся. Надо уметь гуглить и копипастить. А с появлением LLM, это вообще можно автоматизировать.
Для 2) уже нужны какие-то базовые знания структур данных и алгоритмов. Вам, скорее всего придется работать со списками, массивами, хэш-таблицами, писать циклы и if-else. Очень редко, что-то сложнее этого.
Но во многие компании спрашивают знания алгоритмов и структур данных (не только в FAANG, но и компании поменьше). Это, в основном, связано с тем, что им надо каким-то стандартным образом отсеять много кандидатов. И данные исследований показывают, что люди, которые прошли такое собеседование, показывают более хорошие результаты на работе.
Но иногда все же нужно не только теоретическое знание этих алгоритмов, но и их приходится применять на работе. Чаще это делают разработчики, которые разрабатывают инфраструктуру. Это те базовые блоки и кирпичики, которые уже могут использовать backend разработчики. Это разработчики, которые разрабатывают базы данных, языки программирования, виртуальные машины, лоад балансеры, библиотеки, фреймворки, распределенные сервисы типа Elastic Search, Kafka, Cassandra и т.д.
Но иногда это приходится делать и backend разработчикам.
Лично мне приходилось писать алгоритмы для работы в графами и деревьями в FAANG. Это и поиск циклов в графе и обход дерева кода (AST Tree) с его модификацией. Несколько раз, в разных компаниях писал топологическую сортировку. Часто нужна, когда у вас есть граф зависимостей чего-либо. Также в одной компании я разрабатывал алгоритм под CUDA, который мог делать очень быстрые манипуляции с разреженными матрицами и использовал алгоритмы параллельной сортировки на тысячах ядер видеокарты. При этом я ни разу не использовал сложное динамическое программирование на работе, только на собеседованиях.
Приходилось ли вам писать или использовать сложные алгоритмы на работе на практике?
Post #197
1.26K