Найти тему
Dev.by

Как Java-разработчику расти в профессии: советы Алексея Мирютова

Оглавление

Алексей Мирютов — руководитель центра разработки Золотая корона/KoronaPay (относится к группе компаний «Центр Финансовых технологий»). В ЦФТ Алексей работает уже 8 лет, на его счету десятки успешных проектов.

В материале Алексей вместе с коллегами рассказывает о профессии Java-разработчика и советует, как расти профессионально.

Продолжаем цикл материалов про ИТ-специальности. Каждую из них описывает «типичный представитель» — опытный специалист. Мы надеемся, что цикл поможет школьникам, студентам, переквалификантам, джуниорам и сочувствующим выбрать специальность в ИТ, оценить свои перспективы или просто сверить часы с авторитетным коллегой. Можно обсуждать и дополнять материал в комментариях, чтобы сделать его ещё полезней.
Продолжаем цикл материалов про ИТ-специальности. Каждую из них описывает «типичный представитель» — опытный специалист. Мы надеемся, что цикл поможет школьникам, студентам, переквалификантам, джуниорам и сочувствующим выбрать специальность в ИТ, оценить свои перспективы или просто сверить часы с авторитетным коллегой. Можно обсуждать и дополнять материал в комментариях, чтобы сделать его ещё полезней.

Почему Java?

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

Кроме того, есть преимущества с точки зрения профессиональной среды. Java-разработчики — это активное и развивающееся сообщество. В нашей компании, например, есть формат «ЦФТ-Тема». Это ток-шоу, воркшопы и лекции, где регулярно звучат темы Java и вообще бэкэнда. Кроме того, в KoronaPay есть сообщество бэкэнд-разработчиков, где обсуждаются вопросы развития продукта в части серверных компонентов, новые подходы, инструменты. И, конечно, участие в IT-конференциях — это тоже про сообщество.

Как выглядит работа Java-разработчика над проектом? Что делает джун, мидл и сеньор?

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

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

В целом круг задач мидла примерно таков:

участвует в проработке требований, декомпозиции задач; совместно с ведущими инженерами проектирует архитектурные решения; проектирует API; пишет код; делает code-review; менторит 1-2 джунов.

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

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

Карьерные и зарплатные перспективы

Развитие возможно либо по технической линии, либо по управленческой, менеджерской.

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

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

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

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

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

Как мидлу вырасти до сеньора? Какими 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

]]>