Как Java-разработчику расти в профессии: советы Алексея Мирютова
Алексей Мирютов — руководитель центра разработки Золотая корона/KoronaPay (относится к группе компаний «Центр Финансовых технологий»). В ЦФТ Алексей работает уже 8 лет, на его счету десятки успешных проектов.
В материале Алексей вместе с коллегами рассказывает о профессии Java-разработчика и советует, как расти профессионально.
Кроме того, есть преимущества с точки зрения профессиональной среды. Java-разработчики — это активное и развивающееся сообщество. В нашей компании, например, есть формат «ЦФТ-Тема». Это ток-шоу, воркшопы и лекции, где регулярно звучат темы Java и вообще бэкэнда. Кроме того, в KoronaPay есть сообщество бэкэнд-разработчиков, где обсуждаются вопросы развития продукта в части серверных компонентов, новые подходы, инструменты. И, конечно, участие в IT-конференциях — это тоже про сообщество.
Как выглядит работа Java-разработчика над проектом? Что делает джун, мидл и сеньор?
Джун делает те задачи, которые дают. Обычно они более-менее простые. Часто джун работает с помощью старших коллег.
Мидл делает типовые задачи самостоятельно, за ним уже никто не следит. Он сам понимает, когда нужно посоветоваться с более опытными сотрудниками.
В целом круг задач мидла примерно таков:
участвует в проработке требований, декомпозиции задач;
совместно с ведущими инженерами проектирует архитектурные решения;
проектирует API;
пишет код;
делает code-review;
менторит 1-2 джунов.
Сеньор решает системные задачи, часто касающиеся уже не одного, а кучи разных проектов, разбирается в деталях, при необходимости поддерживает весь цикл поставки ПО. Ключевое отличие сеньора в том, что он может прийти в незнакомое ему окружение, самостоятельно разобраться в процессе и делать в этом окружении задачи, в том числе системного характера.
Что касается рабочего дня сеньора, то тут сложно описать типичный распорядок. Разработка, проектирование, тестирование, общение, ревью, снова общение, участие в воркшопах, коучинг джунов — комбинировать это в течение дня можно как угодно.
Карьерные и зарплатные перспективы
Развитие возможно либо по технической линии, либо по управленческой, менеджерской.
По технической части рост идет за счет наращивания знаний, получения дополнительной ответственности. Ответственность заключается в том, что сеньор отвечает за выбранные технологии, архитектурные решения, декомпозицию работ — и все это как для собственных задач, так и для тех, которые делают мидлы.
В дальнейшем количество опыта переходит в качество, и специалист ориентируется уже в архитектуре проекта как таковой. Конечно, это требует не только знаний технологий, но и знаний в смежных областях (ОС, сети, кластеры и т. д.).
Рост по зарплате далеко не всегда связан именно с техническим развитием. Очень часто он связан как раз с дополнительной ответственностью. Когда ты показываешь, что можешь делать больше, появляется возможность говорить о повышении зарплаты с учетом этого.
Чем больше классов задач в организации вы можете решать, тем вы ценнее как специалист в этой организации.
Соответственно, чем вы ценнее для компании, тем проще вам договариваться по самым различным вопросам — тут и гибкий график, и интересные задачи, и выстраивание определенных процессов, и поддержка в сложных жизненных ситуациях.
Как мидлу вырасти до сеньора? Какими hard skills владеет сеньор?
Технический набор для мидлов и сеньоров примерно один и тот же. Разница в глубине знаний и способности их правильно применить. То есть важно уметь вовремя понять, что подходит для решения конкретной задачи, а что — нет.
Список важных hard skills сеньора:
умение писать код (знания алгоритмов, структур данных, принципов ООП, паттернов проектирования);
навыки проектирования и планирования технических решений и рефакторинга;
понимание современных процессов разработки и жизненного цикла задач (подготовка аналитики, оценка трудоемкости, критичности, техническая экспертиза, разработка и доставка до тестирования и пользователя, мониторинг стабильности и производительности в 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, тюнинг производительности, поиск неоптимальной реализации и утечек памяти.
Что после seniority? Какие этапы роста дальше, какие hard skills нужны, чтобы их пройти?
Дальше нужно определяться, куда уходить: в архитектуру или в управление командой. Это разные пути — как по скиллам, так и по задачам. Может быть соблазн пытаться развиваться во всем сразу, но следует понимать, что совмещать будет абсолютно неэффективно в долгосрочной перспективе. Так или иначе, придется выбрать что-то одно и сфокусироваться.
Для архитектора нужно разбираться в технологиях, в архитектурных подходах, в системных ограничениях. Архитектор должен уметь выбирать технические решения, которые не сломаются со временем (при увеличении нагрузок, смене команды, изменении требований (бизнеса, безопасности), отказе от поддержки каких-то внешних систем и т. д.).
Для управленца нужно уметь работать с людьми, учитывать их интересы и интересы компании, уметь работать с планами и сроками, держать баланс. Тут мы подходим к теме soft skills.
Какими личными качествами должен обладать хороший Java-разработчик? Какие soft skills важны в этой сфере?
Если этого нет, то вряд ли человек в итоге станет успешным разработчиком. Если есть, то все остальное так или иначе решаемо — человек все равно найдет себя в этой профессии, даже если в конкретной организации или команде у него не сложится. Так что «горящие глаза» — это, по моему мнению, самое важное.
Что читать и где учиться?
Для новичка у меня следующий must read:
«Java. Библиотека профессионала. Том 1. Основы», Кей Хорстманн, Гари Корнелл;
«Java. Библиотека профессионала. Том 2. Расширенные средства программирования», Кей Хорстманн, Гари Корнелл;
«Приемы объектно-ориентированного проектирования. Паттерны проектирования, Эрих Гамма, Ричард Хелм и др.;
«Рефакторинг. Улучшение существующего кода», Мартин Фаулер.
Мидлам и сеньорам важно не переставать учиться и учить молодых. В KoronaPay есть программы развития hard и soft skills: тренинги, мастер-классы, курсы. Плюс разработчики могут участвовать как слушатели и спикеры в разных ивентах вроде CodeFest, TeamLead Conf, HighLoad++.
Когда я был мидлом, я смотрел на компании, которые работают со стэком, перечисленным в этой статье. Сейчас я Principal, я выбираю компанию в первую очередь, а стэк это уже вторично.
Например в Microsoft используют .Net, в Amazon - Java, в Meta - PHP, etc.
Список технологий примерно на страницу. На странице примерно 200слов. За каждым словом-технологией мануал на 500-1000+ страниц. Итого от 100,000 до 200,000+ страниц английского текста. Дальше поделите на свою скорость чтения на английском. И это просто прочитать.
Есть еще временной аспект: Java это промышленные системы, они существуют десятилетиями, так что придется иметь дело с технологиями и системами, которые уже не в фокусе внимания. Так же есть смысл рассматривать новые технологии, которые еще не стали мейнстримом.
Java разработчики последнее время претендуя на позицию мидла не умеют писать unit-тесты и успешно находят работу (и работают себе дальше). О микросеовисах/tdd/эджайл нынче любят поговорить и только...
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.
Когда я был мидлом, я смотрел на компании, которые работают со стэком, перечисленным в этой статье. Сейчас я Principal, я выбираю компанию в первую очередь, а стэк это уже вторично.
Например в Microsoft используют .Net, в Amazon - Java, в Meta - PHP, etc.
Список технологий примерно на страницу. На странице примерно 200слов. За каждым словом-технологией мануал на 500-1000+ страниц. Итого от 100,000 до 200,000+ страниц английского текста. Дальше поделите на свою скорость чтения на английском. И это просто прочитать.
Есть еще временной аспект: Java это промышленные системы, они существуют десятилетиями, так что придется иметь дело с технологиями и системами, которые уже не в фокусе внимания. Так же есть смысл рассматривать новые технологии, которые еще не стали мейнстримом.
Java разработчики последнее время претендуя на позицию мидла не умеют писать unit-тесты и успешно находят работу (и работают себе дальше). О микросеовисах/tdd/эджайл нынче любят поговорить и только...
Технологический must have сеньора:
Инфраструктура: Apache Zookeeper, Netflix Eureka, HaProxy, Hashicorp Vault. Мониторинги: ELK, Prometheus, Grafana, Jaeger.
блиииин, как же я без всего этого живу?