Від створення AI для мобільної гри до роботи над Minecraft та військовими авіасимуляторами. Інтервʼю з Senior C++ Developer Лесею Осовською
Senior C++ Developer Леся Осовська має понад 16 років досвіду в індустрії. На початку кар’єри їй пощастило працювати над ігровим AI у Tom Clancy’s Rainbow Six, а згодом — долучитися до розробки таких знакових проєктів, як Assassin’s Creed, Battlefield та Minecraft.
В інтервʼю Леся розповіла про нюанси пошуку роботи в Швеції, про те, як важливо було в DICE «продавати» свою роботу керівництву. Пояснила, чому Mojang змушена досі підтримувати дві версії Minecraft — на Java та C++. А також — чому вирішила залишити геймдев і працювати над авіасимуляторами для військових.
«Якщо хтось і зможе стати програмістом, то це буде Леся». Про вибір професії і підтримку викладачів і колег
— Твоя кар’єра почалася у 2008 році. Зараз жінка в геймдеві — вже не така рідкість, але в той час це було чимось новим. Чи відчуваєш ти зміни за цей період? Як усе виглядало тоді, у 2008?
Так, у 2008 році, коли я отримала свою першу роботу програмістом у Харкові, я чула фрази на кшталт: «Жінка-програміст? Такого не буває». Але, якщо чесно, я на це не зважала — так само, як і в університеті.
У нашій групі було п’ять дівчат. І я зазвичай була однією з найбільш зацікавлених студенток. Один з викладачів казав: «Якщо хтось і зможе стати програмістом, то це буде Леся». Це додавало впевненості, тому я особливо не переймалася тим, що думають інші.
Мій перший вчитель і ментор, якому я завжди буду вдячна, казав мені таку річ: «Чоловікам у кар’єрі програміста не треба нічого доводити — вони за замовчуванням вважаються професіоналами. А тобі, як жінці, доведеться спершу довести, що ти взагалі можеш бути на рівні з чоловіками, а вже потім — що ти можеш бути хорошим програмістом». Тобто шлях жінки часто вдвічі складніший.
Коли я приєдналася до Gameloft, я добре зарекомендувала себе, колеги мене визнавали. У Ubisoft на мене також дивилися з повагою. Єдиний момент — один хлопець з щирою цікавістю на моєму інтерв’ю прийшов «подивитися на жінку-програміста». Але це звучало як напів жарт — напів комплімент. Загалом у мене позитивний досвід роботи в чоловічому колективі.
Коли я переїхала до Стокгольма, моя стать навіть стала перевагою. Компанії намагаються досягти гендерного балансу і якщо є два кандидати з однаковим досвідом, то перевагу могли надати жінці. На моїй першій роботі в Швеції я була єдиною жінкою-програмісткою в команді, але вже на останніх роботах баланс міг досягати 50 на 50.
— Чи є щось, що могло б заохотити більше дівчат йти в геймдев?
Так, коли я працювала в компанії DICE, у нас був волонтерський проєкт «Girls make games». Протягом дня на геймджемі дівчата вчилися створювати гру та презентували свої проєкти. Це був спосіб заохотити їх цікавитися геймдевом, не обов’язково програмуванням. Деякі дівчата проявляли великий інтерес.
В Україні зараз є багато чудових шкіл програмування. Мої доньки також цікавляться: старша навчається програмуванню, а середня займається дизайном. Багато залежить від батьків, які підтримують інтерес дітей до цієї сфери. Я помітила, що в Швеції підлітки значно менше цікавляться програмуванням, порівняно з Україною. Хоча у них є спеціалізовані коледжі геймдеву, де за два-три роки можна здобути професію.
Я вважаю, що за такими спеціалізованими школами майбутнє, вони дають конкретні навички, необхідні в роботі. Бо, наприклад, в моєму університеті частина предметів була абсолютно непотрібною.
— Ти свідомо обирала університет і професію?
Так, все почалося ще в дитинстві, коли батьки подарували мені PlayStation на день народження. Мені не завжди подобалося грати самій, але я обожнювала дивитися, як грають інші, особливо тато, який грав у Tomb Raider. Батько розповідав про процес розробки, наприклад, як довго розробники працювали над створенням води в грі. Це мене вразило, і я вперше подумала, що геймдев — дуже цікава сфера, і що одного дня я могла б стати частиною цього.
Пізніше мама знайшла для мене спеціалізований ліцей у Харкові з напрямком програмування, і я поступила туди після дев’ятого класу. Для дипломного проєкту створила свою першу гру — карткову, з елементами ігрового штучного інтелекту, в якій два комп’ютерні гравці змагалися між собою.
Після ліцею я вступила до Харківського національного університету радіоелектроніки (ХНУРЕ) на факультет Комп’ютерної інженерії і управління. Там я почала вивчати С++. Проте перед університетом я також спробувала себе в 3D-дизайні на курсах 3D Max, думаючи, що, можливо, саме створення графіки мені більше підійде. Але зрозуміла, що логіка, математика та алгоритми мене приваблюють більше, ніж моделювання.
— В чому для тебе полягає задоволення від програмування?
Я люблю детективи, і програмування — це постійний пошук ідеального рішення. Звісно, ідеального рішення часто не існує, тож ти розмірковуєш над оптимальними підходами, які можуть підходити саме для цього завдання, або думаєш, як їх масштабувати. Це завжди розгалуження, сценарії та аналіз. Іноді я навіть вирішую задачі у фоні, поки займаюся іншими справами, рішення можуть прийти навіть уві сні.
Ще одна цікава частина — це знаходити помилки, особливо в старому, неакуратному коді. Дехто не любить торкатися чужого коду, боїться зламати щось через нестабільність, але для мене це дуже цікаво: знайти вразливе місце, покращити його, написати щось надійніше.
Ще один кайф у тому, що результат ти бачиш одразу. Коли розробляєш гру, можна запустити її і відразу перевірити, як працює твій код. Наприклад, у моєї доньки на курсах з програмування Minecraft Education легко побачити результат, як побудована стіна чи який об’єкт додано, і одразу зрозуміти, якщо щось пішло не так. Це приносить задоволення, особливо на контрасті з тим, як ми колись вчилися на «чорному екрані» консолі.
Моя основна мова програмування — C++. Я трохи працювала з Python та Objective-C, але саме C++ знаю найглибше. Інші мови цікаві, але після багатьох років роботи з C++ я просто «відчуваю» її. Читання книжок по С++ захоплює мене, як пригодницький роман.
«Я завжди хотіла опинитися в епіцентрі повноцінної розробки гри». Про роботу над Assassin’s Creed і бажанням мати творчу свободу
— У тебе дуже цікавий кар’єрний шлях. Розкажи, з чого все починалось? Які рішення доводилось приймати на початку кар’єри, які були челенджі?
Моя перша компанія — Program-Ace у Харкові, там ми працювали над власним ігровим рушієм. Це був великий проєкт, і для мене, як студентки, це був важливий досвід. Але найулюбленішою компанією для мене стала Gameloft, де я мала ідеальну роль, якої досі не змогла повторити. У Gameloft ми працювали над створенням гри Rainbow Six для iPhone та iPad, і мені випала можливість займатися ігровим AI для напарників головного героя.
Я мала розробити всю логіку для цих напарників: вони супроводжували героя, захищали його, виконували команди, зачистку приміщень тощо. Разом із геймдизайнером ми розробляли сценарії, і я програмувала AI-дерева поведінки для них, що створювало реалістичні ситуації. Це було дуже цікаве завдання, потрібно було не тільки будувати розгалужені сценарії поведінки, але й оптимізувати код і забезпечувати доступ геймдизайнерам для налаштування AI.
Ще одна цікава задача виникла через обмеження пам’яті на iPhone у 2010 році. Ми не могли програвати відео, а потрібні були катсцени для сюжетних моментів. Я запропонувала заскриптувати сцени замість відтворення відео. Мені вдалося знайти спосіб експортувати дані про об’єкти, камери і анімації катсцен з 3D Max для застосування їх у грі. Рішення включало перевикористання ресурсів та анімацій, що значно зекономило пам’ять. Ми були дуже задоволені результатом: катсцени працювали гладко та не перевантажували систему.
Це був справжній виклик і чудова співпраця команди.
В Gameloft я мала повну свободу творчості. У великих компаніях, таких як EA DICE у Швеції, такої свободи часто не вистачає.
— Як ти потім потрапила у Ubisoft? І яка роль була там?
Після Gameloft я переїхала до Києва. Мій друг, з яким ми разом працювали над Rainbow Six, порекомендував мене до Ubisoft. У Ubisoft ми саме запроваждували Agile методологію. На той час в Україні більшість компаній використовували методологію Waterfall, а Agile лише починав набирати популярність.
— Розкажи більше про гру, про Assassin’s Creed, які рішення тобі доводилось приймати на своїй позиції?
В Ubisoft у Києві моя команда відповідала за соціальну мережу гри. Головна частина розробки — геймплей, AI та інші основні компоненти гри — відбувалася у Франції, і ми не мали доступу до них. Наша ж робота полягала у створенні функціоналу для PC-версії.
Крім нашої команди, в офісі були й інші команди, які займалися різними частинами гри, такими як інтерфейс для PC, серверна частина, матчмейкінг тощо. Ми також працювали з UI-артистами, які створювали візуальні елементи інтерфейсу, адаптували меню та врахували відмінності в UX. Цікаво, що основною платформою для гри тоді були консолі — PS, Xbox — і це було трохи незвично, адже зазвичай основною платформою є PC. У Assassin’s Creed було навпаки.
Окрім цього, я займалася інтеграцією соціальних функцій — переписка, друзі, недавні гравці, — усе це було нашою відповідальністю. Я була лідом міні-команди і це був дуже цікавий досвід.
На Assassin’s Creed ми багато працювали над фіксами, робили різні екстеншени, специфічні елементи. Але мені завжди хотілося чогось більшого. На той час у багатьох програмістів в Україні було відчуття, що нам не дають справжньої відповідальності, що нам не дозволяють займатися чимось важливим.
Згодом з’явилося бажання опинитися в епіцентрі повноцінної розробки, де гру створюють повністю з нуля. Думаю, багато українських розробників тоді відчували те ж саме.
Хоча зараз знаю українських розробників, які працюють над Fortnite віддалено, але ще до пандемії COVID-19 можливостей було значно менше. Тому я рада, що зараз українські студії розвиваються і їхні можливості збільшуються.
«В процесі найму я пройшла 7 інтерв’ю». Про те, як виглядає hiring в Швеції
— Я бачу, що ти була 4 роки в maternity leave. Як після 4 років повертатися на роботу? Мені здається, це емоційний виклик.
Це дійсно так і є. Ми переїжджаємо до Швеції, і в мене на руках
— Як виглядає процес найму в Швеції?
В Швеції все відбувається дуже повільно, тому я вирішила розпочати підготовку за декілька місяців. Нове резюме та кавер-леттер надіслала у дві компанії, які мене зацікавили: King та DICE. У King мене порекомендував друг, який працював там, а в DICE я подалася самостійно, бо дуже хотіла там працювати.
У King в процесі найму я пройшла сім інтерв’ю. Це було дуже довго і виснажливо. До речі, нікого не бентежило, що 4 роки я провела у декреті. Для Швеції це цілком нормально. Натомість мене оцінювали як особистість: чи підходитиму я команді, чи збігаються наші цінності.
В Україні часто на співбесідах запитують технічні дрібниці на кшталт «Що таке поліморфізм?». У Швеції ж більше цінують, яка ти особистість, чи легко з тобою працювати в команді, як ти мислиш. На мою думку, софт-скіли важливіші за технічні знання, оскільки знання можна здобути. Після всіх семи співбесід і тестового завдання в King мені зателефонували і нарешті запропонували роботу.
Паралельно я проходила співбесіди в DICE. У них було три інтерв’ю та тестове завдання — створити гру на кшталт «Space Invaders». Але після тестового вони просто зникли.
Я вже погодилася на пропозицію в King, вийшла на роботу і буквально за тиждень-два DICE нарешті відповідає, що мій тест їм сподобався. Зрештою, DICE таки зробили мені пропозицію, але запропонували роль в команді UI, а я дуже хотіла займатися геймплеєм. Тож я вирішила залишитися в King.
У King я швидко зрозуміла, що не зможу повністю реалізувати себе. Хоча я люблю працювати з проблемним кодом, там його стан був дуже поганим. Я знайшла і полагодила серйозну помилку із зайвим завантаженням ресурсів. Рівень знань більшості програмістів був низьким, часто можна було почути: «Що робить цей assert? Може, його просто видалити?»
Зрештою, я вирішила, що варто перейти в DICE. Рівень знань програмістів там був значно вищим, а поставлені задачі сприяли моєму подальшому професійному розвитку.
Офіс DICE«Одного разу я прийшла в офіс, і мені сказали, що мою роботу видалили». Про роботу над Battlefield і рушієм Frostbite
— Як виглядала робота в DICE? Чи тобі приємно було працювати над таким великим тайтлом, як Battlefield?
Коли працюєш над великим тайтлом, відчуваєш себе лише маленькою людиною у величезній машині. Чим більший проєкт, тим менше простору для особистої ініціативи. Після 15 років у цій індустрії я зрозуміла, що мене більше цікавить щось менш масштабне. Можливо, не зовсім інді, але проєкти, де можна брати на себе більше різної відповідальності, де є місце для креативності.
В DICE мені дали завдання, з яким я раніше не мала досвіду, — роботу над рендером та оптимізацією. Це був для мене абсолютно новий напрямок. Рендеринг потребує окремого вивчення, специфічної математики, і ти не можеш просто взяти і стати фахівцем у цій сфері.
Але моє завдання полягало в оптимізації рендерингу для UI, тому мені потрібно було лише зануритися в цю тему.
Я дуже ретельно проходила рев’ю. Одного разу процес зайняв цілий тиждень. Я мала заміряти продуктивність на всіх платформах до і після внесення змін, створити діаграми, підготувати презентацію для підтвердження ефективності моїх оптимізацій. Це був неймовірний досвід, особливо враховуючи, що мій код мав потрапити в core частину гри, яку використовують усі.
Одного разу я прийшла в офіс, і мені сказали, що мою роботу видалили. Моя проблема полягала в тому, що я не знала, що важливо «продавати» свою роботу. В Україні ми такого не робили: нам давали задачу, ми її виконували, заливали зміни, і хтось їх тестував. Тут же я зіткнулася з тим, що ти маєш презентувати свою роботу. Після завершення задачі потрібно було створити презентацію, показати, як було і як стало, пояснити зміни з візуальної точки зору та показати цифри продуктивності. І фактично «продати» це керівництву.
Якщо б я тоді презентувала свою роботу, то її б, можливо, не видалили, адже вона працювала прекрасно. Але після того, як рішення вже прийняте, змінити нічого було не можна, і це було дуже прикро.
Ми намагалися покращити читабельність тексту в грі. Коли був білий текст на білому фоні, наприклад, на небі, він ставав нечитабельним. Раніше для цього додавали чорні градієнти під текстом, але це виглядало не дуже добре — були постійні чорні плями, які нікому не подобалися.
Ми з моїм ментором вирішили, що можна зробити так, щоб ці темні плями були ледве помітними, і, якщо в них не було потреби, вони взагалі не рендерилися. Я розробила алгоритм для цього, але не встигла його презентувати, а тим часом керівництво прийняло рішення, що вони хочуть використовувати тіні для кожної букви.
Над цим завдання паралельно вже працював рендер-програміст. Мій код і досвід, звісно, залишилися, але в кінцевому результаті затемнення залишили тільки в деяких місцях. Моя оптимізація залишилася, але не на такому глобальному рівні, як я сподівалася.
Зрештою, мені вдалося використати мій алгоритм, щоб змінювати інтенсивність тіні. Цей алгоритм спрацював дуже добре. Тінь з’являлася лише тоді, коли це було потрібно, і залишалася ненав’язливою. Я рада, що врешті-решт змогла «продати» цю ідею і зробити її частиною проєкту.
Через досвід з оптимізацією затемнення під текстом ми вирішили також оптимізувати процес блюру. Це була досить складна операція, оскільки у нас було багато замилених елементів в HUD. Я використала схожу технологію, що й для оптимізації технології затемнення, і це рішення дуже сподобалася команді Frostbite.
Вони навіть попросили мене попрацювати над адаптацією цієї технології у рушії. Це був мій значний вклад у проєкт.
Ця задача дала мені розуміння, що мене приваблює не так розробка ігор, як створення систем для ігор: робота над ігровими рушіями, такими як Frostbite чи Unreal. Я намагалася перейти до команди Frostbite, але перехід не вдалося здійснити.
— Розкажи про особливості Frostbite. Чим він відрізняється від інших рушіїв?
Frostbite — це внутрішній ігровий рушій Electronic Arts, на якому створені майже всі їхні ігри. Він схожий на Unreal, але має складнішу архітектуру. У ньому менше можливостей для візуального програмування, як в Unreal, і документації не так багато, а також є Legacy Code.
Коли ти працюєш над грою, то часто обмежений можливостями самого рушія і налаштовуєш функціонал під специфіку конкретної гри. Але коли ти працюєш над рушієм, твої рішення повинні бути максимально універсальними, оскільки їх будуть використовувати в різних іграх. Це вимагає глибокого розуміння можливих сценаріїв. У результаті ти працюєш над серйознішими, складнішими системами, які потребують глибокої оптимізації.
Робота над рушієм вимагає значно вищої якості коду, ніж при роботі над конкретною грою. Якщо в розробці ігор можуть з’явитися термінові запити з підходом «зробити як-небудь, аби було готово завтра», то в розробці рушія процес значно серйозніший. Код повинен бути супер надійним, оскільки від нього залежить робота багатьох проєктів.
Це саме те, що мені хотілося робити — серйозні, якісні проєкти, які забезпечують надійну основу для багатьох ігор.
Офіс Mojang— Також ти працювала у Mojang?
В Mojang я працювала недовго. Це був той ще виклик, адже у них є велика проблема, про яку не всі знають: існують дві версії Minecraft. Одна з них працює на всіх платформах, а інша — стара Java-версія, яка доступна тільки на ПК. Саме з неї все починалося.
Java-версія більш гнучка, і її можна налаштовувати під свої потреби, тому досі є багато людей, які грають тільки в неї. Через це компанія має підтримувати обидві версії. Їхня основна задача — забезпечити, щоб обидві версії були абсолютно ідентичні, що є надзвичайно складним завданням. Розробники повинні паралельно працювати над обома версіями: усе, що створюється для Java, потрібно реалізовувати і в C++ версії, і навпаки.
Java-версія компілюється швидше, що дозволяє їй швидко рухатися вперед, але це створює ризик, що версія на C++ може відставати. Тому всі процеси спеціально сповільнюють, щоб підтримувати синхронізацію, і це стало їхньою постійною проблемою.
Я намагалася працювати над рефакторингом, і якщо б я залишилася в Mojang, я хотіла б перейти до команди, яка займається саме розробкою і покращенням систем. У них є команда, яка відповідає за оптимізацію робочих процесів і розвиток рушія гри. Мені це здавалося значно цікавішим, ніж програмування окремих блоків, яким займалася геймплей-команда з
«Моя роль буде зосереджена на розробці авіасимуляцій для тренування військових». Про рішення піти з геймдеву і нову роботу
— Чому ти вирішила взагалі піти з геймдеву?
До мене поступово приходило розуміння, що я хочу відійти від ігор. Я хотіла робити щось значуще, щось корисніше, ніж ігри. Я обирала між Elekta, що займається радіотерапією, та компанією, яка розробляє симуляції для тренування хірургів. Мій досвід у геймдеві, знання C++ і розуміння симуляцій дозволяли працювати і бути корисною в обох компаніях.
Я прийняла пропозицію від Elekta, там ми розробляли софт для обладнання для радіотерапії. Це великий апарат, в якому пацієнт знаходиться в спеціальній кімнаті, а радіація спрямовується на ракову пухлину з різних сторін під певним кутом. Виходить, що пухлина опромінюється, а здорові клітини встигають відновлюватися між сеансами. Здорові клітини регенеруються швидше, ніж ракові, що зрештою допомагає знищити пухлину.
— Ти відчула, який рівень відповідальності на тобі лежить?
Так. Насправді мені було навіть страшно від відповідальності. В Elekta рівень коду — бог. Я ніколи такого не бачила. Кожна строчка перевіряється буквально до останньої букви, оптимізація та точність на першому місці.
Фундаментальна різниця між розробкою для гри та софта в медичній сфері полягає в тому, що в геймдеві код повинен бути стабільним, щоб гра не крашилася і не втрачала гравців. Навіть якщо щось іде не так, гра має намагатися «підлаштуватися», наприклад, дозавантажити текстури пізніше. А в радіотерапії навпаки: якщо система виявляє навіть мінімальну невідповідність, вона повинна негайно зупинитися. Апарат для радіотерапії не може продовжувати роботу, якщо щось пішло не так — це питання безпеки пацієнтів.
Мені потрібно було перебудувати своє мислення. Це було дуже цікаво. Але поки я була у декреті, нашу команду розформували, а мені запропонували роль, яка мені не дуже підходила.
— Судячи з LinkedIn, ти нещодавно шукала роботи. В Україні зараз знайти роботу все складніше, порівнюючи з ситуацією на ринку 2-3 роки тому. Чи в Швеції так само?
Я думаю, так, ситуація схожа. Ти маєш на 90% підходити під опис вакансії. Коли я почала шукати роботу, помітила, що цей процес став складнішим, ніж зазвичай.
По-перше, на ринку менше компаній, які наймають працівників. По-друге, відбувається багато скорочень, і через це конкуренція на кожну позицію зростає. Наприклад, одна з компаній, куди я подалася в червні, відповіла мені тільки у жовтні.
Під час пошуку я помітила цікавий нюанс: компанія швидше розглядає резюме, якщо подаєшся напряму, або, ще ефективніше — через співробітників компанії. Якщо я хочу податися в компанію, я шукаю знайомих в LinkedIn і спочатку зв’язуюсь із ними. Навіть якщо ваш контакт знає вас поверхнево, для компанії це все одно плюс, а для людини — можливий бонус за рекомендацію.
— Це корисна порада. Чи ти вже знайшла роботу після стількох місяців пошуку?
Так, я отримала бажаний офер і вже підписала контракт. Це робота з авіасимуляторами для військових, і я доклала значних зусиль, щоб отримати цю позицію. Моя роль буде зосереджена на розробці авіасимуляцій для тренування військових, що дозволяє їм тренуватися віртуально, у безпеці, а одна реальна година польоту може дорівнювати приблизно десяти віртуальним годинам тренувань.
Там буде цікава робота, яка включає завдання зі штучного інтелекту, оптимізації систем, рефакторингу, а також розробки різних систем на рівні рушія. Вони працюють на Unreal Engine, але активно доопрацьовують його під свої потреби, тому це буде для мене чудовою нагодою отримати досвід роботи з Unreal, якого я ще не мала.
Ці авіасимуляції мають бути надзвичайно реалістичними, і я знаю, що на цій платформі вже тренуються українські військові в США. Я відчуваю, що ця робота — мій внесок у майбутнє, я зможу використати свій досвід в ігровій індустрії, щоб допомагати військовим і Україні.
2 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів