article-spots
article-carousel-spots
programs
Технологии

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

30 окт. 2019

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

Ко мне часто приходят с вопросом: во что сейчас надо инвестировать свое время, чтобы быть востребованным в будущем на рынке 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 — позволит вам освоить frontend-разработку и даст возможность читать 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, то почитайте о GraalVMMicronaut и 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

Источник: AIN.UA