Как Java-разработчику расти в профессии: советы Алексея Мирютова
Алексей Мирютов — руководитель центра разработки Золотая корона/KoronaPay (относится к группе компаний «Центр Финансовых технологий»). В ЦФТ Алексей работает уже 8 лет, на его счету десятки успешных проектов.
В материале Алексей вместе с коллегами рассказывает о профессии Java-разработчика и советует, как расти профессионально.
Продолжаем цикл материалов про ИТ-специальности. Каждую из них описывает «типичный представитель» — опытный специалист. Мы надеемся, что цикл поможет школьникам, студентам, переквалификантам, джуниорам и сочувствующим выбрать специальность в ИТ, оценить свои перспективы или просто сверить часы с авторитетным коллегой. Можно обсуждать и дополнять материал в комментариях, чтобы сделать его ещё полезней.
Почему Java?
Java — это хорошая документация, в том числе по библиотекам и фреймворкам, кроссплатформенность, развитая инфраструктура. Простота языка и первоклассная его поддержка в IntelliJ IDEA тоже говорят в пользу Java.
Кроме того, есть преимущества с точки зрения профессиональной среды. Java-разработчики — это активное и развивающееся сообщество. В нашей компании, например, есть формат «ЦФТ-Тема». Это ток-шоу, воркшопы и лекции, где регулярно звучат темы Java и вообще бэкэнда. Кроме того, в KoronaPay есть сообщество бэкэнд-разработчиков, где обсуждаются вопросы развития продукта в части серверных компонентов, новые подходы, инструменты. И, конечно, участие в IT-конференциях — это тоже про сообщество.
Как выглядит работа Java-разработчика над проектом? Что делает джун, мидл и сеньор?
Джун делает те задачи, которые дают. Обычно они более-менее простые. Часто джун работает с помощью старших коллег.
Мидл делает типовые задачи самостоятельно, за ним уже никто не следит. Он сам понимает, когда нужно посоветоваться с более опытными сотрудниками.
В целом круг задач мидла примерно таков:
- участвует в проработке требований, декомпозиции задач;
- совместно с ведущими инженерами проектирует архитектурные решения;
- проектирует API;
- пишет код;
- делает code-review;
- менторит 1-2 джунов.
Сеньор решает системные задачи, часто касающиеся уже не одного, а кучи разных проектов, разбирается в деталях, при необходимости поддерживает весь цикл поставки ПО. Ключевое отличие сеньора в том, что он может прийти в незнакомое ему окружение, самостоятельно разобраться в процессе и делать в этом окружении задачи, в том числе системного характера.
Что касается рабочего дня сеньора, то тут сложно описать типичный распорядок. Разработка, проектирование, тестирование, общение, ревью, снова общение, участие в воркшопах, коучинг джунов — комбинировать это в течение дня можно как угодно.
Карьерные и зарплатные перспективы
Развитие возможно либо по технической линии, либо по управленческой, менеджерской.
По технической части рост идет за счет наращивания знаний, получения дополнительной ответственности. Ответственность заключается в том, что сеньор отвечает за выбранные технологии, архитектурные решения, декомпозицию работ — и все это как для собственных задач, так и для тех, которые делают мидлы.
В дальнейшем количество опыта переходит в качество, и специалист ориентируется уже в архитектуре проекта как таковой. Конечно, это требует не только знаний технологий, но и знаний в смежных областях (ОС, сети, кластеры и т. д.).
Рост по зарплате далеко не всегда связан именно с техническим развитием. Очень часто он связан как раз с дополнительной ответственностью. Когда ты показываешь, что можешь делать больше, появляется возможность говорить о повышении зарплаты с учетом этого.
Также нужно понимать, что личностный рост (и soft, и hard) и рост ответственности — разные вещи. Для любой организации первая часть интересная только в качестве пути ко второй, к ответственности, которая выражается в виде решения различных рабочих задач.
Чем больше классов задач в организации вы можете решать, тем вы ценнее как специалист в этой организации.
Соответственно, чем вы ценнее для компании, тем проще вам договариваться по самым различным вопросам — тут и гибкий график, и интересные задачи, и выстраивание определенных процессов, и поддержка в сложных жизненных ситуациях.
Как мидлу вырасти до сеньора? Какими hard skills владеет сеньор?
Технический набор для мидлов и сеньоров примерно один и тот же. Разница в глубине знаний и способности их правильно применить. То есть важно уметь вовремя понять, что подходит для решения конкретной задачи, а что — нет.
Список важных hard skills сеньора:
- умение писать код (знания алгоритмов, структур данных, принципов ООП, паттернов проектирования);
- знание стандартных библиотек продукционного языка;
- знание современных принципов дизайна систем и кода за пределами выученных принципов ООП, SOLID, понимание, как раскладывать логику по MVC;
- знание UML, умение описывать решение задач через диаграммы;
- умение работать с Git, Issue trackers;
- умение писать и сопровождать Unit-тесты, автотесты;
- опыт проведения code-review;
- опыт работы с инструментами CI/CD;
- понимание сетевых технологий/форматов представления данных: стек TCP/IP, RESTful API, JSON/XML, HTTP (S);
- навыки проектирования и планирования технических решений и рефакторинга;
- понимание современных процессов разработки и жизненного цикла задач (подготовка аналитики, оценка трудоемкости, критичности, техническая экспертиза, разработка и доставка до тестирования и пользователя, мониторинг стабильности и производительности в production);
- опыт работы с экосистемой Spring, понимание Spring Boot;
- опыт работы с Gradle;
- опыт разработки web-ориентированных сервисов (REST/SOAP, OpenAPI/WSDL, JSON/XML);
- умение работать с базами данных
- SQL и noSQL;
- понимание работы Docker/Kubernetes/Helm.
Технологический must have сеньора:
- Языки: Java SE 11 и выше, Kotlin.
- Фреймворки: Spring Boot/Cloud/Data/Integration/Batch/Retry.
- Брокеры: RabbitMQ и Apache Kafka (как брокер сообщений).
- Хранилища: Oracle, Postgre, Mongodb, Cassanrda, Elastic, Redis и др.
- noSQL-СУБД (Redis, Cassandra и т. д.)
- работа GC, тюнинг производительности, поиск неоптимальной реализации и утечек памяти.
- Инфраструктура: Apache Zookeeper, Netflix Eureka, HaProxy, Hashicorp Vault.
- Мониторинги: ELK, Prometheus, Grafana, Jaeger.
- CI/CD: GitLab/Stash, Jenkins/Bamboo, Helm, Flux.
- Тестирование: JUnit 5, Cucumber, Apache JMeter, WireMock.
- Анализ кода: JaCoCo, Sonar, PiTest.
Что после seniority? Какие этапы роста дальше, какие hard skills нужны, чтобы их пройти?
Дальше нужно определяться, куда уходить: в архитектуру или в управление командой. Это разные пути — как по скиллам, так и по задачам. Может быть соблазн пытаться развиваться во всем сразу, но следует понимать, что совмещать будет абсолютно неэффективно в долгосрочной перспективе. Так или иначе, придется выбрать что-то одно и сфокусироваться.
Для архитектора нужно разбираться в технологиях, в архитектурных подходах, в системных ограничениях. Архитектор должен уметь выбирать технические решения, которые не сломаются со временем (при увеличении нагрузок, смене команды, изменении требований (бизнеса, безопасности), отказе от поддержки каких-то внешних систем и т. д.).
Для управленца нужно уметь работать с людьми, учитывать их интересы и интересы компании, уметь работать с планами и сроками, держать баланс. Тут мы подходим к теме soft skills.
Какими личными качествами должен обладать хороший Java-разработчик? Какие soft skills важны в этой сфере?
У любого разработчика должны «гореть глаза», он должен получать удовлетворение от решения сложных (для его уровня) задач, от раскапывания причин, от обретения понимания о том, как вообще это все работает.
Если этого нет, то вряд ли человек в итоге станет успешным разработчиком. Если есть, то все остальное так или иначе решаемо — человек все равно найдет себя в этой профессии, даже если в конкретной организации или команде у него не сложится. Так что «горящие глаза» — это, по моему мнению, самое важное.
Что читать и где учиться?
Для новичка у меня следующий must read:
- «Java. Библиотека профессионала. Том 1. Основы», Кей Хорстманн, Гари Корнелл;
- «Java. Библиотека профессионала. Том 2. Расширенные средства программирования», Кей Хорстманн, Гари Корнелл;
- «Java. Эффективное программирование», Джошуа Блох;
- «Совершенный код. Мастер-класс», Стив Макконнелл;
- «Приемы объектно-ориентированного проектирования. Паттерны проектирования, Эрих Гамма, Ричард Хелм и др.;
- «Рефакторинг. Улучшение существующего кода», Мартин Фаулер.
Мидлам и сеньорам важно не переставать учиться и учить молодых. В KoronaPay есть программы развития hard и soft skills: тренинги, мастер-классы, курсы. Плюс разработчики могут участвовать как слушатели и спикеры в разных ивентах вроде CodeFest, TeamLead Conf, HighLoad++.
Посмотреть вакансии в KoronaPay
Читать на dev.by