В чём принципиальное отличие джуна от мидла, а мидла от сеньора? На какие навыки поднажать, чтобы не задерживаться на одной ступеньке? Эти темы актуальны в ИТ-сообществе всегда.
Мы решили проследить, меняются ли с годами представления айтишников о принципиальных различиях между грейдами разработчиков.
Немного официоза
Хотя мы привыкли говорить о начинающих и опытных специалистах в бытовом ключе, в России существуют официальные документы, описывающие уровни квалификации разработчиков. Например, год назад Минтруд утвердил новый профстандарт «Программист».
По мнению Кира Дергачева, руководителя разработки в Нетологии, новый профстандарт приближен к реальности: в описании функций используются общепринятые термины и упоминаются проектные работы. Перейти на следующий уровень квалификации можно за 3–12 месяцев.
Кир Дергачев
Руководитель разработки в Нетологии
В профстандарте основной рост идёт по траектории зоны ответственности. Junior (3-я категория) отвечает за небольшую единицу кода, вроде модуля системы, может её запустить, проверить работу. Он умеет применять алгоритмы для реализации описанных функций. Middle-разработчик (категории 4–5) пишет тесты, применяет шаблоны проектирования и выходит за рамки модулей, может базово проектировать их взаимодействие. Также в документе сделан акцент на коммуникацию с заказчиком, оценку сроков, — в общем, предсказуемость работы здесь важна. Уровень senior (6) уже включает как архитектурные инструменты, так и работу с командой.
Дальнейшее направление для профессионального развития разработчика можно найти в профстандартах «Архитектор программного обеспечения» и «Руководитель разработки программного обеспечения».
В целом профстандарт довольно наглядно показывает три рычага, продвигающих программиста по карьерной лестнице: качество кода, навыки коммуникации и хард-скиллы помимо кода.
Мы заглянули в айтишные сообщества и посмотрели, сильно ли менялась позиция самих программистов в последние годы и как они сами видят различия между новичками и профи. В итоге выяснили два интересных момента: во-первых, нынешний профстандарт весьма адекватно отражает позицию профессионального сообщества, во-вторых, эта позиция не особенно поменялась за последние пять лет.
Качество кода и другие хард-скиллы
Пять лет назад Стивен Бёрнс, старший разработчик с опытом работы более 25 лет, довольно точно описал различия между кодом джуна и сеньора.
Стивен Бёрнс
Разработчик в Magentus Practice Management
Код джуна
Обычно код работает ровно до тех пор, пока пользователь или система действуют именно так, как ожидается.
Это упрощённый код, который довольно легко читается при первой итерации. Не учитывает типичные сбои. К третьей или четвёртой итерации, особенно если команда разработчиков придерживается методологии Agile/Scrum, расшифровать код становится уже непросто. Обычно он всё ещё напоминает скрипт.
Если над фичей работало N джунов, возникает ощущение, что на самом деле над фичей работало >=N разработчиков: код часто оказывается разнородным. В нём просматривается эго каждого разработчика.
Изменения, вносимые в фичу (или рефакторинг кода), обычно приводят к обновлению и исправлению множества тестов.
Код сеньора
Код легко понять. Его легко читать, ведь сеньор знает, что бо́льшую часть времени разработчики занимаются именно чтением кода. Даже если над кодом работало несколько человек, кажется, что его написал один программист.
В зависимости от сложности фичи код содержит соответствующие абстракции и узнаваемые паттерны, которые действительно возвращают вас к нужной точке.
Код единообразный.
Код учитывает сценарии типичных сбоев. Например, в таком коде могут быть заложены проверка данных на входе и выходе, сценарии работы в случае краткосрочных сбоев в сети или базе данных, непредвиденных действий пользователя или сомнительных сторонних API. Суть в том, что прагматичный сеньор учитывает распространённые сбои, но не стремится изобрести палочку-выручалочку на все случаи жизни.
Если важна масштабируемость, код не слишком много взаимодействует с БД или сетью.
Тестовый охват высокий, но не стопроцентный. Тесты помогают при рефакторинге и внесении изменений или расширении до актуальной реализации.
Четыре года назад Шейн Штебнер, занимавшийся разработкой с восьмидесятых, сравнил квалификацию разработчиков с аркой: простой код джуна постепенно усложняется, двигаясь к верхней точке дуги, в которой находится абстрактный код мидла. Из этой точки начинается движение в обратном направлении: чем ближе к сеньору, тем код проще и элегантнее.
Шейн Штебнер
Главный инженер в Office Depot, LLC
Говорят, разработчики развиваются дугообразно, стартуя с самого простого кода.
Джуны начинают с простого кода, потому что никакого другого кода не знают. Долго пишут код, потому что постоянно ищут подходящие примеры, и переписывают написанное.
Опытные мидлы поднимаются к вершине дуги: всё у них абстрактное и напыщенное, ибо они стремятся к совершенству. Именно на этом этапе они приходят и к максимальным затратам времени на любой проект, и, по их собственному мнению, к виртуозному мастерству.
Сеньоры видят, сколько у них работы по сопровождению кода, насколько низко ценят их труд, как часто их шедевры отбрасывают в сторону, как часто срывают сроки, как приходят и уходят модные языки и фреймворки. В результате они вырабатывают буддистское отношение к жизни: баланс высококачественного кода и разумной скорости.
Давайте посмотрим более подробно, что имеет в виду Шейн.
У джунов часто получается разнородный код. Это не влияет на удобство использования, но это очевидный косяк. Они учатся так интенсивно, что не успевают выработать формат, которого хотели бы придерживаться. Повторяются, потому что не до конца восприняли идею повторного использования компонентов. Пишут всё в одном файле, потому что ещё недостаточно хорошо разобрались в объектно ориентированном программировании. Даже если джуны используют контроллер, как правило, они укладывают всю логику в один или два метода. То, что они создают, работает на первый взгляд, но не выдерживает вариаций входных данных. Их код не поддаётся изменениям: у джунов стандарты качества растут так быстро, что при каждом изменении приходится переписывать его заново. Они могут добиться кое-каких результатов, но часто пробуксовывают. Комментарии, которые джуны выдают, иногда ценные, а иногда бессмысленные. Они могут прокомментировать: /** Сохраните это */ $this->save; или /** Важно, потому что это предотвращает ошибку X */.
У опытных мидлов суперабстрактный код, до степени абстрагирования абстракций. Обычно они стремятся к повторному использованию любой мелочи, даже если её придётся использовать всего дважды. Стараются прокомментировать 100% фрагментов кода. Чтобы найти ошибку, готовы проштудировать 25 классов. Отлично справляются с отдельными задачами, но на целый проект у них уйдёт слишком много времени. А в коллективе зачастую они так заняты разговорами о соглашениях, плагинах и современных фреймворках, что работа вообще не движется. Сеньоры встречаются «в естественной среде обитания» довольно редко, так что мидлы чаще всего сталкиваются по работе с другими мидлами или джунами, и от этого им кажется, что они на вершине успеха.
У сеньора однородный, простой код, абстрактный в той мере, в какой это нужно для сопровождения кода. Возможно, глядя на такой код, мидл бы поворчал, но сеньор знает, что лучше не усложнять. Он решает поставленные задачи оптимальным образом. Добавляет блоки документации ко всем классам и методам, но ограничивается только полезными комментариями. Использует описательные понятные соглашения об именовании переменных, методов и классов. Понимает, что каждый файл, строка, символ — это ответственность, а быть кратким — это достоинство. Чем меньше кода, тем меньше объёмы тестирования, сопровождения, отладки, рефакторинга и переписывания.
Два года назад Скотт Биддл, старший разработчик с опытом работы более 20 лет, так описал разницу между джунами, мидлами и сеньорами:
Скотт Биддл
Старший дата-инженер в Acxiom
Самый доходчивый способ объяснить разницу — это посмотреть, какой вклад в работу вносят разработчики разных уровней.
Джун способен справиться с техническими задачами по написанию кода, но его всё время нужно направлять. Ему нужно объяснять, как решить ту или иную задачу, рассказывать о стратегических подходах, давать инструкции о процедурах и методах работы команды. Да, он вносит свой вклад, но этот вклад меньше, чем у мидлов и сеньоров, которые тратят на джунов время и силы, подтягивая их «успеваемость».
Мидл автономен. Его начальник, тимлид или руководитель проекта может сказать: «Скотт, вот для тебя задачка». Мидлу дают ТЗ, ставят сроки, и он приступает к работе. Мидл вносит больший вклад, чем джун, и за редкими исключениями не отнимает время у других разработчиков.
Вклад сеньора куда заметнее. Ему говорят: «У нас тут задача, придумайте, как её решить», «Нам нужно перепроектировать и переделать крупную систему» или «Чтобы хоть что-то получилось, нужно руководить нашими джунами», — и сеньор просто идёт и делает всё это. Он вносит большой вклад, лично или с привлечением других сотрудников.
Если с любой задачей, которую ставит перед вами команда или начальник, вы способны справиться практически без подсказок, вы, очевидно, мидл. Если же вы сами ставите задачи и/или помогаете остальным выполнять их, вы скорее сеньор. Директора и вице-президенты компании знают сеньора в лицо и по имени и напрямую обращаются к нему для решения задач.
Софт-скиллы и сфера ответственности
Практически в каждой дискуссии о квалификации программиста рано или поздно поднимается тема софт-скиллов и зоны ответственности: чем выше квалификация разработчика, тем важнее в его работе навыки коммуникации и тем больше ответственности он на себя берёт.
Маркус Мальберг подметил различия между джунами, мидлами и сеньорами через их реакции на те или иные рабочие моменты.
Маркус Мальберг
ИТ-архитектор в dacoso GmbH
По сути, всё сводится к перспективам и готовности принимать на себя ответственность, вне зависимости от организационной структуры компании.
Хотя статус сеньора связан с опытом работы, быть или не быть сеньором — это, скорее, состояние души. Я видел ребят, которые проработали всего пару лет, но они настоящие сеньоры, и тех, кто и после 20 лет не дорос до мидла.
А вот мнение сегодняшнего дня:
Павел Комягин
Тимлид разработки внутренних продуктов в Нетологии
Для джуна нужно разбивать задачи на максимально мелкие куски с подробным описанием, чтобы он, решая их, нарабатывал кругозор. Ему надо много гуглить, пробовать и только потом обращаться за помощью к более опытным коллегам.
Мидл уже наработал кругозор в решении разных типов проблем, он может брать задачи средней сложности и делать их без сторонней помощи. Я считаю, что на мидлах держится разработка во многих компаниях. Это люди, которые пишут значительную часть кода. Но часто они не задаются вопросом, для чего это нужно, не предлагают альтернативные решения.
А вот сеньор — это источник бесконечных вопросов в мире разработки. А зачем мы это делаем? А точно надо делать? А чего вы хотите добиться? А точно надо так? Смотрите, можно ещё вот так. Давайте выберем самое дешёвое или быстрое решение. А если к нему приходят с абстрактной проблемой, он может выяснить все детали у нужных людей, спроектировать, декомпозировать, отдать мидлам (и что-то джунам) и принять результат.
Часики тикают, а различия между джунами, мидлами и сеньорами не меняются
Как видно из нашей подборки мнений, представление о принципиальных различиях между джунами, мидлами и сеньорами почти не меняется с годами. И пять лет назад, и сейчас джуны остаются новичками, которым доверяют несложные задачи, которых опекают, учат и поддерживают. Мидлы — рабочая сила, на которую приходится основная нагрузка по разработке кода. Сеньоры же отличаются от джунов и мидлов не только отточенными навыками программирования: они способны видеть всю картину целиком, выполняют функции наставников и умеют грамотно взаимодействовать с руководством и заказчиками.
Вспоминается фраза «Постоянство — признак мастерства». Если встретили дельный совет о профессиональном развитии, опубликованный опытным разработчиком пять или семь лет назад, смело берите его на вооружение: срок годности у него ещё не закончился.
Ближайшие курсы по программированию:
Топ бесплатных курсов и занятий:
День открытых дверей магистратуры «Финансовые технологии и аналитика»;
1С-программист: первые шаги в профессию;
День открытых дверей магистратуры «Инженерия данных»;
Комментарии (11)
ManGegenMann
07.05.2024 15:10+1Чет вместо сениора какой-то линейный менеджер. Почему кто-то решил что старший инженер должен участвовать в управление разработкой.
Кстати компания всегда нанимает джунов. Даже если к вам пришёл 20+ лет СТО он пол года будет хуже вашего джуна с 1 годом разбираться в проекте и ваших процессах.
M_AJ
07.05.2024 15:10Почему кто-то решил что старший инженер должен участвовать в управление разработкой.
Потому что все хотят "два блюда по цене одного"
Gorthauer87
07.05.2024 15:10+1Так мидл и сеньор даже на процессе адаптации по разному себя проявляют и имеют разную скорость адаптации.
Вообще, если так подумать, то процесс роста джуна в мидла это по сути тоже есть процесс адаптации, просто более долгий и сложный.
Filiber
07.05.2024 15:10+1уже как-то писал, но позволю себе процитировать еще раз своего друга-синьора (действителтно хорошего):
джкн не знает ничего.
миддл знает все.
а синьор опять ничего, но его это не е.ет :)
Fedorkov
07.05.2024 15:10+1На редкость толковая статья; обычно на эту тему пишут всякую чушь.
Я бы ещё добавил личные наблюдения.
В юные годы мне больше всего нравилось то, что я могу сам решать любые нужные мне задачи. До подключения к интернету это было особенно круто.
Позже я начал кайфовать от сложных задач и от сложных (порой переусложнённых) решений. Это верхняя точка арки, упомянутой в статье.
А сейчас больше всего ценю возможность приносить пользу пользователям и бизнесу. Ну и, разумеется, возможность использовать это как рычаг для повышения личных доходов.
ENRUStudio Автор
07.05.2024 15:10+1Вот могу сказать по себе, что это траектория движения не только в ИТ. Например, при изучении иностранного языка сначала радуешься, что вообще складываешь слова в предложения, потом начинаешь забадывать собеседников сложными грамматическими конструкциями, которыми нормальные люди вообще не говорят, потом начинаешь с заботой о собеседнике говорить просто и понятно :)
Fedorkov
07.05.2024 15:10+1У меня так с русским было. В какой‑то момент (в студенческие годы) начал кайфовать от замысловатых оборотов и употреблять их не к месту, а потом как‑то само прошло.
А вы не встречали пример какого‑нибудь автора или блоггера, который по мере совершенствования английского перестал понтоваться и начал просто «показывать пальцем, где зюйд‑зюйд‑вест»?
Alexander_Front-end
07.05.2024 15:10Интересная статья, про арку прям попадание в моем случае. Пока читал, все на себя примерял)
astypalaia
Где-то на просторах яндекса довольно подробно (но кратко) описаны ключевые различия между джунами, мидлами и сеньорами. В системе координат HR, т.е. приеме в штат сотрудника определенного уровня каким требованиям он должен соотвествовать в зависимости от грейда. Но в целом различие сводится к одному: джун мыслит категориями задач, он решает задачи (2 + 2 = ?). Сеньор мыслит категориями проблем, он решает проблемы клиентов (рассчитать месячную прибыль).
Ivan22
это в РФ, где на аналитиках экономят. На западе те же сеньеры с 20-летним стажем точно также мыслят своими задачами, и в гробу видали проблемы клиентов, пусть с ними BA общаются