Если Junior занял место Senior-разработчика без спросу, то случится увольнение. Вот и отсекли один сценарий.
А теперь серьёзно. Многие младшие разработчики спят и видят, как стремительно делают карьеру, но не всегда отдают себе отчёт в знаниях, навыках и зонах ответственности. Поговорим о том, с чем столкнётся среднестатистический Junior на позиции Senior-программиста, чтобы «младшенькие» точно знали, к чему готовиться.
В чём разница между Junior и Senior?
В плане знаний языка и другой теории, разницы между джуном и сеньором может и не быть. А вот практические навыки, опыт применения своих знаний при решении различных рабочих задач у джуниоров могут полностью отсутствовать. Поэтому джуниору ставится задача и даются подробные объяснения, как её нужно сделать. Результаты работы джуна также проверяются более опытными коллегами: сеньор-программистом или тимлидом.
Как правило, задача проходит несколько итераций, в ходе которых джун переписывает и улучшает свой код. Когда разработчик-джун научится работать самостоятельно, он может претендовать на переход в мидлы. Работу мидл-специалистов уже не нужно контролировать, но они всё ещё нуждаются в объяснениях, как сделать ту или иную задачу.
Сеньор-разработчик отлично разбирается в своей части проекта. Он понимает, что и почему нужно делать в данный момент, видит ошибки и знает, как их можно исправить. В отличие от джуна, он умеет общаться с коллегами, объяснить им, что, как и зачем нужно делать в проекте. Словом, сеньор работает на высоком уровне абстракции и видит всю картину в целом.
Зоны ответственности Junior и Senior разработчиков
Задача джуна — писать код, а задачи сеньора — всё остальное, связанное с реализацией проекта. Сеньор помогает коллегам и может руководить работой подразделения. Он должен уметь решать все возникающие перед командой задачи, выбирать подходы и понимать, как будет реализован конкретный этап проекта.
Как правило, джун ответственен за небольшие части функционала, а сеньор может отвечать за весь продукт.
Что запорет Джун, сидя в кресле Сеньора?
Из-за отсутствия опыта джун запорет всё, что можно запороть. Просто потому, что не знает, где именно ямы на бильярдном столе. Код самостоятельно джун писать не умеет, проекта глубоко не знает, командами управлять не может. Поэтому с одинаковой вероятностью он провалит любой сектор ответственности сеньор-программиста.
Отличие в мышлении и представлении того, как всё устроено:
- Junior, скорее, работает над локальной задачей, его/её знания часто не позволяют использовать тот функционал который находится в библиотеках проекта.
- Джуны нередко реализовывают функциональность с излишним дублированием кода, зачастую выбирают неподходящую структуру данных. Взаимодействие с другими частями проекта или с другими проектными решениями вызывают затруднения.
- Коммуникация джуниора может хромать, так как присутствует неуверенность в том, когда и что нужно спрашивать, чтобы в каком-то смысле не показывать неполноту своих знаний.
Junior больше сосредоточен на выполнении своих задач, часто работает над исправлением дефектов, мало влияет на развитие проекта, больше коммуницирует с другими разработчиками.
Senior же способен самостоятельно выполнять задания, помогает менее опытным сотрудникам, способен проанализировать задачу и предоставить варианты решения с развёрнутым выводом преимуществ и недостатков каждого из решений.
Прежде чем обсуждать разницу между должностями, стоит взять в расчёт, что от компании к компании понятие «Senior» может сильно отличаться. Если речь о небольшой компании, где стандарты и требования разработки на невысоком уровне, то, по сути, Junior может быть на позиции Middle или даже Senior. Но если речь о компании другого уровня, например Yandex, то таких прецедентов там не допускают.
У меня был опыт, когда я после получения диплома и переезда в Москву устроился на позицию Senior, хотя до этого работал на позиции Junior. Получилось так из-за того, что эта компания была интегратором и завышала должности разработчикам, чтобы продать их услуги по более выгодной цене. Senior разработчиками же, по факту, являлись люди уровня архитектора.
Главные отличия позиций
Если рассмотреть вопрос на уровне мирового рынка, то разница существенная. Junior — это такой же разработчик, как и Senior: это не стажёр, а человек, который может выполнять ту же работу, но с другой эффективностью. Также у него нет годов опыта и ответов на многие вопросы, из-за чего постоянно нужно корректировать работу и помогать ему разобраться в общепринятых практиках.
Зоны ответственности Junior и Senior программистов
Зоны ответственности Junior и Senior отличаются гораздо сильнее, чем навыки. Обычно Senior решает архитектурные вопросы, берёт на себя переговоры и декомпозирует, распределяет работу. Junior же занимается задачей и постоянным самообразованием.
Что случится с Джуном на месте Сеньора?
Если предположить, что Junior оказался в кресле Senior, то с огромной вероятностью упадёт эффективность всей команды, так как коммуникация, переговоры не будут проходить столь эффективно. Также замысловатые технические задачи вряд ли будут выполнены корректно, и это повлечёт за собой проблемы. В целом, такая смена кресел происходит редко, и если происходит, то с супервизией от старших коллег.
Есть 4 типа программистов по уровню их знаний, объёму ответственности и выполняемых задач: junior, middle, senior, team lead.
Сейчас в IT-индустрии требования к junior-специалистам довольно высокие. Они уже на старте должны много знать: язык JS, библиотеки React или Angular. И уметь быстро и качественно выполнять небольшие задачи.
При этом часто джуниорам нужна помощь от мидла или синьора. Могут появиться вопросы по архитектуре, и тогда нужно объяснить, как всё устроено в проекте. Абсолютно естественно давать начинающим специалистам чуть больше времени на выполнение каких-то задач.
Но важно, чтобы вопросы касались именно проекта, а не языка программирования. Подразумевается, что эти знания на высоком уровне.
Middle-специалист обычно делает задания самостоятельно и без вопросов. В том числе тяжёлые. Изредка, чаще всего на сложных проектах, у него могут появиться вопросы по коду и архитектуре. И тогда он консультируется с синьором. То есть middle может выполнять все задачи, но иногда ему требуется помощь senior-специалиста.
Senior может сам построить архитектуру проекта. Он знает разные подходы. Он может выполнить почти все задания. Вопросы у него возникают крайне редко.
Team lead также знает всё, обладает опытом и плюс к тому понимает, как работают другие программисты. Он может организовать небольшую команду программистов и руководить ею. Умеет понятным языком отвечать на вопросы джуниора, чтобы он сразу понял суть.
В чём разница между джуниором и синьором?
Разница между ними колоссальная.
Junior выполняет задачи простого и среднего уровня сложности. Но он не занимается архитектурой проекта. У него могут быть вопросы по коду. Junior обычно входит в программирование с конкретным языком и фреймворком. У junior’a опыт составляет обычно 2 или 3 года.
Senior может сам организовать архитектуру проекта и знает, как всё работает. Это он выбирает правильный стек, сходу добавляет или удаляет какие-то фичи. При этом параллельно занимается менторством джуниоров и даёт полезные рабочие советы миддлам.
У senior-специалиста больше опыта, знаний. Он понимает все шаги разработки проекта, прошёл все уровни. Бывал в разных ситуациях и знает их изнутри. Зачастую senior знает несколько языков программирования. Если это frontend developer, у него обычно есть опыт и на стороне backend.
Senior мог войти как PHP-программист и впоследствии стать либо Java, либо JavaScript девелопером. У него обычно не менее 5 лет опыта программирования. Senior кодил на других языках и знает такие фичи, которые junior’у и не снились.
Зоны ответственности
У junior’a небольшая зона ответственности — сделать задание и понимать проект. Но даже если у него не получится с первого раза — не проблема. Большого спроса с него не будет. Объяснят, подскажут и дадут ещё попытки и время на выполнение.
Но у senior’ов очень много задач, ответственности. Они строят архитектуру, руководят проектом, менторят младших специалистов. Бывает так, что senior сам является создателем проекта. И на нём же лежит основная ответственность за проект. Если что-то идёт не так — он может сходу поменять и стек и всё остальное, что посчитает нужным.
Плюс, не везде есть тимлиды. Если команда небольшая, то синьор в ней выполняет и эту роль. Это человек, который решает все проблемы, если что-то не работает. Если senior не может решить проблему — это серьёзный вызов для развития проекта.
Зачастую получается так:
- Senior’ы отвечают за проект.
- Middle-специалисты выполняют основные задачи по написанию кода.
- И junior’ы, которые делают рутинную работу.
У каждого типа программиста свои задачи. Но вся ответственность на senior-специалистах, так как менеджеры и компания полагаются на них.
Какие задачи свалятся на джуниора
Я работал в компании на позиции senior-разработчика и был team lead’ом. У меня в команде было 4 junior’а. Поэтому могу представить, что могло бы получиться, если неподготовленный программист внезапно перескочит на несколько уровней выше.
Но тут всё очень сильно зависит от человека. Я бы разделил джуниоров на несколько типов:
- Те, кто знают, что ничего не знают. Они задают много вопросов, всё внимательно изучают. И только потом приступают к выполнению задач.
- Инициативные и перспективные. Они быстро учатся и осваивают навыки. Всем интересуются и стремятся к самостоятельному развитию. Такие специалисты могут стать синьорами за 2-3 года, и ещё раньше — middle-специалистами.
- Те, кто не знают, что не знают. Это самый страшный тип. Они начинают писать код, не задавая вопросов.
Однажды в моей команде был представитель последнего типа. Такие люди хотят выполнить задачу любой ценой. Им всё равно, как. Они даже не будут спрашивать, правильно ли они действуют.
Тот junior копировал и вставлял код из открытых источников. Опытному программисту это всегда видно. И самое плохое — даже если код работать не будет, либо будет работать, но криво — они отправят его в продакшн и им будет всё равно. Для них важно, что они «сделали». А если такой «грязный» код попадает в проект, то есть риск, что он может даже развалить его.
Поэтому перед тем, как что-то сделать, всегда важно задавать вопросы более опытным коллегам. Senior и middle-специалисты скептически относятся к тем junior’ам, которые редко спрашивают их о проекте и задачах.
Не надо бояться спрашивать. Потому что в работе программиста это предельно важно. Если вы вдумчиво подходите к процессу, вас будут больше уважать.
Код должен быть чистым, а для этого junior должен:
- понять задачу;
- понять, как всё работает;
- начинать писать с правильным подходом;
- писать чистый код;
- задавать вопросы ментору.
И только после соблюдения всех этих условий запускать код в продакшн.
Джун не знает язык, не умеет выбирать и реализовывать алгоритмы, совершает много ошибок и не умеет находить их причины. Этих проблем лишён Мидл — т. е. более опытный разработчик.
Senior отличается от Мидла тем, что его опыт позволяет кроме работы в существующем коде и окружении, смотреть по сторонам и затаскивать новые технологии, а также менять основу существующих решений, вносить глобальные изменения в архитектуру или создавать масштабные решения с нуля.
Как правило, Джуны занимаются мелкими доработками существующего функционала — это помогает им узнать кодовую базу и постепенно переходить к более серьёзным задачам, учиться находить причины ошибок и избегать их. Сеньоры занимаются созданием новых крупных кусков, изменениями инфраструктурных частей приложения, миграцией на новые технологии и т. д.
Скорее всего, Джун не успеет совершить много ошибок, так как будет очень медленно разбираться/продвигаться, и за неделю с хорошей сеньоровской задачей не успеет сделать вообще ничего.
Отличия Junior-разработчика от Senior-разработчика
На мой взгляд, основное отличие Джуна от Мидла и от Синьора не столько в глубине знаний, сколько в степени неопределённости, с которой специалист может справляться, и величиной зоны ответственности. Джун, скорее всего, будет делать простые точно сформулированные задачи, именно поэтому ему достаточно знать базовые технологии. А Синьору задача может ставиться, например, так: «сделай, чтобы сайт открывался быстрее», «сделай этот раздел», «спроектируй архитектуру нового сервиса, выбери лучшее решение». Синьор должен уметь декомпозировать свою задачу, знать кучу смежных областей, таких как UI/UX, основы менеджмента, бэкенд, чтобы он смог общаться со специалистами и решать все возникающие вопросы, валидировать требования.
Зоны ответственности Junior и Senior разработчиков
Основная зона ответственности Джуна — свои задачи, ревью чужих задач по возможности. Синьор несёт ответственность не только за свои задачи, но и за целые проекты и смежные разработки. В его зону ответственности входят предложение новых технологий, найм, наставничество, анализ и оптимизация процессов в команде.
Какие задачи свалятся на Джуна, которого на неделю посадят в кресло Синьора?
На Джуна «свалится» много технических и архитектурных задач, менеджмента, коммуникации с клиентом. Велик шанс, что такой программист не сможет организовать работу в проекте, из-за этого разработчики начнут срывать дедлайны, создавать неподходящие решения. Скорее всего, Джун не сможет донести простым и понятным языком до клиента, что делает команда и почему. Пробелы в коммуникации могут вызвать конфликтные ситуации с заказчиком.
Выводы
Чтобы Junior-разработчику достичь высот Senior разработчика, необходимо приложить усилия. Не торопите события, а терпеливо пополняйте багаж знаний, беритесь за самые неприятные таски и на них оттачивайте своё мастерство. Как видите, на месте Сеньора из сладенького только зарплата.
И вот что, по мнению нанимателей, должны знать Junior-разработчики.