Одна из самых частых жалоб нанимающих менеджеров: «Мы взяли middle, а по факту получили junior». Или наоборот — переплатили за senior, который едва справляется с оконными функциями. Проблема обычно возникает на этапе скрининга, когда HR не имеет чёткого понимания, чем эти уровни различаются в контексте SQL.
Почему это важно именно сейчас
Рынок аналитиков и разработчиков становится всё более насыщённым. Кандидаты научились красиво описывать опыт в резюме, но реальные навыки часто не соответствуют заявленному грейду. SQL — один из немногих навыков, где разницу можно проверить объективно, с помощью конкретных задач.
Ключевые различия по уровням
Middle-разработчик или аналитик
Middle уверенно работает с базовыми и средними конструкциями:
- Пишет сложные
JOIN(включаяLEFT,RIGHT,FULL OUTER) - Использует агрегатные функции с
GROUP BYиHAVING - Понимает подзапросы и умеет их применять
- Работает с
CASE WHENдля условной логики - Знает основные оконные функции:
ROW_NUMBER(),RANK(),LAG()/LEAD() - Пишет CTE (
WITH ... AS) для структурирования запросов
Типичный признак middle: решает задачу, но иногда делает это неэффективно — например, использует подзапрос там, где достаточно оконной функции.
Senior-разработчик или аналитик
Senior не просто решает задачу — он решает её правильно:
- Думает о производительности: знает, когда нужен индекс, понимает
EXPLAIN ANALYZE - Владеет продвинутыми оконными функциями:
NTILE(),PERCENT_RANK(),CUME_DIST() - Умеет работать с рекурсивными CTE
- Понимает транзакции, уровни изоляции, блокировки
- Может оптимизировать медленный запрос, предложить архитектурное решение
- Знает специфику конкретной СУБД (партиционирование, материализованные представления)
Типичный признак senior: сначала уточняет объём данных и контекст, прежде чем писать запрос.
Вопросы для разграничения уровней
Ниже — конкретные вопросы, которые можно задавать в ходе интервью.
Блок middle
- «Напишите запрос, который выводит топ-3 продукта по продажам в каждой категории.»
- «Чем отличается
WHEREотHAVING?» - «Как вы напишете запрос, чтобы найти пользователей, которые совершили покупку в январе, но не совершили в феврале?»
Что ожидать: кандидат решает задачу самостоятельно, может объяснить логику. Допустимо, если решение не оптимальное.
Блок senior
- «У вас есть таблица на 500 млн строк. Запрос выполняется 40 секунд. Что вы будете делать?»
- «Объясните разницу между
RANK()иDENSE_RANK(). Приведите пример, где это важно.» - «Напишите рекурсивный CTE для построения дерева категорий.»
- «Как вы обеспечите консистентность данных при одновременной записи из нескольких потоков?»
Что ожидать: кандидат не только решает, но и задаёт уточняющие вопросы, объясняет trade-off, упоминает производительность.
Сигналы, на которые обращает внимание нанимающий менеджер
| Поведение | Middle | Senior |
|---|---|---|
| Читает задачу | Сразу пишет | Уточняет требования |
| Производительность | Не думает | Сразу учитывает |
| Ошибки | Исправляет по подсказке | Сам находит |
| Объяснение | Описывает что делает | Объясняет почему |
| Альтернативы | Не предлагает | Называет несколько подходов |
Как автоматизировать разграничение
Ручная оценка занимает время. Удобнее дать кандидату тест с задачами разного уровня сложности и автоматически проверить результат. Платформа sqllab.ru позволяет настроить наборы задач под конкретный грейд — middle и senior получают разные задания, результаты проверяются автоматически.
Это особенно полезно, когда в воронке одновременно несколько кандидатов с похожими резюме.
Чек-лист для HR перед интервью
- Уточнить у нанимающего менеджера: какой грейд нужен — middle или senior?
- Получить 2-3 конкретных задачи для каждого уровня
- Договориться о критериях: что будет «проходным баллом»
- Зафиксировать, что именно проверяет каждая задача
- После интервью сравнить результаты с эталоном
Итог
Разница между middle и senior по SQL — не просто в сложности запросов. Это разница в подходе к задаче: middle выполняет, senior проектирует. Если вы научите рекрутеров различать эти паттерны поведения, качество найма заметно вырастет.