16 вопросов мидлу: что должен знать Middle-разработчик

Отредактировано

Разобрались, что должен знать Middle-разработчик, какими hard и soft skills он обладает и не завышены ли требования сегодня.

92К открытий95К показов
Как считаете, завышены ли сегодня требования к Middle-разработчикам?
Завышены
В пределах нормы
Они даже занижены

Что должен знать Middle-разработчик? Этот вопрос актуален как для тех, кто претендует на вакансию мидла, так и для тех, кто посматривает в сторону продвижения.

Стоит отметить, что несмотря на то что в IT выработана шкала для оценки программистов (trainee, junior, middle, senior, lead), с которой более или менее все согласны, с точным определением каждого уровня общего мнения среди компаний пока нет. Поэтому каждая компания устанавливает внутренние требования к навыкам каждого уровня.

Тем не менее есть основной набор знаний и навыков, по которому в целом можно ориентироваться, оценивая себя. Многие специалисты утверждают, что сегодня требования к мидлам несколько завышены:

Позиция Middle-разработчика предполагает не только уверенное знание языка программирования, но и широчайшие познания в смежных технологиях. Позиция Middle накладывает на специалиста ответственность не только программировать «всё что угодно», но и обучать, оптимизировать код, разбирать и поддерживать чужой код, как будто родной. Фактически сейчас для вакансий Middle-разработчика предъявляются требования, как несколько лет назад для Senior.

Мы выяснили, что должен знать Middle-программист в 2020 году, и собрали общие вопросы с собеседований, по ответам на которые работодатели определяют, «дорос» кандидат до мидла или нет.

Hard skills

Каков ваш уровень владения языком программирования и сопутствующими инструментами?

От программиста-джуна ожидается знание всех конструкций языка, знание большей части стандартной библиотеки. Знакомство с фреймворками (хотя бы с одним), инструментами коллективной разработки (систем контроля версий, таск- и баг- трекеров, естественно, IDE и др.). Требования к мидлам существенно выше. Как правило, ожидается доскональное знание базы (в том числе синтаксиса используемых языков), опыт работы и уверенные теоретические знания стандартных библиотек, необходимых фреймворков и инструментов.

В каких проектах вы участвовали? Сколько из них вели сами?

Не стоит удивляться: опытные джуниоры уже вполне могут вести свои проекты. Не без поддержки более опытных коллег, но это не отменяет самостоятельности младшего разработчика. Так что если вы продвигаетесь по карьерной лестнице, в вашем портфолио уже должны поселиться свои проекты.

Показывайте решения, которые лучше других продемонстрируют ваши знания и навыки. Выбирайте самые сложные и комплексные таски, рассказывайте, как вы их выполняли и как планировали выполнение.

Каков ваш навык работы с базами данных?

Работаете с бэкендом? В таком случае вы должны свободно обращаться к базам данных, иметь навыки работы с одной или несколькими СУБД.

Знать и уметь строить оптимальную архитектуру БД. БД зачастую является самым узким местом производительности проекта. Менять архитектуру БД на живом проекте очень проблематично и дорого.

Это основное из того, что должен знать Middle-разработчик. Не стоит забывать и о нормализации, денормализации и характеристиках каждой нормальной формы.

Расскажите о своём уровне владения выбранной IDE

Нужно уметь без проблем подключать к проекту библиотеки, знать главные преимущества и недостатки среды, свободно настраивать и использовать горячие клавиши. Это то, что должен знать Middle-разработчик на уровне IDE.

Другие технические навыки

Тут всё зависит от конкретной специальности, но эксперты сходятся в том, что знания должны быть продвинутыми: больше, чем одна библиотека и пара хинтов.

Что касается технических навыков Middle-разработчика по frontend JavaScript, то специалист такого уровня должен:знать один из популярных JS-фреймворков (Vue, Angular), а также популярную библиотеку (React);знать SASS/SCSS/Less/PostCSS;уметь самостоятельно настроить систему сборки проекта Grunt/Gulp/Webpack, работать с голым JS (ES5, ES6, ES7);знать и понимать RESTful интерфейсы;уметь пользоваться средствами совместного использования кода (Git + GitFlow).
Также есть дополнительные навыки, которые дают преимущества. Большим плюсом в работе будут:опыт разработки серверного кода под Node.js, TypeScript;понимание SOLID, Dependency Injection, знание Linux (Debian-like);опыт работы с TDD/BDD, тест-фреймворки (Mocha, Should, Chai, Jest);знание Docker (большим плюсом будет Kubernetes/Docker Swarm);опыт в PostgreSQL/MySQL etc.
Самое важное для мидла, это знать, как изнутри работает используемая тобой технология, твой фреймворк. Не то, как он производит рендер (с помощью VDOM и т. п.), а как код написан, как происходит магия. Открой GitHub, посмотри исходники React, как, например, this.setState заставляет компонент делать рендер.

Какие методологии разработки вы знаете? По каким из них работали?

Одной теории недостаточно. Вы уже должны были участвовать в проектах «под ключ» и понять, как работает та или иная методология. Хорошо, если у вас был опыт работы по нескольким методологиям: если так, обязательно проведите сравнение плюсов и минусов, исходя из практики.

Что ещё должен знать Middle-разработчик

Знать и уметь писать оптимальные запросы по выборке данных (DML-запросы).Немного знать про ACID, понимать, что это такое и зачем нужно.Знать три столпа ООП (наследование, полиморфизм и инкапсуляция).Знать, что такое шаблоны проектирования и зачем они нужны. Понимать различия между ними.Понимать, что такое SOLID и когда он уместен.Знать и понимать, что такое тестирование кода и как оно реализуется.Желателен опыт в написании тестов. Это заставляет мозг разработчика генерировать совершенно другой код. Я специально поставил этот пункт ниже SOLID и шаблонов проектирования: сначала SOLID и шаблоны, а только потом тесты. Тогда будет получаться код, который будет легче покрываться тестами.

