Інтерв'ю: Розробник Instagram Вадим Пінчук | robot_dreams
Для відстеження статусу замовлення - авторизуйтесь
Введіть код, який був надісланий на пошту Введіть код із SMS, який був надісланий на номер
 
Код дійсний протягом 2 хвилин Код з SMS дійсний протягом 2 хвилин
Ви впевнені, що хочете вийти?
Сеанс завершено
На головну
Перша робота в Samsung, потім — Meta та Instagram: український розробник — про те, кому не сподобається бігтех

Перша робота в Samsung, потім — Meta та Instagram: український розробник — про те, кому не сподобається бігтех

І чим Flutter перспективніший за React Native (і чи є сенс його вивчати новачку)

У студентські роки Вадим Пінчук випадково захопився мовою програмування Java. Потім він влаштувався у Samsung, де так само випадково став мобільним розробником. Після цього Вадим змінив не одну компанію, поки не поставив собі за мету потрапити у бігтех. Останні два роки він працює над застосунком Instagram у Meta.

В інтерв’ю robot_dreams Вадим Пінчук розповів про найефективніший шлях у бігтех, підходи до роботи в Instagram, а також технології Flutter і Dart, які потрохи захоплюють світ мобільної розробки.

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

Досьє:

Вадим Пінчук — Mobile Software Developer у FAANG, з 2021 року розробляє застосунок Instagram. Живе та працює в Лондоні.

Лектор курсу-професії Flutter Mobile Developer у robot_dreams. Має 8 років досвіду Android-розробки та 3 роки кросплатформної мобільної розробки Flutter. Веде технічні блоги на HackerNoon і Medium, менторить програмістів-початківців на ADPlist.org.

Вадим Пінчук — лектор курсу Flutter Mobile Developer

«Реферальні програми — найефективніший шлях у FAANG»

— Одразу після випуску з університету ви потрапили у Samsung. Чи свідомо ще зі старту хотіли працювати саме у великих міжнародних компаніях?

Ні, насправді й мій вибір стати програмістом не був дуже свідомим. У виші я навчався за спеціальністю «Захист інформації в комп'ютерних системах і мережах» — це скоріше про криптографію та алгоритми. А програмування мені здавалося нудною роботою: писати код, який ніхто не бачить, але він якось працює (сміється).

Але так сталося, що я мав трохи вільного часу після випуску з університету. У мене вже були базові знання з Java, і завдяки натхненню, отриманому від найкращого викладача з програмування Каплун В. А., та наслідуючи приклад деяких друзів, я почав вивчати цю мову глибше. І Java мене зацікавила: досить проста і водночас красива. Лише згодом я дізнався, що вона може працювати як на бекенді, так і на фронтенді.

У київський R&D-офіс Samsung я прийшов у 2012 році, це була моя перша робота. Компанія тоді активно розширювалася, і я вдячний за те, що вони брали вчорашніх студентів. На інтерв’ю перевіряли здебільшого теорію та дали кілька легких алгоритмічних і математичних задач.

Оскільки я не мав жодного досвіду, компанія могла призначити мене на будь-яку Junior-роль — залежно від своїх потреб. Вже у команді мені сказали, що я буду Android-програмістом. Я здивувався, адже майже нічого не знав про мобільну розробку. Але поступово навчився і зараз радий, що все склалося саме так.

— Що було далі? Як розвивалася ваша кар’єра?

Samsung був доволі цікавим стартом. Утім, згодом я побачив, що мій розвиток загальмувався. Тоді почав експериментувати з технологіями. Наприклад, спробував самостійно написати мобільний застосунок — без будь-яких додаткових бібліотек. Мені вдалося, і це дало поштовх і далі підвищувати свій рівень.

У 2015 році я пішов із компанії та протягом наступних років змінив ще кілька місць роботи як Android-розробник. З середини 2018 року перейшов на кросплатформну розробку — мене захопив цей шлях після того, як на конференції Google I/O презентували фреймворк Flutter.

Зрештою у 2021 році влаштувався у Meta (тоді ще Facebook) — для цього знову повернувся до нативної розробки під Android.

— Як потрапили до Meta? Чому обрали саме цю компанію?

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

До інтерв’ю я інтенсивно готувався близько 4 місяців, а загалом весь процес зайняв десь 9 місяців до отримання офера. Зазвичай інтерв’ю у FAANG складаються з кількох етапів:

  • Coding — перевіряють підхід до нечітко поставлених задач, вміння уточнювати потрібні деталі, озвучувати думки та власне писати читабельний та робочий код;
  • System Design — визначають ваш масштаб мислення, чи ви вмієте думати поза рамками та проєктувати великі системи, маючи обмежені вхідні дані;
  • Behavioral — дивляться, як ви працює в команді, чи можете комунікувати зі стейкхолдерами, як розв’язуєте конфлікти й працюєте над фейлами.

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

