Шлях стажиста: Ubisoft

Привіт! Мене звуть Вадим Білецький. Все життя я любив комп'ютерні ігри і з дитинства мріяв їх створювати. Я вважаю їх видом мистецтва, рівноцінним кіно та літературі. Коли я став студентом факультету кібернетики КНУ імені Тараса Шевченка, я почав програмувати і самостійно створювати прості демоигры. Півроку тому я успішно пройшов відбір на оплачуване стажування в Ubisoft, а зараз у мене є шанс релоцироваться в одну зі студій у Франції. Незабаром я почну працювати безпосередньо в одній з ігрових студій Ubisoft.

З чого все починалося

В минулому році я шукав роботу і наткнувся на дві пропозиції від Ubisoft.ua. Перша вакансія пропонувала повноцінну роботу в компанії, а друга — оплачуване стажування в Ubisoft Coding Campus. Спочатку мені більше подобався перший варіант, але зваживши всі «за» і «проти», я вибрав кампус, тому що у мене все-таки було мало досвіду. У сфері розробки ігор я працював не більше, ніж півроку, та й масштаби не можна порівнювати — це були не ААА-проекти, а якісь казуальні іграшки на телефоні. Такий досвід мало що мені дав, крім грошей.

Відбір

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

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

Якщо все пройшло добре, тобі дзвонять і призначають співбесіду. Там тобі знову дають завдання з програмування, ти їх на місці вирішуєш, а після цього проходиш загальна співбесіда. Питають багато теорії. Від тебе не вимагають досвіду або якихось папірців з вузів, оцінюють конкретні знання. Звичайно, на інших вакансії це не так працює, але у випадку з Ubisoft Coding Campus вони самі пропонують тобі отримати весь необхідний досвід роботи над проектом.

Останнім етапом було співбесіду з HR-ом. Він перевіряє твої софт скіли: оцінює комунікативні здібності, дивиться, приживешься ти в колективі, і все таке. Задають питання про конфліктні ситуації і як ти з ними справлявся. Перед початком співбесіди вони мені самі сказали, що немає правильних відповідей, мене це заспокоїло. Я успішно пройшов всі етапи, і мене запросили.

Стажування

Це не та стажування, яку в Ubisoft проводили майже кожен рік. В такому форматі вони роблять в перший раз. Наша стажування рівноцінна найму на роботу. Якщо ти вилетів, це приблизно те ж саме, як якщо б тебе звільнили. Відбір проводять тільки в самому початку, після чого ти фактично співробітник. Далі тобі доручають навчальний проект, з'являються команди, ментори, ти з ними знайомишся і налаживаешь комунікацію. Вони можуть допомогти тобі, якщо ти не можеш з чим-небудь упоратися. Ти, в свою чергу, теж можеш допомогти комусь, хто зіткнувся з труднощами, яку ти вмієш розв'язувати.

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

У той час як стажування в Ubisoft Coding Campus спрямована конкретно на навчання за напрямом онлайн-програміст, тобто мережевий програміст. Це теж досить універсальна спеціалізація. Сюди підпадає мережеве взаємодія в грі, супутні онлайн-сервіси та інше. Це можуть бути і зовнішні сервіси, які хоч не відносяться безпосередньо до геймплею, але при цьому являють собою невід'ємну частину гри.

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

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

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

Робочий день

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

Потім починається сам робочий день в приємному опенспейсе. Зазвичай до або після обідньої перерви проходять лекції. Потім до кінця робочого дня сидиш і робиш своє завдання. Увечері ми з колегами спускаємося в sport area і граємо в пінг-понг. Там, до речі, збираються хлопці зі всього навчального закладу.

Атмосфера

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

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

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

Або ось ще приклад кооперації — коли ми пишемо якийсь код, то за правилами «сусіди» повинні його відрецензувати. У нас є певні вимоги щодо чистоти, логіки і стилю коду, так що таким чином перевіряється дотримання цих норм, виконується пошук помилок. Це стандартна і досить ефективна практика, багато компаній до неї вдаються. В цілому, атмосфера мені подобається. Чимало часу я проводжу в sport area, багато з ким я познайомився саме там.

Враження від стажування

Безумовно, Я багато чому навчився. До цього у мене були хороші базові знання у сфері computer science, і в принципі вони на тому рівні і залишилися, але більшою мірою я навчився прикладним всяким штукам і технікам. Це був перший раз в моєму житті, коли я писав проект такого масштабу. До цього, за весь свій досвід, я вирішував тільки якісь локальні завдання. І ось, у мене з'являється перший великий проект, ціла гра! Хоч вона й проста, але вона була написана мною, і я особисто відповідав за якість. Якраз це на мене вплинуло найсильніше — наявність великої відповідальності. Я був вимушений до цього звикати. Треба вчитися правильно розділяти свої ресурси, планувати вирішення завдань. З такою прикладної точки зору я дійсно багато чого освоїв і відчуваю в собі покращення.

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

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

Закінчення стажування і релокация

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

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

Плани на майбутнє

Можу сказати, що мрії збуваються. У мене це відчуття було особливо сильним на перших порах цієї стажування. Зараз я вже звик, але я пам'ятаю ті почуття в самому початку, коли я тільки йшов на першу співбесіду. Я відчував піднесення від однієї думки про те, куди я зараз йду і чим я буду займатися. Не знаю точно, чим я буду займатися у Франції, і як я буду там жити. Буду, напевно, вчити мову, займатися саморозвитком, працювати. У мене там буде більше вільного часу, тому що зараз його з'їдає університет. Тим більше у Франції коротка робоча тиждень, усього 35 годин. Я чекаю того, що потраплю на який-небудь дійсно цікавий проект, вже трохи набридло робити навчальні завдання, проходити всі ці тренування, навчання. Хочеться вже цей «бій». Мені самому цікаво, що там буде відбуватися.

Зрештою, моя велика мета не стати крутим фахівцем, а зробити крутий продукт. Я вірю, що комп'ютерні ігри — це твір мистецтва, а сучасна ігрова індустрія ігнорує це і хоче робити більше конвеєрного ширвжитку. На мою думку, гра повинна відповідати певним критеріям. Один з них — цілісність. Проходження гри має бути цілісним експірієнсом, зануренням, як перегляд хорошого фільму. У той же час, гра повинна бути не тільки захоплюючим пригодою, але і нести якийсь сенс. Чесно кажучи, я трохи важко описати, тому що це таке дуже внутрішнє відчуття, уявлення. Я хочу створювати щось, що буде надихати людей, спонукати до певних роздумів. Для геймера гра повинна відчуватися як елемент творчості.

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


За допомогу в оформленні матеріалу дякуємо Сергія Казаряна.

Опубліковано: 13/03/19 @ 11:00
Розділ Різне

Рекомендуємо:

DOU Проектор: Voopty — зручний пошук тренерів і педагогів, а також CRM для шкіл
Від гнучких дисплеїв до крокуючих авто: яким скоро буде світ технологій і що потрібно знати IT-фахівців
Є переспам на сторінці – як перевірити?
Реаліті: інфо-сайт, звіт #1 і стартова інфа
C++ дайджест #13: OpenCV, результати зимового cpp meetup