«А ты точно senior?» — или ожидания продуктовых компаний
Привет, я тех/тим лид в одной из продуктовых web компаний – систематически занимаюсь собеседованиями. Для меня главная проблема понять кто перед тобой senior, или не особо. А если еще и нужно согласовать мнение со вторым интервьюером…
В общем если вы занимаетесь WEB разработкой хотите понять свой уровень, или стоите на страже компании и не до конца понимаете как понять уровень кандидата добро пожаловать под кат.
Важный момент к которому я пришел – понятие уровня очень субъективно и зависит от типа компании и задач которые она решает. В принципе на этом можно закончить статью, но давайте попробуем пойти дальше.
Для себя я выделил два основных направления – аутсорс и продуктовые компании.
Для аутсорс важнее широкий спектр технологий с которыми сталкивался кандидат.
В продуктовой будет важнее глубокое понимание технологий и принципы написания поддерживаемого кода.
Все дальнейшие рассуждения будут с позиции моего опыта и продуктовой разработки, что естественно не будет совпадать с вашим мнением – так что отнеситесь к этому как к возможности увидеть альтернативную позицию.
Итак первое знакомство с кандидатом – резюме
на его основании мы решаем стоит ли выделять время на общение.
Я люблю грамотно оформленные – правильный порядок блоков, описано чем занимался на каждом месте работы, перечень технологий и принципов которыми владеет кандидат – но это встретишь не часто, по этому оформление упускаем.
На что обращаю внимание:
Как долго работает в одной компании, есть ли рост/смена позиций за время работы.
На чем акцент: технологии или подходы, задачи которые решал или технологии которыми пользовался.
Красным флагом могут быть:
частая смена проектов
большие количество проектов с CMS
пустое перечисление ключевых слов от CSS до IDE.
Если будет интересно к теме хорошего оформления резюме как-нибудь вернемся.
самый простой ответ на вопрос: “как-же понять какой у меня уровень” – тот за который тебе согласны платить. Но вы ведь здесь тратите время не для этой демагогии, так что я попробовал формализовать этот ответ.
И пока не забыл, обязательно подпишитесь на мой канал в телеграмм чтобы не пропустить новые публикации, так-же буду там делится короткими размышлениями по темам разработки, отписаться если что всегда успеешь 🙂
Итак наш герой дня, таблица навыков для web разработчика, учтите что таблица указывает на средний/верхний порог уровня, для нижнего можно на усмотрение убрать по пункту из тем:
Под таблицей есть спойлер с картинкой если на вашем экране таблица поползла)
Junior |
Middle |
Senior |
|
Архитектура приложений |
Есть базовое понимание принципов ООП Слышал про SOLID Может придерживаться соглашений проекта и прослеживать аналогии Знает пару паттернов |
Хорошо понимает SOLID Слышал про GRASP Знает про модульную архитектуру Знает какие есть паттерны, понимает когда нужно применять |
Знает основные подходы к проектированию приложения(CQRS,ES,Modular,SOA) Хорошо понимает как предупредить каскадные изменения Может рассуждать про метрики качества кода Знает паттерны вне GOF |
Код |
Знает базовые конструкции языка С помощью гугла может решить основные задачи |
Знает основные возможности языка, ряд популярных дополнений/библиотек Может решить сложные задачи и направить Junior разработчика |
Может грамотно построить структуру проекта Код понятен легко читаем без лишнего усложнения |
Структуры данных/алгоритмы |
Знает какие есть структуры данных Может подобрать подходящую для простых случаев |
Может написать простой алгоритм, посчитать его сложность Хорошо понимает структуры данных, в каком случае какую выбрать |
Может выбирать, создавать сложные алгоритмы При выборе алгоритма и структуры данных размышляет про эффективность выбора в разрезе RAM/CPU |
Реляционные базы данных |
Может строить простые запросы(выборки, простые джоины) Понимает что такое индексы Может построить отношения между таблицами |
Может строить сложные запросы(сложные джоины, подзапросы, агрегации) Понимает как построить оптимальные индексы Может профилировать запросы, знает explain Может спроектировать простую структуру базы данных Понимает как работать с большими таблицами Знает про репликацию |
Может построить сложную структуру базы данных(шардинг, денормализация) Знает ограничения и возможности популярных баз данных Понимает ограничения CAP, PACELC |
Безопасность |
Слышал основные уязвимости |
Знает основные OWASP уязвимости и как их предотвращать |
Знает ряд техник для мониторинга, предотвращения уязвимостей. Понимает как действовать при атаке |
Тестирование |
Есть базовое понимание для чего и как писать юнит тесты |
Понимает различия между разными видами тестов Может эффективно их писать Понимает как избегать хрупких тестов |
Знает разные подходы к написанию тестов(TLD, TDD) Может рассуждать о пирамиде тестирования Знает что дает и как создать нагрузочное тестирование Как плюс знает AB тестирования |
API |
Знает базовые методы HTTP Слышал про RPC,REST |
Хорошо понимает принципы проектирования API Знает какие есть варианты авторизаций |
Знает основные подходы стандартизации/версионирования API Может выбрать тип авторизации для проекта |
Очереди/ Шина сообщений |
Понимает зачем они и как работать на уровне интерфейса языка/библиотек |
Понимает разницу между очередью и шинной данных Знает основные проблемы воркеров и как из предотвращать (утечки памяти, перезапуск, мониторинг) |
Знает основные решения по настройке, мониторингу очередей Может выбрать подходящий брокер Спроектировать подход к обработке данных (очередь, пайплайн, асинхронный ответ…) |
Многопоточность/ Асинхронность |
Владеет на уровне интерфейса языка |
Знает как работать с многопоточностью Знает как работать с асинхронностью |
Понимает что такое итоговая согласованность Когда и как лучше распараллелить процесс |
Кеширование |
Может работать на уровне интерфейса языка/библиотеки Догадывается когда использовать |
Знает как организовать кеш, какие бывают проблемы |
Хорошо знаком с проблемами нагруженного кеша(прогрев, волна запросов, конкурентный доступ) |
Инфраструктура/Сети |
Знание базовых команд операционной системы Знает какие этапы проходит запрос перед тем как попасть в приложение Знаком с одним из средств виртуализации |
Понимает какие вещи и как нужно настроить для продакшн среды Понимает виртуализацию и контейнеризацию Знает базовые сетевые протоколы TCP, UDP, HTTP, HTTPS Понимает как устроена сеть DNS, NAT, OSPF, BGP, RIP |
Знает как балансировать нагрузку(включая необходимость попадания данных на тот-же сервер) Хорошо понимает принципы работы CDN и как решать базовые проблемы Знает ограничения текущей платформы, как их обойти |
Метрики/логи |
Знает зачем логи, как их писать |
Знает варианты сбора логов Понимает зачем проекту мониторинг, как им пользоваться Может выбрать необходимые метрики |
Знаком с рядом вариантов сбора метрик/логов Способен настроить алертинг, сбор необходимых метрик Желательно знакомство с TSDB |
CVS/ Релиз процесс |
Понимает зачем нужна CVS Может выполнять базовые операции CVS Может рассказать как сделать простой релиз через CVS и SSH руками |
Хорошо знает команды CVS Знает пару фреймворков построения процесса Знает как работает CI |
Может построить CI процесс, знает какие для этого есть инструменты Хорошо знает подходы к ветвлению, может выбрать подходящий |
PNG
С радостью выслушаю ваши замечания и мысли по этому поводу в комментариях, или реакцией в телеграмм