Підготувавшись, я попросив друзів з Amazon, Google та Meta надіслати моє CV рекрутерам через внутрішні реферальні програми. Це найефективніший шлях у FAANG, адже він збільшує шанс відбору кандидата на співбесіду — як спеціаліста, за якого готові поручитися поточні працівники компанії.

В Amazon я не дуже хотів працювати: з огляду на те, що чув від працівників компанії, а також власне з їхніх принципів лідерства я зрозумів, що це не моє. Тож у цю компанію я подавався заради того, щоб здобути досвід інтерв'ю та зрозуміти, де саме потрібно підтягнути знання, аби бути готовим до конкурсу в Google та Meta.

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

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

«У вас з’являється можливість впливати на життя мільйонів користувачів. Але це не завжди перевага»

— Як ви стали частиною команди, яка створює Instagram? Що саме розробляєте?

Моя робота в Meta почалася з буткемпу, де я міг познайомитися з різними проєктами та обрати свій. У мене одразу було два фаворити — WhatsApp та Instagram. Спочатку я більше схилявся до WhatsApp, там була класна команда і крутий менеджер.

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

Лондонська команда Instagram працює над доменом, пов’язаним із розробкою функціональності для блогерів, які заробляють гроші через застосунок. Як правило, це різні інфлюенсери, які роблять колаборації з відомими брендами, беруть участь у партнерських програмах тощо.

Щодо продукту і про щоденні завдання розповісти не можу через NDA, але зазвичай вони залежать від етапу проєкту:

  • на початкових фазах завжди багато мітингів, узгоджень, побудови роадмапів;
  • потім — розробка, репортування про прогрес, доставка нової фічі користувачам, а також аналіз того, наскільки успішним виявився проєкт.

Маю зазначити, що незабаром Meta переносить команду Instagram з Лондона у США — для більш ефективної співпраці між різними командами. Я радий був працювати з усіма колегами протягом двох років, вони неймовірні. Втім, поки що не знаю, що робитиму далі: перейду на інший проєкт серед тих, що доступні в Лондоні, або шукатиму іншу компанію.

— У чому особливості роботи у бігтех? Які є переваги та недоліки?

В Instagram доволі цікаві та незвичні підходи до роботи, відмінні від українського IT. Головна особливість — у тому, що інженери тісно співпрацюють з колегами як по вертикалі, так і по горизонталі.

Робота у вертикальній осі полягає у співпраці з XFN (cross-functional) членами команди, як-от дизайнерами, рисерчерами та власне директорами й усім менеджментом. Робота по горизонтальній осі — це робота з сусідніми командами, у цій же організації або навіть ширше.

Тож тут я отримав досвід лідерства — зрозумів, як потрібно будувати комунікацію та якою бути особистістю, щоб досягати успіху в проєкті. Це, безперечно, перевага.

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

Ще один момент: бігтех-компанія працює як машина, налаштований механізм. Вона не встигає за всіма тенденціями, зокрема у технологіях. Немає часу оновлювати технічну складову продукту, який уже працює. А люди в цьому механізмі — просто замінювані юніти. Втрачається відчуття індивідуалізму та власної важливості для успіху всього проєкту.

Тож якщо вам цікаво мати більше важелів впливу на процеси та розвиток продукту, то краще розглянути роботу в маленьких компаніях або стартапах.

— Розкажіть детальніше про технології, з якими працюєте. Який стек використовуєте?

Здебільшого я працюю зі стеком Android. Також, як і скрізь у бігтех, у Meta є багато внутрішніх мов програмування та фреймворків. Деякі фреймворки мають відкритий код і можуть використовуватися публічно, на мою думку, в чомусь навіть переважаючи такі технології, як Jetpack Compose. Однак адаптація декларативного UI, як-от Compose, відбувається поступово і всі інструменти тісно взаємодіють один з одним.

Конкретний стек залежить від проєкту й команди. Наразі є загальна тенденція оновлення коду з Java на Kotlin, і на сьогодні код майже повністю конвертований у Kotlin. Адже Java — вже доволі застаріла мова, яка тягне за собою багато непотрібних речей, що не використовуються в сучасному мобільному світі.

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

Можливо, за один-два роки більша частина коду буде мігрована в архітектуру MVVM. Зараз ця ініціатива дуже активно просувається крутими інженерами, з якими я маю честь працювати. Хоча не виключено, що за цей час зʼявляться нові підходи й MVVM буде вже не актуальним.

