Как стать разработчиком-сеньором

0
984
views

Перевод статьи «How To Become A Senior Developer».

Разработчик-сеньор

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

Кто такой сеньор?

Разработчик-сеньор:

  • Компетентен в основных технологиях, используемых в его компании.
  • Обычно имеет какую-то специализацию.
  • Имеет практический опыт решения высокоуровневых проблем и проектирования.
  • Должен приобрести солидный стаж (пройдя при этом путь проб и ошибок).
  • Умеет создавать полноценные «жизненные» решения.
  • Активно наставляет и обучает других разработчиков в своей команде.

Я бы добавил, что последнее – лучший показатель того, что кто-то является сеньором.

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

Становимся взрослыми?

Разработчик-сеньор уже "взрослый".

В своей статье о разработчиках-мидлах я писал, что карьера мидла как бы входит в переходный, подростковый возраст.

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

Во многом это потому, что он перешел к стадии «плавали – знаем».

Разработчик-сеньор уже набил свои шишки и извлек из этого уроки. У него в жизни уже было много экспериментов, и это заложило прочный фундамент для его теперешнего положения.

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

Примените эту аналогию к разработчику программ, и вы прочувствуете, кто такой разработчик-сеньор.

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

Они уже узнали, что работает, что не работает, что может быть слишком абстрактным, недостаточно практичным, полезным, эффективным и т. д.

Сеньоры уверены в том, что они знают, потому что за этими знаниями стоит их опыт. Но они также осознают тот факт, что есть множество вещей, о которых они не знают.

Ширина и глубина

Разработчик-сеньор должен обладать и широкими, и глубокими познаниями

Вероятно, вы знакомы с идеей о том, что навыки разработчика-сеньора как бы имеют форму буквы «Т».

Это означает, что у них есть понимание основ во множестве тем (это верхняя, горизонтальная часть буквы «Т»). Но есть также одна (или больше одной) тема, в которой они обладают очень глубокими познаниями и сильными навыками.

Разработчики-сеньоры имеют очень обширные знания относительно инструментов и техник, необходимых для решения конкретных задач.

Ширина

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

Мне никогда не случалось использовать event sourcing в готовом к выпуску приложении. Но я знаю, какого рода задачи он решает.

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

Итак, это ключевая характеристика разработчика-сеньора:

Сеньоры знают доступные решения распространенных/повторяющихся задач программирования.

Глубина

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

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

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

Дзен

Дзен

Если вы еще джуниор, вы все еще учитесь создавать программы. Например, осваиваете следующие вещи:

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

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

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

Разработчик-сеньор для выбора пути к правильному решению использует распространенные шаблоны.

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

Вам просто нужно большое количество практики, нужно проделать все необходимые вещи столько раз, чтобы они просто впечатались у вас в голове!

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

Примечание: если ваша работа не слишком сложная, скорее всего, ваш рост не будет быстрым.

Пример

Разработчк-сеньор должен браться за сложные задачи

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

Мне пришлось работать с очень крупной кодовой базой, получая навыки практической работы и с фронтендом, и с бэкендом, и в программировании баз данных, и во многом другом!

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

Поскольку я отвечал за всю веб-часть этого проекта, это очень способствовало моему росту. Я так много узнал! Включая то, как не надо делать.

В этом проекте была очень сложная бизнес-логика (она уже была разработана). Понять ее и управлять ею было очень тяжело. Для этого мне пришлось искать соответствующие шаблоны и инструменты.

Я провел много времени (в том числе и своего свободного времени), изучая такие темы как шаблоны проектирования, архитектурные стили и domain driven design.

Когда я начал применять эти подходы, шаблоны и принципы в своем коде, другие разработчики начали подходить ко мне и задавать вопросы по этим темам!

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

Что я могу посоветовать

Разработчик-сеньор должен больше читать

Вот несколько советов относительно того, как стать разработчиком-сеньором:

  • Определите, какой технический стек вы хотите изучить поглубже, в какой области хотите приобрести сильные навыки.
  • Читайте ежедневно! (Таким образом вы усовершенствуете свои навыки чтения, а также будете учиться каждый день).
  • Из тех проектов, что вам предлагают, старайтесь браться за действительно сложные и при этом значительные.
  • Помните, что на приобретение опыта нужно время – другого способа нет!
  • Помните о концепции Т-образного набора навыков.
  • Создайте схему своих навыков и определите, какие из них вы хотите особенно усилить, а в каких вам хватит и базового уровня.
  • Что касается навыков, которые вам нужны на базовом уровне, самое главное понять, какие задачи они помогают решать.
  • Чтобы усилить отдельные навыки, подумайте о поиске наставника или высококачественных учебных материалов (вот хорошая платформа).
  • В большинстве сфер деятельности большую пользу приносит знание шаблонов проектирования (опять-таки, главное – знать, какие задачи каждый из них решает).
  • Если ваша текущая работа не обеспечивает вам должное количество вызовов, подумайте о возможности сменить ее на более сложную.

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

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