Роман Шрамков, CTO EPAM Ukraine и глава Java Competency Center, написал о тех навыках, которые пригодятся Java-разработчику, если он думает о будущей карьере в этой области.

Фото — DOU

Ко мне часто приходят с вопросом: во что сейчас надо инвестировать свое время, чтобы быть востребованным в будущем на рынке IT. Это волнует как опытных разработчиков, так и тех, кто только начинает свой путь в индустрии. Попробуем разобраться в теме. За основу возьмем наблюдения на наших проектах в центре компетенции Java, мое мнение и результаты обсуждений с другими экспертами. Если говорить о проектной части, то это преимущественно разработка Java-решений для крупных предприятий, которые, зачастую, сейчас являются web-based.


Начнем с того, что несмотря на все изменения, которые происходили с языком Java и окружающей его экосистемой в последнее время (переход на более частые релизные циклы, отказ от бесплатной поддержки Oracle и пр.), Java — это самая востребованная платформа в разработке серьезных приложений. Для новичка же знание этого языка открывает огромные возможности для дальнейшей работы.

Java — очень широкое понятие. Специалисты, работающие с этим языком, делают абсолютно разные вещи: разработку Android-приложений, разработку под web или программирование контроллеров.

Прежде, чем перейти к обсуждению трендов, вкратце остановлюсь на тех технологиях, которые, по моему мнению и по опыту работы в ЕРАМ, являются сейчас наиболее распространенным выбором для Java- девелопера. Это та база, с которой надо стартовать.

Итак, в арсенале навыков у Java-девелопера должны быть:

  • Git. Похоже, сегодня, это единственная система управления версиями, которая все еще развивается и, соответственно, развивается инфраструктура вокруг нее. Тот же GitLab или GitHub все время обрастают новыми сервисами. Удивляет, что некоторые источники в наши дни советуют только начинать изучать Git. Этот инструмент уже давно должен быть в обойме навыков.
  • Новые версии Java. Поверьте, это важно. Все понимают, что время 8-ки конечно и оно постепенно уходит даже в крупных компаниях, не сильно склонных к обновлениям платформы, задумываются о будущем. Все чаще клиенты на старте проектов спрашивают: «Сколько девелоперов в вашей компании работают с 11-й версией Java?». Можно сфокусироваться на Java 11 — это long term support version, но в принципе, рекомендую не отставать и хотя бы раз в пол года смотреть новые фичи.
  • Платформа Spring. Давайте будем честными: давно существовавший стандарт JEE был, фактически, вытеснен этой опенсорсной платформой. Сейчас большинство проектов для большого бизнеса пишется на Spring. Поэтому знание Spring 5 — must-have для девелопера. Если вы приходите на работу в крупную компанию, скорее всего, вы встретите Spring.
  • Maven или Gradle. Хотелось бы посоветовать что-то одно, но, по факту, Maven все еще более распространен, чем Gradle. Пару лет тому назад, когда я смотрел статистику, для меня это стало настоящим сюрпризом. В любом случае оба инструмента делают свою работу хорошо и являются отличным выбором.
  • JUnit 5 для модульного тестирования. Этот фреймворк активно используется и будет отличным выбором для джедаев модульного тестирования. В этот набор я бы так же добавил Mockito и PowerMock для работы с моками.

Какие языки изучать кроме Java?

Что же делать с другими языками программирования? Нужно ли их изучать, когда Java и так продолжает занимать ведущие позиции на рынке? Мой ответ однозначный: несомненно нужно. Новые языки обоготят ваш опыт. Но, для того, чтобы инвестировать время грамотно, давайте посмотрим как поживают языки, которые появились на JVM-платформе.

  • Java — универсальный язык. Да, Java тоже есть в этом списке. Ведь во многих случаях его абсолютно достаточно. Многие проекты, не усложняя себе жизнь, используют исключительно этот язык. Девелоперы, владеющие Java, сегодня гарантированно будут обеспечены работой в ближайшее время. Только не забудьте изучать последнии версии.
  • Kotlin — пожалуй единственный JVM-based язык, который сейчас активно используется в продакшене как альтернатива Java. Некоторые клиенты использует его как стандартный язык для разработки, поэтому знать и использовать Kotlin в своей практике — отличная идея.
  • Scala — язык распространен на рынке, но он так и не получил массовой популярности и используется как нишевый. В основном Scala используется на проектах с Big Data (Spark), при написании сложных распределенных систем. В любом случае Scala – очень интересный язык для изучения, но глубоко уходить в него стоит только, если вы нацелены на карьеру Scala разработчика.
  • Groovy — несмотря на хороший старт когда-то, основная ниша Groovy сейчас — написание вспомогательных утилит, build jobs и pipelines. Если у вас на проекте этот язык не используется, то можно отложить его изучение до того момента, когда он вам действительно понадобится.

