Ukraine

Що повинен знати Java розробник: Junior, Middle, Senior

Stories
August 8, 2022

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

Певне, ніхто не заперечуватиме, що технологічні рішення на основі мікросервісної архітектури стають основним трендом на ринку. Екосистема Java та рішення на основі Spring Boot якомога краще вирішують поставлені комерційні завдання і стараються йти в ногу з часом.

Останніми роками ця мова розвивається все швидше і охоплює все більше потенційних ніш застосування. Одним з яскравих прикладів є Vector API. Зараз він проходить другий цикл розробки і адаптації, але вже на цьому етапі дозволяє надзвичайно ефективно опрацьовувати векторні операції з максимальною оптимізацією коду до архітектури системи, на якій працює програма. Потенційно це відкриває двері для Java в сфері аналізу та опрацювання великих статистичних даних за короткий час.

Якщо аналізувати поточний ринок та кількість вже існуючих рішень, які так чи інакше треба підтримувати, а також масштаб новітніх розробок, Java та її екосистема будуть актуальними ще дуже довго. Тож вкладати свої зусилля в саморозвиток як Java інженера чи інженерки – це хороша інвестиція в своє майбутнє.

 

Погляньмо детальніше, якими ж якостями повинен володіти Java інженер. В Intellias ми регулярно аналізуємо технологічний стек, який використовуємо на поточних проєктах. На основі зібраних даних та трендів на ринку ми адаптуємо матрицю компетенцій і стараємося виховувати культуру саморозвитку та пізнання нового. Архітектура позицій в нашій компанії доволі типова серед сервісних компаній і розділена на такі рівні: Junior, Middle, Strong Middle, Senior та Principal.

Давайте в деталях розглянемо перелік жорстких та м’яких навичок, якими необхідно володіти на кожному з рівнів.

Junior Java розробник: Hard skills

Очевидним фактом є те, що будь-який (і не тільки Java) інженер повинен володіти азами знань з комп’ютерних наук. Йдеться про знання алгоритмів та структур даних, принципів ООП та азів функціонального програмування.

З боку компанії ми очікуємо, що Junior спеціаліст повинен орієнтуватися в оцінці складності алгоритмів та розуміти елементарні структури даних, підходи OOP та принципи SOLID. Навики тестування ми також оцінюємо ще з позицій Junior рівня, адже сучасний підхід в програмуванні передбачає написання тестів перед тим, як програміст приступить до створення конкретного рішення.

Найпоширенішими завданнями, з якими може стикнутися Java розробник початківець — це робота з нескладними виявленими дефектами в коді, додаткове його покриття юніт тестами або навіть покращення певних елементів програмного рішення. Високу ефективність також демонструє підхід парного програмування, коли певне завдання інженери вирішують в парах Junior-Middle або Junior-Senior інженери, адже це пришвидшує процес ознайомлення з деталями того чи іншого проекту і дозволяє ділитися знаннями.

Насправді, це складний період росту інженера, адже окрім потреби постійного вдосконалення в технічних навиках, треба ще й здобувати розуміння бізнес-логіки проєкту і процесів взаємодії між учасниками команди та замовниками.

  • Більшість інженерів за 1-1,5 року набувають достатньо досвіду для переходу на рівень Middle інженера.

Middle Java розробник: Hard Skills

 Спеціалістам рівня Middle під час співбесід можуть запропонувати вирішити конкретне завдання. Для цього вони мають обрати рішення, яке зробить це максимально швидко і ефективно. Здебільшого це завдання з пошуку та сортування даних, їх групування та оптимізація. При цьому оцінюються і те, наскільки інженер може протестувати своє рішення. Також можна очікувати, що інтерв’юер запитає про те, якими підходами кандидат може перевірити правильність запропонованого рішення, тестових даних та оцінки покриття тестів.

Вміння писати код, використовуючи принципи ООП, – це ключовий навик, без якого неможливо написати зрозумілий гнучкий код, який легко тестувати і підтримувати. Очікувано, що Middle+ спеціаліст повинен орієнтуватися в Go4 шаблонах проєктування. І, очевидно, що Middle інженер вже віртуозно розбиратиметься з такими стандартними інструментами Java Core як Stream API, Lambdas, Collection API, Concurrency і т.д.

До того ж, в процесі роботи Middle інженер вже повинен добре бути ознайомленим з технологіями, які застосовуються здебільгого у всіх корпоративних рішеннях:

– Spring/Spring Boot.
– Hibernate (або інша подібна ORM).
– Реляційними та нереляційними базами даних.
– Системами контролю версій (Git).
– CI/CD системами як Gitlab/Jenkins.
– Хмарними сервісами (AWS, Gogole Cloud, Azure).

Senior Java розробник: Hard Skills

При оцінюванні спеціаліста на рівень Senior+ ми часто дискутуємо, яким чином та за допомогою яких інструментів можна вирішити завдання, поставлені замовником. Рішення про оцінку залежатиме від якості та правильності застосованих шаблонів проєктування, розуміння «запахів коду» та підходів щодо їх уникнення, а також актуальністю вибраного стеку технологій. Трапляється, що потенційні кандидати дають посилання на свої особисті проєкти на GitHub. Це дуже цінна інформація, яка дає змогу зрозуміти, як пише інженер та якими інструментами вміє користуватися в роботі.

У повсякденній роботі Senior інженер стикається з численними завданнями, які вимагають як глибокого розуміння екосистеми Java, так і технологій, застосованих на проєкті. У своїй практиці я зустрічався з проблемами витоку пам’яті для вебсервісу, який обслуговує мільйони користувачів. Усунення подібного роду несправностей ніколи не є очевидним і вимагає хороших навиків аналітичного мислення, збору даних телеметрії, а також вміння користуватися інструментарієм. Тим не менше, такого роду завдання є цілком типовими для Senior інженерів, адже вимагають певного досвіду та знань.