Soft skills

Насколько вы коммуникабельны?

Если в случае с Junior-программистом коммуникативные навыки просто важны, то для Middle-разработчика они обязательны.

Думаю, что Middle-программист не должен принимать решения по архитектуре проекта, согласовывать требования с заказчиком и решать вопросы по блокерам, так как это входит в компетенции аналитика, PM и сеньора.

Несмотря на это, во многих компаниях перед мидлом часто ставится задача самостоятельно разобраться, чего хочет заказчик, как решить его проблему и какую архитектуру построить. На базе этих сведений формируется полноценное ТЗ, которое затем передаётся команде разработчиков.

Ваши навыки работы в команде

С точки зрения soft скиллов Middle-разработчику, конечно, нужно осваивать компетенции: ведение переговоров, общение с командой, иметь представление об управлении командой. Эти навыки пригодятся в дальнейшем карьерном росте.

Умеете ли вы разрешать конфликты?

Этот навык также является частью коммуникации. Разногласия могут возникнуть и с заказчиком, и внутри команды. Если вам поручили роль наставника над младшими специалистами в проекте — в обязанности войдёт и урегулирование конфликтов.

Несмотря на то что мы, разработчики, чаще сами по себе и сами в себе — нужно развивать коммуникации и другие мягкие навыки. Не во всех компаниях есть менеджер, который выполняет роль медиатора между отделами — чтобы тебя поняли и чтобы ты просто смог нормально рассказать о своей работе, нужны — эмпатия, умение договариваться, гибкость в процессах.

Каков ваш уровень английского языка?

Уровень владения английским языком Middle-программиста должен быть не ниже Upper-Intermediate, так как этот специалист постоянно участвует в созвонах, конференциях, должен свободно читать и составлять техническую документацию.

Способны ли вы доступно доносить свои идеи, убеждать в их правильности?

Что касается «софтскиллс», они необходимы для выполнения многочисленных ролей в команде — разработчик, ментор, докладчик, тимлид и другие. Что для этого понадобится специалисту? Убеждать коллег и клиентов. Иногда даже продавать — идеи, решения, преимущества. Презентовать свои идеи. Обучать. Планировать свою деятельность, ставить задачи перед подчинёнными, контролировать их выполнение. Для этого и много другого нужно развивать соответствующие навыки.

Можно ли вас охарактеризовать, как внимательного человека?

Очень хорошее качество, которое надо развивать разработчику, — это внимательность. Она позволит вовремя заметить, что с «канарейкой» что-то не то. Грамотный Middle-разработчик должен непрерывно отслеживать «жизненные показатели» проекта, чтобы вовремя понять, что «чирикает» после недавнего коммита он уже не так бодро.

Если возникла проблема, как вы будете её решать?

Перед разработчиком среднего уровня стоит задача самостоятельно находить, обрабатывать и использовать информацию, и только в самых сложных ситуациях обращаться к коллегам-сеньорам.

На первом месте здесь стоит умение искать информацию. Перед собеседованием вспомните основные источники информации, к которым вы обращаетесь в первую очередь (после документации, разумеется).

Можете ли вы оценить время выполнения задачи?

Это то, что должен уметь Middle-разработчик, особенно если речь идёт о работе в команде: в этом случае необходимо оценить время, исходя из знаний и навыков каждого участника проекта. Следует учиться правильно определять сроки выполнения работы.

Мидл уже имеет достаточный опыт работы, что позволяет ему декомпозировать задачи более-менее правильно. Мидл умеет декомпозировать, а значит он может точнее оценивать задачи. Он должен уметь соблюдать сроки. Это умение нельзя переоценить.

Планируете ли вы развиваться до сеньора или тимлида?

Плох тот солдат, что не мечтает стать генералом. Перефразируем: плох тот мидл, что не мечтает стать сеньором/архитектором/тимлидом. Мидл должен всегда хотеть развиваться. Жажда саморазвития будет вытаскивать мидла из его рутины (а у него будет рутина) и отправлять развиваться дальше.

Выводы

Так завышены ли сегодня требования к мидлам? На этот счёт мнения расходятся, но почти все специалисты сходятся во мнении, что каждая компания диктует свои правила, и то, что должен знать Middle-разработчик, будет напрямую зависеть в том числе от должности, на которую он претендует.

Не завышены ли требования к мидлам? Возможно, кто-то из IT-специалистов сталкивался с тем, что, уже несколько лет будучи мидлом, на собеседовании в какой-либо компании его оценивают как джуниора. Связано это, как правило, с двумя факторами: первое — разные требования в разных компаниях. Второе — часто в уровень квалификации, кроме перечисленных выше hard и soft skills, ещё включают погружённость сотрудника в предметную область, знание специфики бизнеса. Эти знания делают сотрудника ценным для текущей организации, но могут значить меньше в новой для него организации.

Подводя итоги, Middle-разработчик должен свободно плавать в теории, хорошо знать необходимый стек технологий и иметь по нему богатый опыт, не просто коммуницировать, но также оценивать трудозатраты, сроки, обучать и управлять ходом разработки. Опыт работы с базами данных, Git и уверенное владение английским языком обязательны по умолчанию.

Следите за новыми постами
Следите за новыми постами по любимым темам
92К открытий95К показов