Чем отличаются junior, middle и senior разработчики? Как происходит переход между этими уро

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

Кто есть кто

Упрощенно различие между уровнями разработчиков можно описать так:

  • Junior — совсем новичок, может мало и часто с чужой помощью;
  • Middle может многое и сам;
  • Senior помогает всем, руководит или является гуру в одной из сфер. Кроме способности решать задачи, в разработчике для нас важны знания и вовлеченность в жизнь команды и продукта.

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

Junior разработчик — вчерашний студент или даже школьник, имеющий случайный набор начальных навыков, который мы сочли достаточным, чтобы дать человеку шанс. Готов выслушивать критику и много учиться. 
В коммерческой разработке это означает, что человек может решать простейшие задачи, более сложные задачи он может выполнять с помощью и под контролем опытного коллеги. Давать такому разработчику сложные задачи и ждать от него разумного исполнения (как по качеству, так и по срокам) нельзя. Код junior-разработчика нуждается в постоянном ревью.

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

Senior разработчик — ментор, евангелист. Ему можно поручить новый продукт или направление. Он может руководить подразделением (teamlead) или является очень крутым разработчиком (techlead). Партнер компании. Он понимает, для кого делается тот или иной продукт. Кто, что и как должен делать. 
Такой специалист знает несколько языков программирования, может с нуля реализовать архитектуру проекта, выбрать стек технологий, подходящий под техническое задание с учетом будущего развития проекта. Он постоянно изучает новые технологии и решения, появляющиеся в индустрии, сравнивает инструменты и находит плюсы и минусы каждого решения. При решении поставленных задач программист видит общую картину, не привязывается к каким-то конкретным технологиям, а выбирает наиболее подходящие для задачи, и решает ее с учетом дальнейшего развития проекта и его требований.

Немного лирики

Некоторые компании внутри этих понятий тоже вводяи разделение. Кроме Junior, есть Junior+ и Junior++. Аналогично с Middle, а с Senior — нет. Senior он есть, и все. Почему? «Он крут! Сам все решает и делает. Имеет авторитет в команде и вне» — так закреплено у нас. Зачем это делать? Толком вам никто не ответит. Так что прочтите и забудье – это бред. Есть только Junior, Middle и Senior. Все добавочные плюсы и минусы только способы скрыть почему на самом деле Вася получает больше Пети.

Как происходит смена уровня

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

Для развития своих навыков необходимо: изучать новые языки и подходы программирования (ООП, функциональное программирование), читать исходный код популярных проектов (находить плюсы и минусы представленных решений), изучать разные СУБД, NOSql решения, механизмы кеширования, очереди и тд.

Как это происходит? Вырос Junior или нет, решают ментор и тимлид. Решение о переходе с уровня Middle на Senior принимает Project Manager или СТО. Предусмотрено также, что в этом могут участвовать и другие разработчики уровня Senior: один из них выдвигает коллегу, а окончательное решение принимают расширенным составом.