Як із локалізатора я став Unity Developer. Досвід Ярослава Руденка з Plarium
Мене звуть Ярослав, і вже два з половиною роки я працюю в Plarium на позиції Unity-розробника. Але прийшов у компанію я набагато раніше, у 2016 році, як спеціаліст із локалізації.
У цій статті розкажу про те, як мені вдалося перейти на технічну спеціальність: як ухвалював рішення, які ще варіанти розглядав, що робив, з якими труднощами довелося боротися. Мій досвід стане в пригоді тим, хто хоче перейти в Unity-розроблення, а також розробникам-початківцям.
Мій бекграунд і робота у відділі локалізації Plarium
За освітою я перекладач. Профільні мови — англійська та французька. Почав працювати за спеціальністю ще на третьому курсі університету й за 12 років професійної діяльності побував у різних ролях: копірайтер, перекладач, редактор, спеціаліст із локалізації. Маю невеликий досвід роботи синхроністом. Моє портфоліо проєктів доволі різноманітне, та спеціалізувався я на контенті про ігри й технології, а також на локалізації ігор.
За межами Plarium я встиг перекласти кілька мобільних ігор, попрацювати над українською локалізацією App Store. Я кілька років працював як менеджер проєктів в аутсорсингових компаніях, а також пробував себе в ролі вчителя англійської.
У Plarium починав як позаштатний спеціаліст: перекладав статті про дизайн та розроблення ігор, які компанія публікувала в соцмережах. Коли перейшов у штат, почав також працювати з внутрішньою документацією, ігровими текстами. За п’ять років у департаменті локалізації мені пощастило долучитися до перекладу більшості ігор української студії — це щонайменше 11 тайтлів.
Перекладав також навколоігровий контент: новини, статті, дописи в соцмережах, промоматеріали, субтитри для відео. Іноді допомагав готувати тексти для озвучування. Крім безпосередньо перекладу займався написанням документації для департаменту, трохи допомагав з адаптацією новачків, іноді тестував та менеджив локалізацію. Останні кілька років на цій посаді я переважно працював над флагманськими іграми RAID: Shadow Legends та Mech Arena.
У Plarium доволі нетиповий підхід до роботи з текстами та локалізацією, навіть як для продуктової компанії. По-перше, у нас є невеличкий штат райтерів, носіїв англійської мови — американців, британців, канадців, австралійців тощо, — яких тривалий час хантили в усьому світі й запрошували працювати в Харків. До переходу на віддалену роботу у 2020 році всі вони щодня ходили в офіс. По-друге, ми локалізуємо частину мов силами штатних працівників, а більшість віддаємо фрилансерам, з якими працюємо напряму, а не через посередників. Такий підхід гарантує кращий контроль над якістю, дає змогу опрацьовувати більші обсяги тексту й подекуди є гнучкішим.
Несподіваний побічний ефект — неабияка концентрація талановитих та розумних людей, райтерів, перекладачів і редакторів, які щодня перебувають у безпосередньому контакті та створюють атмосферу, де хочеться рости й розвиватися. Ми з колегами читали книжки, грали в ігри, проходили курси, брали участь у конференціях із перекладу онлайн та офлайн і багато дискутували про якісні тексти. Я досі люблю згадувати ці часи, бо кожен у команді в усіх сенсах горів роботою.
Зацікавленість різними сферами геймдеву в мене виникла від початку роботи в компанії
Як позаштатний, а згодом і штатний перекладач, я брав у роботу статті про 2D- і 3D-арт, програмування, геймдизайн, проєктування рівнів, саунд-дизайн тощо. Попередніх знань про жодну із цих галузей я не мав. Тому доводилося в міру можливостей розбиратися.
Для перекладачів це типова практика — опановувати незнайомі теми та поняття. В університеті на кафедрі теорії та практики перекладу нас привчали працювати з «некомфортними» текстами на кшталт інструкцій, рецептів, юридичних документів тощо. Припускаю, що ті, хто пройшов щонайменше чотири роки навчання та зрештою став на професійний шлях перекладача, мають схильність цікавитися більшим спектром тем і хист розбиратися в них з особливою втіхою для себе.
Ось чому, почавши роботу в Plarium, я не просто занурювався в кожну тему, про яку писав, а робив це із чималим ентузіазмом. Читав статті, дивився відео, консультувався зі спеціалістами з компанії, іноді просив вичитувати та коментувати деякі переклади. Мені, посередньому гравцеві та нетехнічному спеціалістові, геймдев відкривався з іншого боку. Виявилося, що це складна та цікава сфера, а кожна галузь — це кроляча нора, куди можна провалитися на десятиліття. З деякими темами хотілося розібратися навіть глибше, ніж цього потребували мої обовʼязки перекладача, і я сподівався, що колись така нагода трапиться.
Минуло три роки, настав
Виявляється, мене досі цікавило багато тем: від 2D-арту та 3D-скульптингу до саунд- та геймдизайну. Що там казати, навіть програмування. Хотілося зрозуміти, як створюються ігри. Можливо, навіть спробувати зробити щось самостійно. Спочатку я пройшов порівняно тривалий курс із геймдизайну, потім присвятив кілька місяців 2D-арту. Після цього почався великий «курс» із програмування, який замість шести місяців (як я спочатку планував) триває досі.
Краще почати із C# і присвятити їй кілька місяців. Моє перше знайомство з Unity
Роль програміста так чи інакше приміряє на себе переважна більшість непрограмістів, які працюють в IT. У різні роки я теж міркував про це, та не знаходив потрібної мотивації, щоб подолати всі труднощі становлення. Спочатку записався на курс із розроблення на Android, але відвалився вже на третьому занятті. Було складно й нецікаво. Через декілька років пройшов онлайн-курси з верстки сайтів на HTML і CSS. Пробував вивчати JavaScript, але теж не пішло.
Цікавість виникла трохи згодом, коли прочитав книжку «Код» Чарльза Петцольда. Тоді я вперше зрозумів, як та чому цифрові дані перетворюються на нулі й одинички, якими були перші мови програмування, як вони працювали й багато іншого. Уже тоді виглядало так, що моя третя спроба опанувати програмування матиме більше шансів. Й ось цей третій раз настав.
Курс, який вибрав я, насамперед навчав працювати в Unity. Очікувалося, що студенти або вже знають C#, або вчитимуть її паралельно. Одразу скажу, що це погана ідея.
Краще починати із C#, присвятити їй кілька місяців, потім переходити до Unity. Інакше буде як у мене: хаотично, неефективно, незрозуміло.
Перші кілька занять кодити не треба було, ми просто розбиралися з можливостями рушія, дивилися деякі навчальні проєкти від Unity. Я наївно припускав, що складним софтом мене не налякати, бо трохи знав Photoshop, Illustrator, FL Studio тощо. Звісно ж, ігрові рушії — це окрема категорія програм.
Мій курс складався з 20 занять і тривав приблизно 10 тижнів. Очікувалося, що наприкінці кожен студент матиме щонайменше три проєкти в портфоліо: 3D-шутер, 2D-платформер та пазлер, побудований суто на UI. Ми послідовно працювали над проєктами, удосконалюючи їх у міру того, як розглядали ті чи інші теми. Пройшли фізику та колайдери — додали їх у проєкт. Потім пройшли анімацію — теж додали. На кожному занятті студентам давали трохи написаного коду й просили дописати його відповідно до теми. Це класний підхід, бо новачкам, які не знають код-конвенцій і способів розвʼязувати базові задачки, простіше працювати із чимось, аніж писати з нуля.
Ось такий вигляд мали мої перші проєкти — 3D-шутер та 2D-платформер.
Я приділяв дуже багато уваги візуальній частині гри: шрифтам, колірній гамі, ефектам, анімаціям, спрайтам та іншим асетам. Здебільшого ресурси для шутера були безплатними, але я робив десятки (можливо, навіть сотні) візуальних фіксів, щоб усе подобалося насамперед мені. Це ніколи не втомлювало. У випадку з платформером я не пошкодував грошей і купив на Unity Asset Store набір асетів для побудови рівня, також набори спрайтів для героя та ворогів і навіть фон з ефектом паралакса. Дуже довго налаштовував анімації, зокрема для вікон. Деякі спрайти намалював самостійно.
Чому так? По-перше, з візуально привабливою грою приємніше працювати. По-друге, я розумів, що колись захочу показати гру. Вона має бути презентабельною та мінімально завершеною. Загальні витрати на асети не перевищили 30 доларів. Але я переконаний, що ефект був набагато цінніший, і на подальших співбесідах це не лишилося непоміченим.
Ось для порівняння моя гра до покупки асетів і після.
Те, як ви робите навчальні проєкти, цілком може вказувати роботодавцеві на ваш загальний підхід до роботи.Тому не раджу ставитися до них несерйозно.
Загалом навчатися було цікаво, але важко. Курс забирав багато вільного часу, та цього не було достатньо. Я не завершив його з першого разу й перевівся на наступний потік. З наступним потоком теж не завершив. Основна причина — брак нормальної бази з програмування.
Вивчати C# паралельно з Unity означало приділяти мало уваги й C#, і Unity. Половину тем я пробігав хаотично, а іншу половину не міг схопити з першого чи другого разу. Не було знайомих, до яких можна звернутися по допомогу, а ChatGPT чи аналогів тоді не існувало.
Я міг годинами, а то й днями, займатися примітивною помилкою, але нормально загуглити причину або знайти потрібне рішення на форумах не вдавалося. Це дуже демотивувало. Бували дні, коли не міг змусити себе сісти за роботу. Загалом протягом 5 місяців я витратив на курс 250 годин. Мені вдалося пройти приблизно три чверті програми та довести два проєкти до задовільного вигляду.
Перші кроки у вивченні програмування дали змогу зробити багато несподіваних відкриттів. Виявилося, що в написанні коду набагато більше творчості, ніж може здатися спочатку, — і це дуже тішило.
Написання коду багато в чому схоже на написання текстів. Як на письмі одну ідею можна висловити сотнею способів, так і в коді однакову логіку можна описати багатьма шляхами: більш і менш компактно, більш і менш зрозуміло, більш і менш елегантно.
Стажування на позицію Unity-розробника в Plarium
Почавши курс із розроблення, я не мав адекватного уявлення про складність професії. Припускаю, що всі ці оголошення про «програміста за три місяці» закралися й у мою підсвідомість. За початковим задумом шести місяців мало бути достатньо, щоб схопити ази та, наприклад, брати участь у геймджемах або працювати над простенькими пет-проєктами.
Коли шість місяців таки минули, здавалося, прогрес був мізерний. За відчуттями схоже на той етап вивчення іноземної мови, коли ти знаєш якісь слова та правила, але не можеш звʼязати їх у примітивний текст. Я старанно намагався не відставати від групи, читав книжки та дивився відео на YouTube. Але часу, який я виділяв після роботи або на вихідних, з урахуванням інших справ, не вистачало. Потрібно було щось міняти або прийняти той факт, що на задовільне освоєння бази піде ще невідомо скільки часу.
Водночас я дізнався, що Plarium оголошує стажування на позицію C# розробника. Хоч я і не планував міняти карʼєру, коли починав курс, у голові майнула шалена ідея спробувати. Розроблення на Unity, попри всі труднощі самоосвіти, захоплювало дедалі більше. Зʼявився азарт і цікавість занурюватися в тему глибше. До того ж були й обʼєктивні чинники. Очевидно, що до стажистів нижчі вимоги, ніж до джунів. І головне — такий розвиток подій дав би змогу активніше зосередитися на програмуванні й, відповідно, вирішив би мою дилему. Я подумав, що в найгіршому випадку відмовлять, і написав.
Стажування було розраховане на кандидатів ззовні, але в компанії пішли назустріч та запросили на співбесіду. Я посипався на технічних запитаннях, але в пригоді стали мої проєкти з курсу. Увімкнув обидві гри, потім показав код. Відповів на кілька запитань щодо деяких частин коду й особливостей налаштування проєктів у Unity.
Оскільки я не писав код повністю, то відверто сказав про це. Було видно, що демонстрація справила позитивне враження. Наприкінці мені відмовили, але надали низку рекомендацій та запропонували спробувати ще раз через два тижні. Друга співбесіда пройшла краще, бо я встиг почитати «CLR via C#» Ріхтера, «Pro C# 5.0 and the .NET 4.5 Framework» Троелсена та дещо з документації Microsoft, — і мене взяли.
Стажування тривало приблизно 8 тижнів і проходило в онлайн-режимі. Разом з іншими стажистами я відвідував лекції та виконував завдання, які варіювалися від програмістських задачок на кшталт «перебрати двовимірний масив змійкою» чи «написати власну реалізацію однозвʼязного списку» до невеликих ігрових проєктів типу хрестиків-нуликів.
У групі було трохи більше ніж десяток людей. Переважно студенти старших курсів на технічних спеціальностях. Для них подібні завдання зазвичай були чимось, що розбирали на лабораторках. Я все робив уперше й часто навіть не знав те чи інше поняття, поки воно не траплялося в завданні. Іншими словами, мені це навчання було потрібно більше, ніж будь-кому.
Хай яких зусиль я докладав, було зрозуміло, що мені навряд вдасться перестрибнути більшість одногрупників. Тому я зосередився на меті, яку міг повністю контролювати: узяти якомога більше знань та викластися на повну. Загалом ми розглянули десь двадцять тем і виконали приблизно стільки ж завдань різної складності. Протягом усього стажування ми регулярно складали тести, раз на один-два тижні. Вересень, на який припав пік активності, виявився найважчим. Я провів за роботою та навчанням не менше ніж 250 годин, мій абсолютний рекорд за весь час. Це дало результат: підсумковий тест показав, що в мене найбільший прогрес, в порівнянні з початковим рівнем знань.
Далі почався період співбесід у команди. Теоретично роботу могли запропонувати всім стажистам, бо на той час попит на розробників був великим. Набирали в три департаменти, тобто найперспективніші з нас мали шанс потрапити на три співбесіди. Я не дуже хвилювався, бо в разі відмови просто й далі працював би у відділі локалізації, як було узгоджено ще перед початком стажування. Та й втома давалася взнаки.
Мені порадили спробувати себе на проєкті RAID: Shadow Legends. На той момент він був у продакшені вже кілька років, core-частина коду була написана, а команда мала великий досвід адаптації новачків. До того ж нещодавно там виділили нову команду та призначили нового тімліда, якому, як потім виявилося, не забракло ентузіазму менторити мене. Я попросив відкласти мою співбесіду наскільки було можливо, щоб додатково підготуватися. Здається, вдалося виграти ще кілька тижнів. Зрештою співбесіда пройшла вдало й мене запросили на пробний період.
Досі памʼятаю перші кілька багів, які я отримав у роботу, і ту радість, яку відчув, коли впорався
План адаптації був продуманий. Умовно він складався з двох частин, теоретичної та практичної. Кожна частина передбачала десятки пунктів. Спочатку новачку треба було ознайомитися з масивом проєктних документів. Це могла бути як загальна інформація про гру, так і туторіали з розгортання репозиторію та налаштування едітора.
Потім була можливість прочитати низку інструкцій, пов’язаних безпосередньо з додаванням тієї чи іншої функціональності на проєкт. Завершивши, треба було виконати кілька завдань і комітнути їх у тестову гілку. Моєю сильною стороною було те, що я дуже добре знав функціональність гри з боку гравця, а тому міг повністю зосередитися на вивченні коду.
Як виявилося, опанувати C# та Unity не так важко, як розібратися у великому проєкті зі складною архітектурою та розгалуженою ієрархією класів. Для мене це стало відкриттям. Навчальні проєкти, з якими я стикався раніше, зазвичай обмежувалися десятком скриптів. Натомість тут були тисячі скриптів та мільйони рядків коду. А ще клієнт-серверна архітектура. І безліч допоміжних модулів та специфічних інструментів, які активно використовувалися в роботі. Ситуацію ускладнювало й те, що на RAID не заведено писати коментарі в коді. Зараз я розумію, що переважно це дійсно непотрібно, але на початку це сильно ускладнювало життя.
На щастя, мій тімлід проявив неабияке розуміння та день за днем терпляче відповідав на запитання, допомагав із проблемами, дивився та коментував код, ділився порадами. Коли ти новачок, то кожне невелике досягнення мотивує настільки ж сильно, наскільки пригнічує будь-яка невдача. Саме тому на перших етапах як ніколи важливо отримувати завдання так, щоб вони відповідали твоєму рівню, але водночас прослідковувалася певна прогресія. У моєму випадку так і було, і я за це дуже вдячний. Досі памʼятаю перші кілька багів, які я отримав у роботу, і ту радість, яку відчув, коли впорався.
Як це — знову стати джуном
Варто визнати, що доволі неприємно було знову опинитися в ролі новачка, який не розуміє базових речей і постійно потребує допомоги. Це особливо гостро відчувається, якщо подумати, що на моїй попередній спеціальності такий етап давно минув.
Якщо ви, подібно до мене у 2021 році, живете в пеклі самокритики та зневіри, намагаючись опанувати нову й складну професію, я можу сказати таке: безперечно, технічні навички понад усе, але вони не є вирішальними, бо на співбесіді — і надалі на випробовувальному періоді — оцінюють сукупність чинників.
Значну роль відіграють ваша мотивація та бажання розвиватися. А ще дуже важливі софт-скіли: щонайменше вміння спілкуватися конструктивно та в дружній манері, уміння пояснювати думку на різних рівнях складності.
Це допоможе доносити ідеї всім залученим у розроблення сторонам незалежно від їхнього технічного бекграунду. Такі навички особливо актуальні зараз, коли всі працюють віддалено, а отже, мають ще більше покладатися на переписку як основний спосіб комунікації.
Також важливо вміти «монетизувати» вже наявний досвід на новій роботі. Якщо ви теж світчер, то маєте знання з попередньої ролі
Їхня релевантність, звісно, буде варіюватися, але якусь перевагу вони цілком можуть забезпечити. У моєму випадку, здавалося б, знання мов та вміння писати тексти дають небагато. Але разом із розумінням проєкту з погляду локалізації та отриманими нещодавно навичками програмування вони утворювали потрібну експертизу, щоб трохи оптимізувати пайплайн локалізації. Розкажу докладніше.
Ми в компанії маємо власний інструмент для локалізації, який використовуємо на всіх іграх. Він закриває 100 % потреб, але в деяких сценаріях використання має обмежені можливості та створює перекладачам незручності. Наприклад, ми хочемо додати в гру нотифікацію, яка казала б гравцю, що йому не вистачає ігрових ресурсів на виконання тієї чи іншої дії. Текст може мати такий вигляд:
Тобі знадобиться ще {0} монет для поліпшення зброї.
У цьому випадку {0} виконує роль змінної, у грі замість неї підставлятиметься потрібне число: 5, 100, 223 тощо. Складність у тому, що в нас не була реалізована динамічна зміна форми слова, яке йде після змінної (тут це слово «монет»). Відповідно цей рядок читається нормально лише з деякими числами й не може використовуватися так, як я навів його вище. Перекладачі знали це й були змушені викручуватися та писати щось на кшталт:
Тобі знадобляться ще монети для поліпшення зброї: {0}.
Звісно ж, це приклад погано написаного тексту. Ще коли я був у локалізації, ми з колегами обговорювали це обмеження. Зрештою, уже в новій ролі, я зміг написати невеличке покращення для інструмента локалізації, яке дає змогу динамічно змінювати форму слів відповідно до числа, з урахуванням специфіки кожної мови.
Тобі знадобиться ще 1 монета для поліпшення зброї.
Тобі знадобиться ще 22 монети для поліпшення зброї.
Тобі знадобиться ще 55 монет для поліпшення зброї.
Це було цікаве завдання, яке дало цінний досвід, схвалення від колег, а також чимало наснаги для подальшої роботи. І все тому, що я побачив спосіб застосувати попередні знання на новій посаді. Якщо шукати можливості, по-чесному старатися та систематично докладати зусиль, то прогрес точно буде. І рано чи пізно ви переростете джуна.
Подальші мрії та плани. Як планую розвивати знання далі
Обдумуючи події перших місяців, важко не дивуватися, як усе закрутилося. У мене дійсно іноді так буває: спочатку хочу просто почати бігати, але минає трохи часу й на хвилі азарту я вже думаю пробігти марафон. Тут вийшло щось схоже.
Звісно, не обійшлося без щасливих збігів, яких у вашому випадку може не бути.
Але за будь-яких обставин важливо шукати можливості й не боятися зайвий раз запитувати: якби я на початку не спитав про стажування, цілком імовірно, нічого цього не було б. Ну й, звісно ж, треба бути готовим до великої кількості роботи.
Для порівняння: від початку 2021 року я присвятив розробленню в тій чи іншій формі понад 4000 годин.
Зараз, на щастя, я почуваюся достатньо впевнено, хоча потреба розширювати та поглиблювати знання нікуди не поділася. Я долучився до роботи над великою кількістю оновлень та ще більшою кількістю багів. Декілька разів мене призначали відповідальним за імплементацію тих чи інших оновлень (у нас це називається feature-лідство), і щоразу це був дуже цінний досвід.
Разом із колегами ми двічі брали участь у геймджемах, які проводила компанія, і в обох випадках нам вдалося показати непоганий результат. Суть джему в тому, що за два дні ми мали з нуля створити гру на тему, яку оголошували за кілька годин до початку.
Геймджеми — чудовий краш-тест для професійних та особистісних якостей
Ви дуже багато кодите й дуже мало спите. А в результаті отримуєте готовий проєкт, який в інших умовах неможливо було б створити за такий стислий термін. А ще це весело.
Гра, яку ми представили на шостому Plarium Game Jam (2024 рік)
У подальших планах, як і раніше, горизонтальний розвиток, курси, книжки. Планую глибше вивчати Unity, підтягувати знання з математики. Просто створювати більше невеличких ігор для практики. Крім того, дуже хотілося б здобути вищу освіту з компʼютерних наук, тому придивляюся до деяких магістерських програм.
Що я можу порадити тим, хто хоче спробувати свої сили у вивченні Unity
- Вам потрібна база. Виберіть одну мову й приділіть їй щонайменше пів року. Пройдіть декілька авторитетних курсів та прочитайте щонайменше декілька авторитетних книжок. Серед YouTube-каналів я б виділив Brackeys, CodeMonkey, Jason Weiman. Якщо говорити про курси, раджу пошукати щось із високим рейтингом на Udemy, edX або Coursera.
- Вивчайте інші мови програмування, бажано й низькорівневі. Мені після C# дуже сподобалася мова C. Працюючи з нею, я зрозумів багато чого, зокрема, про управління памʼяттю. У зв’язку із цим раджу курс CS50’s Introduction to Computer Science.
- Не варто розпилятися. Навчальних матеріалів безліч, розгубитися дуже легко. Якщо почали курс або книгу, краще зосередитися й добити до кінця або перемикнутися на щось інше.
- Не всі поняття засвоюються одразу. Це нормально. Якщо не можете щось зрозуміти, дивіться пояснення в альтернативних джерелах. Але памʼятайте про попередній пункт.
- Надмірна кількість теорії іноді шкодить. Розуміння деяких теоретичних аспектів приходить тільки з практикою. Беріть рівно стільки матеріалу, скільки потрібно, щоб почати, а після значної практики повертайтеся до теорії.
- Знання швидко вивітрюються, особливо на початку. Навчайтеся щодня, бажано не менше ніж
1–2 години. - Використовуйте ШІ як наставника, а не шпаргалку. Ви маєте самостійно вміти кодити й розуміти, як працює той чи інший логічний блок. Звертайтеся до ШІ, щоб закривати пробіли в знаннях. Просіть пояснити незрозумілі поняття простими словами або на основі аналогій. Але завжди памʼятайте, що він може помилятися.
- Шукайте можливості для стажування. Це допоможе швидко потрапити на комерційний проєкт, адже до стажистів нижчі вимоги, ніж до джунів.
- Беріть участь у геймджемах. Це гарний спосіб зробити власний проєкт для портфоліо.
Дякую за увагу — і хай вам теж щастить у навчанні та роботі!
Підписуйтеся на Telegram-канал @gamedev_dou, щоб не пропустити найважливіші статті і новини
Немає коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів