🧔📈 Повышение до тимлида: дорожная карта

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

Это перевод статьи, автор оригинала Bohdan Balov.

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

Последние 2.5 года я занимаюсь в основном разработкой фронтэнда. Так что данные приведены с этой точки зрения.

Налейте чашечку кофе и вперёд!

Исходные условия

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

Также вам нужно быть проактивным, а не реактивным. Это предполагает, что вы готовы нести бремя ответственности. Вы способны анализировать задачи и общаться с людьми из бизнеса. Каждое ваше предложение подтверждается чёткими обоснованиями.

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

Вы подходите под эти критерии? Тогда вы готовы!

Например, я в основном специализируюсь на библиотеке React и всём, что связано с ней. Также у меня есть большой опыт работы с PHP и кое-какой опыт в Node.js. Так что у меня достаточно опыта, чтобы начать новый проект или поддержать уже существующий.

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

Теперь мы подробно рассмотрим необходимые технические и коммуникативные навыки. Готовы?

Технические навыки

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

Коммуникативные навыки тоже важны. И мы рассмотрим их чуть позже.

Парадигмы программирования

Объектно-ориентированное программирование. Вы должны быть профи в этой теме. И это касается не только принципов ООП. Вы должны разбираться во многих других вещах:

  • шаблонах и принципах дизайна;
  • ООП в духе Smalltalk и Erlang;
  • плохих и хороших практиках;
  • модели акторов как альтернативе ОО;
  • Elegant Objects.

Ознакомьтесь с книгой «Шаблоны проектирования» «банды четырёх (GoF)». Это очень полезная вещь, раскрывающая некоторые из этих тем на хорошем уровне. Вот хороший сайт о шаблонах: patterns.dev. И ещё один ресурс о шаблонах JavaScript.

Функциональное программирование. Это экзотика для многих современных разработчиков. Но оно становится всё более и более популярным в последние несколько лет, особенно во фронтэнде. Вот темы, которые вы должны знать как ведущий программист:

  • принципы и шаблоны ФП;
  • лямбда-исчисление;
  • разные типы полиморфизма;
  • параллельные вычисления.

Я настоятельно рекомендую эту книгу профессора Фрисби.

Реактивное программирование. Не очень важное, но настоятельно рекомендуемое знание. Посмотрите RxJS и Akka.

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

Протоколы обмена данными

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

  • IP, TCP, UDP, TSL;
  • REST;
  • GraphQL;
  • WebSocket;
  • поллинг;
  • модель зрелости Ричардсона;
  • API.

Безопасность

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

Давайте рассмотрим самые важные:

  1. OWASP Top 10;
  2. Аудит безопасности информации;
  3. Техники безопасности, относящиеся к вашему стеку технологий.

Это важный блок. Пожалуйста, не пренебрегайте им.

Проверка прав доступа

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

Вот минимальный список того, что вам нужно знать:

  1. Интернет-производительность;
  2. Web Vitals;
  3. Атрибуты качества;
  4. Инструменты (например, Google Lighthouse);

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

Среды разработки

Как ведущий программист вы должны уметь подобрать правильный инструментарий. Например, что выбрать: React, Angular или Vue? Или что-то ещё? Это важный момент в создании приложения, так как он может ускорить или замедлить процесс разработки.

Вот некоторые критерии, которые вы можете использовать для принятия решения:

  1. Сообщество и популярность.
  2. Скорость обучения.
  3. Встроенные функции.
  4. Универсальность.
  5. Производительность.
  6. И так далее...

Вы можете использовать такие сервисы, как Technology Radar и The State of JavaScript.

Архитектура

Это большой блок. И невозможно вместить всю ценную информацию в несколько предложений. Я приведу наиболее важные моменты, которые помогут вам начать это увлекательное путешествие:

  1. Атрибуты качества.
  2. Нефункциональные требования.
  3. MVC, MVP, MVVM.
  4. Бэкенд с независимой обработкой транзакций.
  5. Бессерверная архитектура.
  6. Микросервисы.

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

Вот отличная статья Мартина Фаулера о микро фронтэндах.

Тестирование

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

  1. Шаблоны тестирования (например, пирамида тестирования).
  2. Принципы тестирования (например, FIRST и AAA).
  3. Практики тестирования (например, TDD, BDD).
  4. Тестирование элементов и комплексное тестирование.
  5. Тестирование системы и приёмочное тестирование.
  6. Ручное тестирование.

Качество

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

Давайте углубимся в следующие темы:

  1. Качество кода и качество продукта.
  2. Статический анализ кода.
  3. Рефакторинг и технический долг.
  4. Рецензирование кода.

CI/CD

Давайте начнём со следующих основных тем:

  1. Непрерывная интеграция.
  2. Непрерывная доставка.
  3. Непрерывное развёртывание.

После этого вы можете начать изучать стратегии ветвления кода. Вот некоторые из них:

  • GitHub Flow;
  • Git Flow;
  • Feature Branch Workflow;
  • Release Flow;
  • One Flow;
  • Разработка на основе trunk.

После этого я бы посоветовал вам изучить стратегии выпуска.

Коммуникативные навыки

Это то, что по-настоящему отличает старшего и ведущего программиста.

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

  1. Организовывать разработчиков в группы.
  2. Общаться с заказчиками.
  3. Обеспечивать разработчиков задачами.
  4. Консультировать разработчиков в течение всего процесса разработки.
  5. И так далее...

SDLC

Эта аббревиатура означает «жизненный цикл разработки ПО». Как ведущий программист, вы будете принимать участие в организации процесса разработки. Поэтому вам надо знать, что такое SDLC.

Вот какие темы вам нужно освоить в этом блоке:

  1. Waterfall.
  2. Agile.
  3. Scrum.
  4. Kanban.
  5. Lean.
  6. DoR & DoD.

Планирование работы

Давайте начнём с методов оценки задач:

  1. Относительные единицы сложности.
  2. T-Shirt Estimation (Размеры футболки).
  3. Покер планирования.
  4. PERT.
  5. Оценка от частного к общему и от общего к частному.

Также я бы порекомендовал вам изучить «Оптимизацию рисков». Это не обязательно, но было бы отличным пунктом в вашем портфолио.

Также я думаю, что было бы уместным добавить следующие темы в этот раздел:

  1. Делегирование задач.
  2. Мотивация.
  3. Тайм-менеджмент.
  4. Адаптация новых сотрудников.
  5. Работа с конфликтными ситуациями.
  6. Управление эффективностью работы сотрудников.

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

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

Удачи!

***

Материалы по теме

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