Привет, я тех/тим лид в одной из продуктовых web компаний - систематически занимаюсь собеседованиями. Для меня главная проблема - понять кто перед тобой, senior, или не особо. А если еще и нужно согласовать мнение со вторым интервьюером...
В общем, если вы занимаетесь web-разработкой, хотите понять свой уровень, или стоите на страже компании и не до конца понимаете, как понять уровень кандидата, добро пожаловать под кат.
Важный момент, к которому я пришёл - понятие уровня очень субъективно и зависит от типа компании и задач, которые она решает. В принципе, на этом можно закончить статью, но давайте попробуем пойти дальше.
Для себя я выделил два основных направления — аутсорсинг и продуктовые компании.
Для аутсорсинга важнее широкий спектр технологий, с которыми сталкивался кандидат.
В продуктовой будет важнее глубокое понимание технологий и принципы написания поддерживаемого кода.
Все дальнейшие рассуждения будут с позиции моего опыта и продуктовой разработки, что естественно не будет совпадать с вашим мнением - так что отнеситесь к этому как к возможности увидеть альтернативную позицию.
Итак, первое знакомство с кандидатом - резюме
на его основании мы решаем, стоит ли выделять время на общение.
Я люблю грамотно оформленные - правильный порядок блоков, описано, чем занимался на каждом месте работы, перечень технологий и принципов, которыми владеет кандидат - но это встретишь нечасто, поэтому оформление опускаем.
На что обращаю внимание:
Как долго работает в одной компании, есть ли рост/смена позиций за время работы.
На чём акцент: технологии или подходы, задачи, которые решал, или технологии, которыми пользовался.
Красным флагом могут быть:
частая смена проектов
большое количество проектов с CMS
пустое перечисление слов от CSS до IDE (и отсутствуют ключевые технологии и подходы).
Если будет интересно, к теме хорошего оформления резюме как-нибудь вернёмся.
Самый простой ответ на вопрос: "как же понять, какой у меня уровень" - тот, за который тебе согласны платить. Но вы ведь здесь тратите время не для этой демагогии, так что я попробовал формализовать этот ответ.
И пока не забыл, подпишитесь на мой канал в телеграм, чтобы не пропустить новые публикации, также буду там делиться короткими размышлениями по темам разработки, отписаться, если что, всегда успеете.
Итак, наш герой дня, таблица навыков для веб-разработчика, учтите, что таблица указывает на средний/верхний порог уровня, для нижнего можно на усмотрение убрать часть пунктов.
Под таблицей есть спойлер с картинкой, если на вашем экране таблица поползла.
Junior | Middle | Senior | |
Архитектура приложений | Есть базовое понимание принципов ООП | Хорошо понимает SOLID | Знает основные подходы к проектированию приложения(например CQRS, ES, Modular, SOA) |
Код | Знает базовые конструкции языка | Знает основные возможности языка, ряд популярных дополнений/библиотек | Знает нюансы языка, понимает как обходить ограничения языка |
Структуры данных/Алгоритмы | Знает какие есть структуры данных | Может написать простой алгоритм, посчитать его сложность | Может выбирать/ создавать алгоритмы для более сложных задач |
Реляционные базы данных | Может строить простые запросы(выборки, простые джоины) | Может строить сложные запросы(сложные джоины, подзапросы, агрегации) | Может построить сложную структуру базы данных(шардинг, денормализация) Знает ограничения и возможности нескольких баз данных |
Безопасность | Слышал основные уязвимости | Знает основные OWASP уязвимости и как их предотвращать | Знает ряд техник для мониторинга, предотвращения уязвимостей |
Тестирование | Есть базовое понимание для чего и как писать юнит тесты | Понимает различия между разными видами тестов | Знает разные подходы к написанию тестов(TLD, TDD) |
API | Знает базовые методы HTTP | Хорошо понимает принципы проектирования API | Знает основные подходы стандартизации/версионирования API |
Очереди/ Шина сообщений | Понимает зачем они и как работать на уровне интерфейса языка/библиотек | Понимает разницу между очередью и шинной сообщений | Знает основные решения по настройке, мониторингу очередей (со стороны приложения) |
Многопоточность/ Асинхронность | Владеет на уровне интерфейса языка | Знает как работать с многопоточностью | Понимает что такое итоговая согласованность |
Кеширование | Может работать на уровне интерфейса языка/библиотеки Догадывается когда использовать | Знает как организовать кеш, какие бывают проблемы | Хорошо знаком с проблемами нагруженного кеша(прогрев, волна запросов, конкурентный доступ) |
Инфраструктура/Сети | Знание базовых команд операционной системы | Понимает какие вещи и как нужно настроить для продакшн среды | Знает как балансировать нагрузку |
Метрики/ Логи | Знает зачем логи, как их писать | Знает варианты сбора логов | Знаком с рядом вариантов сбора метрик/логов |
VCS/ Релиз процесс | Понимает зачем нужна VCS | Хорошо знает команды VCS | Может построить CI процесс, знает какие для этого есть инструменты |
PNG
Хочу подчеркнуть, что это попытка сделать абстрактный набор требований к каждому из уровней, который может помочь понять, куда двигаться или чего ожидать от кандидата.
Естественно, требования не могут быть универсальными, и для вас какие-то пункты не актуальны, а каких-то будет не хватать.
С помощью обратной связи часть пунктов пересмотрено.
Отдельное спасибо @Metotron0за пачку исправлений.
ChePeter
Как Вы определяете знание «клиентоориентированных технологий»?
Где в Вашей таблице скрыто знание предметной области?
Спасибо.
Vladnev Автор
Предметных областей слишком много, это скорее общий путеводитель который поможет понять куда двигаться тому кто хочет развиваться, или на какие моменты обратить внимание если вы собеседующий, естественно с учётом специфики проекта
Vladnev Автор
— дублирование ---