Джуніор-розробнику доволі складно потрапити у велику закордонну компанію — конкуренція на ринку висока. Але Данилу Ляховецькому це вдалося — ще навчаючись в університеті, він влаштувався Java-розробником в американську компанію AgileEngine. Зараз він працює над ключовими проєктами компанії, поєднуючи ролі Software Engineer і Data Scientist, а також менторить новачків. Данило розповів, які компетенції має мати джуніор для отримання вигідної пропозиції та який досвід можна здобути у закордонних компаніях.
AgileEngine визнана однією з найшвидше зростаючих компаній США. Як ви туди потрапили і наскільки складно це було?
Я влаштувався в компанію у 2021 році. Тоді я ще навчався в Одеському політехнічному університеті та активно шукав роботу. Влітку, під час канікул, я надіслав резюме на вакансію Junior Java-розробника в AgileEngine. На той час у мене вже був досвід роботи над власними проєктами, тож я зміг добре продемонструвати свої навички й отримав пропозицію із зарплатою вищою за середню на ринку.
Джунам було доволі складно потрапити на цей проєкт. Моїми колегами здебільшого були мідл-спеціалісти або сеньйори. Так я став одним із небагатьох, хто пройшов відбір. Співбесіда була досить складною, і над деякими питаннями мені довелося серйозно подумати, але керівництво побачило мій потенціал і взяло в команду. Спочатку я працював в українській дочірній компанії AgileEngine, а згодом перейшов до основної.
Компанія справді зростає дуже швидко. Коли я прийшов, в AgileEngine було близько 600 співробітників, а зараз їх уже понад 1500.
Як робота в такому динамічному середовищі вплинула на ваше професійне зростання — чи можете сказати, що також зробило внесок у цей розвиток?
Так, я дуже виріс як спеціаліст під час роботи тут. До співпраці з AgileEngine у мене не було комерційного досвіду роботи з технологіями. Але компанія призначила мені ментора, який перші три місяці допомагав мені освоїтися та відповідав на питання. Цей онбординг був досить складним, і кілька джуніорів, які прийшли в команду разом зі мною, звільнилися вже за кілька тижнів. Проте в такому середовищі дуже швидко зростаєш і навчаєшся, тому я з ентузіазмом занурювався у задачі.
Також мені дуже пощастило з першим тімлідом. Він був доволі вимогливим у таких моментах, як написання коду, перевірка pull request’ів та архітектурні підходи. Тобто мені доводилося продумувати складніші рішення, які у довгостроковій перспективі були кращими, ніж прості. Це справді допомогло мені у професійному розвитку. І зараз я можу з упевненістю сказати, що беру участь у процесах, які зазвичай виконують сеньйори.
Також я працюю не лише як програміст, а й самостійно беру на себе деякі завдання проджект-менеджера. Наприклад, розвиваю професійні відносини з нашими клієнтами та партнерами, щоб забезпечити нові можливості для компанії в майбутньому. І ці клієнти та партнери також відзначають мій внесок у співпрацю. Це не входить до моїх прямих обов’язків, але тут я думаю не лише про особисту вигоду, а й про користь для компанії загалом.
Чи стикалися ви з технічними або організаційними складнощами, працюючи на американському ринку?
Я можу сказати, що американські роботодавці дуже цінують українських спеціалістів, адже ми більш ефективні й організовані. Наприклад, українські команди часто мають як продакт-менеджера, так і проджект-менеджера, які курують розробників з американської сторони. Тому організаційних проблем у мене не було.
Єдиною складністю були часові пояси — доводилося проводити мітинги ввечері, адже тоді в Нью-Йорку був ранок. Але всі підлаштовувалися одне під одного, і глобальних труднощів тут не виникало.
Які ключові технології та інструменти Java-розробки ви використовували у своїх проєктах в AgileEngine?
Основним інструментом був фреймворк Spring — а саме Spring Boot та Spring Batch. Це найпопулярніший фреймворк для backend-розробки на Java.
Також я використовував бази даних PostgreSQL і MongoDB, системи керування версіями GitHub і BitBucket, системи контролю бібліотек Apache Maven і Gradle, інструменти для комунікації Apache Kafka і RabbitMQ, системи логування Grafana і Kibana, хмарні сервіси AWS, а також Kubernetes для оркестрації додатків.
На початку роботи в AgileEngine було складно розібратися у всіх інструментах і зрозуміти, як вони взаємопов’язані. Деякі з них були специфічними саме для Data Science, і раніше я з ними не стикався. Але мені вдалося освоїти всі технології, і зараз я ефективно працюю з ними на своїх проєктах.
Ви згадали про поєднання завдань розробки та Data Science. Розкажіть детальніше про такі проєкти та що з цього для вас цікавіше?
На тому етапі моєї кар’єри, коли я працював Java-розробником, мені випала можливість долучитися до команди Data Science. Наш проєкт був пов’язаний із логістикою — потрібно було створити та підтримувати сервіс, у якому клієнт міг би відстежувати місцеперебування своїх відправлень і бачити прогнозовану дату доставки. Компанія називалася TransVoyant. Ми працювали над системами штучного інтелекту та алгоритмами машинного навчання, щоб точніше передбачати терміни доставки, а також аналізували та візуалізували дані, створювали дашборди.
У цьому проєкті ми використовували мову програмування Scala, яка базується на Java Virtual Machine. Вона схожа на Java, але має функціональний підхід замість об’єктно-орієнтованого. Також ми застосовували фреймворк Apache Spark для роботи з даними, як у дата-інженерії, так і в аналітиці. Деякі моделі штучного інтелекту ми створювали за допомогою Python.
У межах проєкту я поєднував завдання Data Science та Java-розробки, оскільки всі ML-моделі інтегрувалися в нашу загальну систему, і потрібно було забезпечити їхню взаємодію.
Обидва напрями мені були однаково цікаві, і я не віддав би перевагу жодному з них. Data Science більше про аналітику, алгоритми, математику та обробку даних. Java-розробка — про інженерію, логіку, бекенд. Мені подобалося перемикатися між різними завданнями й випробовувати себе в різних ролях.
Також я помітив, що мій досвід у різних командах можна було використовувати взаємно: наприклад, я володів аспектами, які добре розуміла одна команда, і навчав цьому іншу. Тобто фактично виконував роль ментора. Це мало велике значення для ефективної організації роботи.
Щодо менторства: які аспекти Java-розробки або Data Science ви вважаєте ключовими для навчання?
Якщо є можливість, я завжди допомагаю джунам на волонтерських засадах. Мені цікаво спостерігати, як вони ростуть і розвиваються, і я завжди радію їхнім успіхам.
З власного досвіду можу сказати, що кожному початківцю важливо спробувати себе в різних аспектах розробки: у full stack, backend і frontend. Новачок повинен виконати якомога більше різноманітних завдань — наприклад, виправити баг на бекенді, розробити новий функціонал, поспілкуватися з клієнтом тощо. Також потрібно мати уявлення про різні інструменти — наприклад, хмарні сервіси AWS, системи черг Kafka, RabbitMQ та інші.
Головне — освоювати інструменти на практиці. Тобто важливо не лише заглиблюватися в деталі розробки, а й розуміти загальну картину, щоб орієнтуватися в принципах роботи системи.
Якщо говорити про Java-розробників, то у моєму улюбленому фреймворку Spring важливо знати основи: принципи роботи, систему, компоненти, репозиторії, рівні взаємодії, роботу з даними тощо. Також важливо розуміти об’єктно-орієнтоване програмування. Але знову ж таки, пріоритет — це широке розуміння технологій, а не глибоке занурення в одну конкретну тему. Ми працюємо з великою кількістю інструментів, і якщо розробник не розуміє хоча б один із них, це може сповільнити процес роботи.
Якщо говорити в цілому про початківців в інженерії — що б ви порадили для ефективного старту кар’єри у великих компаніях?
Це може звучати очевидно, але щоб отримати хорошу роботу, потрібно бути кращим за своїх конкурентів і вміти правильно презентувати свої навички. Наприклад, в AgileEngine мене прийняли не просто як джуна, а як strong junior, тому що в мене вже був релевантний досвід.
Найкраща практика — це робота над власними міні-проєктами. Неважливо, де ви навчалися — у виші, за книжками чи онлайн-курсами. Головне — пробувати створювати щось власноруч. Можна почати з простого — наприклад, невеликого вебсайту або програми, що вирішує якусь конкретну задачу. Це покаже потенційному роботодавцю, що ви можете створювати реальні продукти, які працюють.
Також важливо мати портфоліо з проєктами, наприклад, на GitHub. Навіть якщо це університетські роботи — їх можна додати. Чим більше проєктів у портфоліо, тим краще.
Ще одна крута можливість — участь у хакатонах. Це чудовий спосіб зарекомендувати себе, навчитися працювати в команді та отримати технічний досвід.
Дуже важливий крок — проходження стажування (інтернатури). Це стане сильним аргументом у резюме, оскільки покаже, що хтось уже повірив у вас і вклав свій час у ваше навчання. У багатьох випадках це може стати вирішальним фактором під час працевлаштування у велику компанію.