Базу изволите знать.?
В IT-сообществах то и дело всплывают одни и те же вопросы: «Кому в реальной работе действительно пригодились структуры данных и алгоритмы, а не просто дрюканье этой темы на собесах?», «Использовали ли вы на практике знания о внутренних механизмах работы вашего языка?», «Применяете ли вы паттерны банды четырёх?»
Я всегда отношусь с большим подозрением к разработчику, который на это отвечает: «Нет!». Любые доводы в пользу этого ответа я просто не принимаю. Почему? Давайте разложу по пунктам.
☝️ Структуры данных и алгоритмы — это база для любого языка программирования. Если разработчик их не знает, он обречён изобретать велосипеды с квадратными колёсами. ➖ Выбор между Set и List — это не вопрос удобства, а вопрос семантики и производительности: уникальность против дублей, поиск за O(1) против O(n). ➖ Понимание графов критически важно для систем рекомендаций или маршрутизации. Деревья повсюду: от DOM-модели браузера до парсеров. ➖ А без понимания хеш-таблиц вы не поймёте, почему ваш код вдруг начал тормозить на 10 тысячах элементов. ☝️ Паттерны — это словарь архитектора. Это типовые подходы к решению задач, и знать их необходимо. ➖ Когда говоришь коллеге «сделаем здесь Фабрику» или «обернём это в Декоратор», не нужно рисовать десять диаграмм — вы говорите на одном языке. ➖ Паттерны помогают расширять функционал, не ломая старый. ➖ А главное — понимание правильных подходов уберегает от «Божественных объектов» и спагетти-кода. ☝️Понимание внутреннего устройства языка позволяет держать руку на пульсе. Без этого поверхностное знание рано или поздно приведёт к катастрофе. ➖ Нужно понимать, как работает сборщик мусора, иначе «странные» фризы приложения останутся для вас магией. ☝️Важно разбираться в модели памяти, чтобы отличать работающий код от того, что будет недетерминированно падать в проде раз в месяц. ➖ А знание того, оптимизирует ли компилятор хвостовую рекурсию, убережёт от переполнения стека. ☝️ Понимание работы операционной системы — ключ к тому, что действительно происходит под капотом. ➖ Если не видите разницы между блокирующим и неблокирующим вводом-выводом на уровне ядра, не напишете по-настоящему высоконагруженный сервис. ➖ Без модели OSI и понимания сокетов настройка сетевого взаимодействия превращается в шаманство. ➖ А знание файловых систем помогает не потерять данные и не угробить дисковую подсистему сервера.
Я выбираю путь инженера. Изучаю базу и всегда стремлюсь спуститься на уровень ниже, чтобы понимать, что на самом деле происходит, когда моя программа работает. Всегда применяю эти знания в работе. Это не просто «полезно» — это фундамент!
Тот, кто говорит «нет, не пригодилось», либо работает в настолько примитивной области, либо просто не замечает, как использует эти знания, прячась за абстракциями фреймворков. Он пишет запрос к базе, не задумываясь, что внутри неё работают B-деревья, и пользуется фреймворками, в которых уже применены паттерны, принимая это за магию. По-настоящему развивайтесь и вглубь, и вширь. Инвестируйте в понимание, а не в заучивание синтаксиса!
· 17.02
Все имеет свои разумные пределы. Спрашивать на собесе на тех лида вставку в красно-черное дерево, или написать псевдокодом нахождение остовного дерева - это явно повод сказать прямо на собесе «пока, пока»
ответить
коммент удалён
· 17.02
Мой пост не затрагивает тему вопросов на собеседовании… но если знание и понимание тех или иных алгоритмов или любых других знаний критично для работы на позиции открытой вакансии, не вижу ничего не разумного…) Хорошо всем сделать не получится…)
ответить
ответ удалён
· 17.02
Я как-то давным-давно сходил на собеседование в одну из галер, которой благодаря 22 году уже нет, и там почти час шло обсуждение SOAP и B+ не потому что это важно для проекта, на который был собес, а потому что интервьюверы задавали такие вопросы.
Не спорю, что понимание О-нотации критично для разрабов, но важно понимать, что 99% продуктов не использует то, что вы описали в посте.
ответить
ответ удалён
· 17.02
Потом таблицы из 30 строк начинают жутко лагать, компоненты становятся по 6-8к строк, новые требования внедрить не получается, зато нотацию никто не соблюдал, у всех по более 5-10 лет коммерческого опыта высоконагруженных приложений. Поэтому, ругающие алгоритмы и какие-то задания разработчики, никак не могут попасть в стабильные, интересные по условиям и экспертизе, компании. Алгоритмы в работе не замечают, потому что, когда не было агентов, все искали на форумах/SO решения, как пройтись по матрице, как прочитать файл, разбить на токены, в какой момент читать, какую регулярку применить, как в интерфейсе или на сервере обойти файловую структуру, сейчас это стало «рутиной», которую мгновенно выдаёт агент, но проект растёт, ревьювят тоже через агента. Палка на палке, лужа на луже, зачем это, работать же не в кайф потом… Базовые задачи по алгосам сейчас помогают отсеить значительную часть формошлёпства и любителей классных валидаций, обработки ошибок. Да, это ИМХО, но мне теперь комфортно работать с коллегами в La Tech, обсуждать на берегу, чтобы система развивалась. Есть товарищи из разных областей, они устали от тормозни и невозможности что-то быстро поправить. Там всё, как на скрине.
ответить
ответ удалён
· 17.02
Конечно в менеджменте и других направлениях нужно спрашивать продуктивные задачи, но точно не убирать секцию алгосов для разработчиков, иначе Энтони Базаров приведёт свою армию.
ответить
ответ удалён
· 17.02
99% продуктов работают на «магии».. это ж классическая подмена понятий. Нужно понимать что если разработчик выучил набор приемов, достаточных для решения вчерашних задач, то глупо искренне считать, что фундаментальные знания — это лишний груз.
ответить
ответ удалён