Если же вы по-настоящему хотите расширить свое портфолио альтернативными языками, то попробуйте что-то из языков, которые не базируются на JVM. И, на мой взгляд, это будет даже полезнее:

  • JavaScript — позволит вам освоить front-end-разработку, и даст возможность читать JavaScript-код, которого уже написано очень много.
  • Python — позволит добавить в ваш арсенал альтернативный стек для разработки, мощный интрументарий для быстрого написания разных утилит, а также даст возможность поиграться с технологиями Machine Learning & AI.
  • Go — легкий, приятный в изучении язык, который можно использовать для быстрой server-side-разработки.

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

Что будет определять Java-девелопмент в ближайшие годы?

Рассмотрим более детально, что сейчас влияет на Java разработку, и что стоит изучать сегодня, чтобы быть востребованным завтра:

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

Сегодня практически у каждой компании есть хотя бы кусочек инфраструктуры в облаке. Для многих миграция приложений и данных в облако — основной технлогический ФОКУС на ближайшие несколько лет.

Кроме того, если исторически основой Java-решений являлись opensource-технологии, то сейчас многие из них доступны в облаке как сервис. Провайдеры предоставляют собственные уникальные облачные сервисы (связанные с AI, например), активно развиваются сервисы ориентированные на самих разработчиков. Можно с уверенностью сказать, что из гибкой инфраструктуры, облака превращаются в полноценную платформу для разработки и эксплуатации сложных систем.

Для разработчиков это значит, что знание и опыт работы с основными сервисами в облаке будут становится ключевыми и даже более важными, чем знание самой Java. Фактически из просто Java-разработчиков, мы должны превратиться в cloud разработчиков.

Список лидеров на облачном рынке, не поменялся за последнее время – Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP). Причем лидерство все еще за AWS. Azure довольно успешно наращивает свою долю на рынке, а GCP пытается не выпасть из гонки и предлагает интересные новые сервисы и хорошие цены.

Исторически Java разработчикам ближе AWS и GCP, хотя опыт в любом из этих облаков будет востребован.

Микросервисная архитектура — если 2-3 года назад микросервисы можно было считать растущим трендом в промышленных системах, то сейчас подавляющее большинство клиентов, которые к нам приходят, воспринимают эту архитектуру, как основную для построения своих платформ (особенно в облаке). Это значит, что ваш текущий или следующий проект обязательно потребуют от вас знаний в этой области.

В большинстве случаев построение микросервисной архитектуры неразрывно связано с использованием Docker-контейнеров для сборки и деплоймента, а также с использованием менеджера контейнеров, если количество сервисов достаточно большое. Одним из наиболее успешных решений для управления контейнерами на сегодняшний день является платформа Kubernetes — опенсорсное решение от Google совместно развиваваемое сейчас несколькими крупными вендорами. Эта платформа также стала основой для других, более сложных решений.

Среди вызовов будущего в этой области можно отметить построение надежной и прозрачной асинхронной коммуникации в системах с сотнями и тысячами сервисов при постронении высокнагруженных платформ. В связи с чем стоит знать и понимать техники Reactive Programming и такие шаблоны как CQRS и Event Sourcing.

Если же хотите the bleeding edge в этой области для Java, то почитайте о GraalVM, Micronaut и Quarkus.

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

Как это влияет на разработку ПО? Помимо того, что на проектах появляются новые роли с которыми необходимо взаимодействовать (такие как Security Engineer), в стандарный цикл разработки добавляются фазы дизайна и тестирования безопасности создаваемого приложения. Теперь уже недостаточно просто написать код, необходимо убедиться, что этот код не вносит уязвимостей.

В нашем словаре снова появляются OWASP Top Ten и Defensive Coding Practices. В CICD пайплайнах появляются инструменты проводящие SAST (Static Analysis security tests) и DAST (Dynamic Application security tests), а частью QA процесса становиться регулярный Penetration Testing (Pen Tests).

FullStackподход в работе. В наши дни, когда нужного специалиста может не быть в команде, а направление развития стартапа может существенно поменяться в считаные секунды, очень востребованными становятся Full Stack-разработчики. Если вы не боитесь разобраться в смежной области, можете осваивать новые инструменты “на ходу” и решать проблему там, где она возникла, то вы правильный кандидат для такой роли.

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

Поддерживать широкий профиль непросто, но знать несколько дополнительных технологий из смежных областей точно не помешает. На фронтенде сейчас в ходу такие фреймворки как React, Angular, Vue.js, в DevOps-части не помешает знать Terraform, Ansible. Для CICD pipelines можно разобраться с Jenkins или Team City (хотя еще лучше посмотрите на Azure Pipelines и перечитайте часть по клауды).

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

Автор: Роман Шрамков, CTO EPAM Ukraine, Head pf Java Competency Center