Еволюція технічних навиків в процесі кар’єрного росту

Для людей, які планують обирати професію Java інженера, слід розуміти, що в спектр завдань та навиків може входити досвід роботи з реляційними та нереляційними базами даних, системами управління чергами повідомлень (Apache Kafka, Rabbit MQ чи SQS), досвід роботи з рішеннями на базі мікросервісної архітектури та практичний досвід роботи з хмарними сервісами (AWS, Google Cloud, Azure).

Важко очікувати, що початківець володітиме цими навиками. Тим не менше, інженери Middle рівня повинні вже розуміти базові архітектурні концепції і мати базове розуміння принципів роботи найпопулярніших хмарних сервісів. Це ж саме стосується й навичок роботи з базами даних та досвідом роботи з рішеннями на базі мікросервісної архітектури.

Soft Skills для Java розробників усіх рівнів

Доволі часто можна почути, що програмування та інженерія – це робота, яка чудово підходить для інтровертів або навіть соціопатів. Більше того, дехто неправильно розуміє поняття гнучких навичок і плутає їх з рівнем володіння іноземною мовою чи неконфліктністю. На мою думку, це зовсім не так.

Вартує глянути на типовий склад команди, яка займається розробкою чи підтримкою продукту. Здебільшого в ній буде від 3 до 7 інженерів різного рівня, а також інженери з тестування, бізнес аналітики, проектні менеджери тощо. Кожного дня в команді відбувається комунікація і від її ефективності залежить кінцевий успіх проєкту. Тому вважаю, що успішний інженер той, який володіє такими навичками:

Комунікація – це ключовий навик. Вміння грамотно та зрозуміло висловлювати свої думки іноземною мовою напряму впливає на ваш кар’єрний ріст. Важливо розуміти, що вміти коректно спілкуватися потрібно не лише з колегами, алей замовниками.

Командна взаємодія. Переважно всі працівники компанії працюють в командах. Успіх проєкту в цілому залежить від ефективності роботи кожного учасника команди. Ви повинні вміти побудувати культуру поваги один до одного та взаємодопомоги у складних ситуаціях. Кожен розробник незалежно від компетенції повинен знати свою зону відповідальності в проєкті, а найголовніше – покращувати свої навики та бути відкритим до змін.

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

Самоорганізація. Треба вміти організовувати не лише роботу над поточними задачами, але й роботу над самонавчанням. Звісно, компанія надає напрям розвитку і будує його план. Тим не менш, багато аспектів залежить і від інженера.

Розуміння процесів. Розробка програмного забезпечення – це складний процес, в якому задіяно багато людей, команд з інших відділів чи навіть компаній. Для того, щоб досягнути поставлених завдань, рівномірно розподіляти роботу між учасниками команди та правильно планувати етапи проектів, треба розумітися на таких класичних методологіях як SCRUM, Kanban, XP, Waterfall тощо.

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

  • Корисні ресурси для Java спеціалістів

Я переконаний, що потреба у технічних спеціалістах тільки зростатиме, в тому числі й в інженерів Java. Більше того, криза, пов’язана з COVID-19, призвела до стрімкого зростання попиту на послуги онлайн-освіти, телемедицини, сфери розваг та електронного урядування. Це створює ще більш складні завдання для інженерів, а їх впровадження – це окремий виклик для індустрії. Вкрай важливим є йти в ногу з новими тенденціями та постійно пізнавати і впроваджувати новаторські рішення, які дозволятимуть бізнесу бути ефективнішим та стійкішим.

У вільному доступі є багато корисної інформації, яка дозволить розвиватися вам як інженеру. Це як книги, так і різноманітні подкасти чи онлайн-курси. Рекомендую зосередитись на таких джерелах:

  • Joshua Bloch – Effective Java, 3rd (latest) edition. Це одна з класичних книг, з якою вже б точно мав бути ознайомлений Middle Java інженер.
  • Pro Spring 5: An In-Depth Guide to the Spring Framework and Its Tools 5th Edition, by Iuliana Cosmina (Author), Rob Harrop (Author), Chris Schaefer (Author), Clarence Ho (Author) Spring. Книга, яка в деталях ознайомить з Spring Framework та його інструментарієм.
  • Microservices Patterns: With Examples in JavaMicroservices Patterns: With Examples in Java Chris Richardson.
  • Офіційний Youtube-канал Java спільноти, яка займається розробкою та впровадженням нового функціоналу. Тут ви знайдете новинки, які прийшли в мову, а також цікаві інтерв’ю, де розглядають цікаві моменти з вирішення тих чи інших завдань.
  • Офіційний канал конференції JavaDay Lviv. На цьому ресурсі ви зможете переглянути виступи відомих спікерів та професійних Java інженерів. Тут можна ознайомитися з трендами, новими технологіямии та дотичними темами з Computer Science і Machine Learning.
  • Офіційний канал львівського JavaClub. Колеги розглядають цікаві фреймворки, новинки у свіжих версіях мови, а також цікаві практики, які можуть допомогти в роботі.

Не пропусти цікаві історії!

Підпишись на нашу розсилку та отримуй новини від Intellias.

    Дякуємо за підписку!

    The best vacancies, are waiting for you!

    We picked vacancies that suit your skills!

    Good news!
    Link copied
    Чудові новини!
    Все вдалося.
    Погані новини!
    Щось пішло не так. Будь ласка, спробуй ще раз.
    This site is registered on wpml.org as a development site.