«Є тренд, що дедалі більше нативних розробників переходять на кросплатформу»

— У robot_dreams ви викладаєте Flutter і Dart. Чим цікаві ці технології?

  • Flutter — це кросплатформний фреймворк, який створили в Google. Він дозволяє розробляти застосунки під Android, iOS, web, Windows, Linux і macOS. Для перших двох застосунок точно працюватиме чудово, для інших — доволі непогано. Для десктопів потрібно буде підлаштувати. Творці Flutter надихалися React Native, але у багатьох речах він досконаліший та суттєво швидший.
  • Dart — мова програмування, яка використовується у Flutter. Її теж створили в Google ще у 2011 році — як внутрішню мову. Спочатку вона використовувалася на чистому бекенді, а згодом поширилась і на фронтенд. Dart не всім подобається, адже виглядає доволі дивно — як гібрид JavaScript, Kotlin і Java. Водночас вона не схожа на жодну зі старих зрозумілих мов.

Одна з особливостей мови Dart — у тому, що вона однопотокова. З одного боку, це мінус — неможливо виконувати обробку даних у паралельних потоках. З іншого — плюс, адже не потрібно керувати доступом до одного обʼєкта в памʼяті з різних потоків, а тому менше вимог до знань розробника. До того ж можливо запустити окремий Isolate (щось типу Worker або Service з Android-світу) для обробки даних в окремому процесі, і тим самим розвантажити головний процес, у якому працює додаток.

І Flutter, і Dart стрімко розвиваються. Наразі ці технології широко використовують у Google, Alibaba Group, BMW, eBay та інших менших, але не менш відомих компаніях.

— Мобільним розробникам-початківцям є сенс одразу вчити Flutter? Чи краще почати з нативних фреймворків?

Мобільний пристрій — це середовище з обмеженими ресурсами, тому застосунок має дуже чітко керувати ресурсами процесора: не витрачати зайву пам'ять, заряд акумулятора, інтернет-трафік. Крім того, особливість мобільної розробки — у необхідності отримувати дозволи на використання камери, контактів, Bluetooth тощо.

Завдання початківців — добре зрозуміти, як це все працює. Тому для початку варто спробувати написати кілька нативних застосунків.

Але загалом можна розпочати свою кар'єру як кросплатформний розробник, у цьому немає нічого поганого. Тоді я рекомендую звернути увагу саме на Flutter або React Native. На мій погляд, Flutter — перспективніший, адже React Native уже не так інтенсивно підтримується з боку спільноти розробників.

— А завдяки чому Flutter витісняє React Native?

React Native був першим фреймворком із декларативним UI. Наприклад, старий нативний Android вимагає використовувати мову XML для опису UI, а також Java або Kotlin для опису бізнес-логіки між UI-компонентами.

Певно, розробники Flutter надихалися React Native. Але у нього зовсім інші принципи роботи. А головна перевага — в тому, що він новіший. І спільнота не перестає його розвивати.

Flutter зʼявився в компанії Google та активно розвивається як опенсорс-проєкт — завдяки тому, що Google підтримує Flutter-спільноту.

Втім, згідно з останніми даними, працівники Google складають лише 1% від усіх розробників, які роблять активний внесок у покращення фреймворку. Решта 99% — це програмісти з різних компаній по всьому світу, які є частиною великої спільноти. Завдяки такій залученості більшість проблем розв’язується швидко. Однак є і зворотний бік медалі, властивий будь-якому опенсорсу, — не всі люди пишуть гарний код або розв'язують проблеми правильно.

— Яким ви бачите майбутнє мобільної розробки? Воно — за кросплатформними фреймворками?

Google від початку позиціював Flutter як інструмент для майбутньої єдиної операційної системи Fuchsia, яка мала б прийти на заміну Android та iOS. Але останнім часом я не чув жодних новин щодо цього проєкту.

Думаю, що нативна розробка нікуди не зникне. Але й Flutter та інші кросплатформні інструменти будуть розвиватися та захоплювати ринок. Вони ефективніші в плані ресурсів, адже дозволяють залучати менше програмістів, скоротити час на розробку та спростити подальшу підтримку застосунку.

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

Водночас є тренд, що на кросплатформу переходить дедалі більше нативних розробників з усіх платформ — iOS, Android, веб. До речі, нещодавно JetBrains випустив Compose Multiplatform і Kotlin Multiplatform. Тож Android-розробники, які знають Jetpack Compose та Kotlin, тепер можуть писати кросплатформні застосунки за допомогою цих фреймворків.

Ще статті
Експертки про те, як оцінюють кандидатів на нетехнічних інтерв’ю
Частина 2. Робота із записами: вставка, читання, змінення й видалення