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

Що варто знати Java-розробнику сьогодні, щоб бути успішним завтра

30 жовт 2019

Роман Шрамков, CTO EPAM Ukraine і голова Java Competency Center, написав про вміння й навички, які стануть у нагоді Java-розробнику, якщо він замислюється про майбутнє своєї кар'єри в цій області.

До мене часто звертаються з питанням: у що потрібно інвестувати свій час зараз, щоб бути успішним на ринку ІТ в майбутньому. Це хвилює як досвідчених розробників, так і тих, хто тільки розпочинає свій шлях в індустрії. Спробуємо розібратися в темі. За основу візьмемо спостереження на наших проектах в центрі компетенцій 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-розробку, і що варто вивчати зараз, щоб бути успішним завтра:

Хмара, як платформа. “Усе йде у хмари” — таке твердження все частіше звучить на різноманітних технічних конференціях. До того ж, більшість великих клієнтів, які раніше боялися відмовитись від власних датацентрів і перевести свої дані в в хмару, зараз усвідомлюють, що час для цього прийшов. 

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

Крім того, багато opensource-технологій, які історично були основою для Java-рішень, тепер доступні у хмарі, як сервіс. Провайдери надають власні унікальні хмарні сервіси, наприклад пов’язані з АІ, активно розвиваються сервіси, орієнтовані безпосередньо на розробників. Можна впевнено говорити, що з гнучкої інфраструктури, хмара трансформується на повноцінну платформу для розробки та експлуатації складних систем.

Для розробників це означає, що знання та досвід роботи з основними хмарними сервісами будуть ставати ключовими, іноді навіть важливішими, ніж знання власне 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

За матеріалами AIN.UA