«А ты точно 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

С радостью выслушаю ваши замечания и мысли по этому поводу в комментариях, или реакцией в телеграмм

Let’s block ads! (Why?)

Read More

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *