LoftSchool: Я уже middle? А сейчас?

Деление специалистов на junior, middle и senior – обычное дело в IT. Senior – это high-level, поэтому о нём мы не говорим. А вот как понять, что ты уже middle? Руководители IT-компаний поделились с Loftschool мнением о том, чем junior отличается от middle, когда претендовать на повышение и какие навыки прокачивать.

 

Подогнать под одно определение всех middle-разработчиков невозможно. Если по меркам одной компании ты крепкий middle, то в другой, более продвинутой, потянешь лишь на сильного junior-разработчика. Требования по рынку крайне нестабильны. Можно попытаться вывести некие общие критерии, но лишь примерно.

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

Кроме того, middle-разработчику нужен опыт, а вместе с ним – умение анализировать поставленные задачи и находить оптимальные пути для их решения. И даже если так сложилось, что для решения трудной задачи пришлось прибегнуть к коллективному разуму в лице Stack Overflow (что, несомненно, происходит крайне редко), то разработчик сможет не только отыскать подходящий кусок кода и скопировать его, но и понять, как его доработать под конкретную задачу.

Middle-разработчик непрерывно отслеживает «жизненные показатели» проекта.

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

Еще один важный скилл – умение давать жизнеспособную оценку по трудозатратам. Middle-разработчик, прочитав ТЗ/ФТ, должен корректно оценить время на реализацию, запросить всю требуемую или недостающую информацию, согласовать работы с другими участниками разработки и в итоге выдать результат, за который не стыдно.

Можно также упомянуть и об умении проектировать отдельные части системы, над которыми ведётся работа в рамках поставленных задач. Разумеется, проектирование системы – это задача сеньора или архитектора, но в формате «здесь и сейчас» middle-разработчик должен уметь принимать взвешенные и осмысленные решения об использовании тех или иных подходов.

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

 

Чётких критериев для разработчика между грейдами нет. Они разнятся в зависимости от специфики отрасли, рынка, конкретной компании.

Я могу выделить некоторые общие показатели:

1. Самостоятельное выполнение задачи и проекта небольшого размера.

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

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

2. Самостоятельная поддержка небольшого проекта.

Если уже есть готовый проект, который требует лишь небольших доработок, то middle-разработчику не сложно такой проект поддерживать.

3. Решение более абстрактных задач и их декомпозиция.

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

Middle же получает более абстрактные задачи. Например, формата: «Добавить корзину на сайт. Макеты – тут». Он знает, какие детали уточнить у заказчика. Далее разработчик уже сам выделяет этапы разработки, делает декомпозицию задачи.

4. Ответственность за результат.

Тут всё просто: если junior совершает даже серьёзную ошибку, то ответственность за это по большей части на себя берёт senior или teamlead. После повышения до middle-разработчика ответственность за принятые решения переходит к нему.

5. Несколько видов решения задачи и выбор наиболее подходящего для данного случая.

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

Middle знает различные методы решения задачи и в силах аргументировать выбранное решение.

Чтобы понять, как вырасти до middle, пообщайтесь со своим руководителем и выясните, что конкретно в вашей компании необходимо делать, чтобы достичь этого уровня. Можно прямо спросить: «Хочу быть middle-разработчиком, чего мне сейчас не хватает для этого?». Руководитель заинтересован в том, чтобы вы выросли, поэтому честно расскажет, чего не хватает. В одних компаниях разработчика назначают middle только после 2-х лет работы, в других после прохождения сертификации.

Ещё один совет: посмотрите, какие ожидания стоят в вакансиях middle-разработчиков. Всё будет расписано, скорее всего, туманно, но общую канву вы поймёте.

 

Junior – новичок в программировании, который ещё не обладает практически никакими навыками разработки и взаимодействия с командой. А middle уже обладает некоторым уровнем экспертности, которая помогает самостоятельно решать несложные конкретные задачи.

Чётко определить грань, когда начинающий разработчик готов стать middle, сложно. Для этого необходимо проявлять больше ответственности, брать на себя задачи сложнее, заниматься ресёрчем. Благодаря этому появится понимание, как решить одну задачу разными способами.

Необходимо проявлять больше ответственности, брать на себя задачи сложнее, заниматься ресёрчем.

На начальном этапе мы подробно описываем junior-разработчику, что необходимо сделать и как, помогаем искать подходы и решения в интернете. Со временем он начинает понимать проект и уровень проработки задач снижается. И вот тогда он готов стать middle.

Кроме практики, необходимо прокачивать и знания теории – языка и подходов проектирования. Для оценки своего уровня рекомендую периодически мониторить рынок вакансий и проходить интервью в другие компании.

 

Отличия между junior и middle не настолько очевидны, как, например, между junior и senior. Есть три способа понять, что вы готовы перейти на другую ступень:

Первый – спросить teamlead 🙂

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

Третий – замерять параметры: время, затрачиваемое на выполнение стандартных задач; количество вопросов, которые вы задаете по своим задачам коллегам; размер кода, которым вы решаете стандартные задачи (оптимальность и КПД).

Один из главных навыков middle-специалиста – это тайм-менеджмент.

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

 

Главным и неизменным признаком middle является способность решать типовые задачи самостоятельно без посторонней помощи. В то время как junior, скорее всего, станет искать готовое решение на том же Stack Overflow, middle, вероятнее всего, уже имеет схожий опыт и выдаёт решение самостоятельно. Тем не менее, это не значит, что, становясь middle, разработчик перестаёт обращаться к подобным ресурсам. Он просто начинает использовать их как источник вдохновения или как метод ускоренного повышения качества своего кода за счет «красивых» решений, найденных другим разработчиком, вместо того, чтобы тратить огромное количество времени на поиск похожего решения своими силами.

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

Кроме этого, важными навыками middle-программиста являются:

— способность переложить требования к функциональности на способ её реализации в условиях возможностей и ограничений платформы;

— найти и предложить альтернативное решение задачи, например, в случае невозможности реализации изначального варианта из-за ограничений платформы или требований различных «соглашений»;

— понимание и осознанное следование общепринятым практикам «хорошего» кода;

— представление о существующих архитектурных и прочих решениях в рамках платформы, под которую он разрабатывает.

Как из junior превратиться в middle? Можно следить за статьями более опытных разработчиков, просматривать их код, пытаясь понять, почему что-то сделано так, а не иначе, анализировать свой код, стараясь упростить и улучшить его. Я не имею в виду, что стоит слепо следовать их подходам к разработке. Важно анализировать найденные решения и корректировать собственное представление и стиль, чтобы сначала сделать его чуть лучше, затем ещё лучше и так до бесконечности.

Анализируйте найденные решения и корректируйте собственное представление и стиль.

Разница между junior и middle чувствуется в процессе работы. Если вы начали ощущать, что задачи решаются быстрее, необходимость разделять код уже не вызывает чувства растерянности и непонимания, а, смотря на код, вы неосознанно замечаете места, где можно было бы сделать «гораздо лучше» и представляете, как этого достичь, видимо, пора ставить вопрос повышения своему наставнику.

 

Каких-то четких стандартов в этом вопросе в индустрии нет, всё разнится от компании к компании. Обычно junior – это студент, недавно закончивший обучение или стажировку. У него есть общие знания в теории программирования, computer science, знание 1-2 языков программирования. Хорошо, если есть pet project – какая-то разработка (сайт, библиотека и т. п.), которую он запустил и развивает ради собственного интереса. От middle-разработчика его отличает отсутствие опыта в создании реальных проектов, поэтому он работает под присмотром более опытных коллег и первое время набивает руку на простых задачах.

Хорошо, если у junior есть pet project – какая-то разработка, которую он запустил и развивает ради собственного интереса.

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

 

Вообще разделение «junior-middle-senior» веcьма условно. Чаще всего компании делят своих разработчиков по стажу работы. Junior – это новичок, который не понимает цели проекта и может работать над задачами только под чьим-то руководством. Middle – это junior, набравшийся опыта, а senior– это руководитель команды, который может раскидать часть полномочий и полностью видит архитектуру системы.

Причем всё это работает только на уровне больших компаний. А на уровне стартапов часто бывает так, что фаундер – он и teamlead, и senior, который руководит junior-разработчиками. Или, наоборот, горизонтальная структура: над стартапом коллективно работает команда middle-специалистов. А ведь ещё есть фулстек-разработчики, которых вообще сложно втиснуть в какую-то категорию.

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

Что делать junior, чтобы дорасти до middle? В текущем темпе развития IT, наверное, очень мало спать 🙂

Когда человек способен принимать решения по проекту самостоятельно, а не просто кодить по ТЗ, то он готов к повышению.

А если серьезно, то уметь воспринимать критику и постоянно учиться новому. Но этот совет подходит любому специалисту. Какой-то четкой грани, которая отделяет junior от middle нет. Но я бы сказал, что когда человек способен принимать какие-то решения по проекту самостоятельно, а не просто кодить по ТЗ, то он готов к повышению. Например, видит какие-то пробелы в техзадании или «костыли» в коде и может внятно объяснить, как сделать лучше.

Junior-разработчикам для общего развития я бы советовал пытаться делать свои небольшие проекты и доводить их до возможности использования и дальнейшей поддержки. Если сможет – значит готов к повышению.

Источник: статья в LoftSchool

ЕЩЕ НОВОСТИ