Путь стажера: Ubisoft
Привет! Меня зовут Вадим Билецкий. Всю жизнь я любил компьютерные игры и с детства мечтал их создавать. Я считаю их видом искусства, равноценным кино и литературе. Когда я стал студентом факультета кибернетики КНУ имени Тараса Шевченко, я начал программировать и самостоятельно создавать простые демоигры. Полгода назад я успешно прошёл отбор на оплачиваемую стажировку в Ubisoft, а сейчас у меня есть шанс релоцироваться в одну из студий во Франции. Скоро я начну работать непосредственно в одной из игровых студий Ubisoft.
С чего все начиналось
В прошлом году я искал работу и наткнулся на два предложения от Ubisoft.ua. Первая вакансия предлагала полноценную работу в компании, а вторая — оплачиваемую стажировку в Ubisoft Coding Campus. Сначала мне больше нравился первый вариант, но взвесив все «за» и «против», я выбрал кампус, потому что у меня всё-таки было мало опыта. В сфере разработки игр я работал не больше, чем полгода, да и масштабы нельзя сравнивать — это были не ААА-проекты, а какие-то казуальные игрушки на телефоне. Такой опыт мало что мне дал, кроме денег.
Отбор
Отбор проходил в четыре этапа. Первые два были внешними, то есть я проходил их из дома, а другие два — в формате собеседования, я приезжал на студию. Сначала нужно было решать задачи на ресурсе codingame.com. Это похоже на любой другой сайт для обучения программированию: ты пишешь код, скармливаешь его сайту, он его проверяет, и, если всё ок, ты получаешь очки и идёшь дальше. Кстати, рекомендую этот сайт для самообучения, многие задачи довольно занимательные и сделаны в игровой форме.
Следующий этап проверял знания C++ и SQL. Вопросы были достаточно базовые, в виде тестов и задач. В целом, если ты программист или учишься в университете по этому направлению, решить эти задачи не составит труда. Для общего представления скажу, что в моей группе в кампусе есть один парень, который тоже учится на кибернетике в КНУ, и он пока только на втором курсе. Так что всё зависит от знаний и желания учиться.
Если всё прошло хорошо, тебе звонят и назначают собеседование. Там тебе снова дают задачи по программированию, ты их на месте решаешь, а после этого проходишь общее собеседование. Спрашивают много теории. От тебя не требуют опыта или каких-то бумажек из вузов, оценивают конкретные знания. Конечно, на других вакансиях это не так работает, но в случае с Ubisoft Coding Campus они сами предлагают тебе получить весь необходимый опыт работы над проектом.
Последним этапом было собеседование с HR-ом. Он проверяет твои софт скилы: оценивает коммуникативные способности, смотрит, приживёшься ли ты в коллективе, и всё такое. Задают вопросы про конфликтные ситуации и как ты с ними справлялся. Перед началом собеседования они мне сами сказали, что нет правильных ответов, меня это успокоило. Я успешно прошёл все этапы, и меня пригласили.
Стажировка
Это не та стажировка, которую в Ubisoft проводили почти каждый год. В таком формате они делают в первый раз. Наша стажировка равноценна найму на работу. Если ты вылетел, это примерно то же самое, как если бы тебя уволили. Отбор проводят только в самом начале, после чего ты фактически сотрудник. Далее тебе поручают учебный проект, появляются команды, менторы, ты с ними знакомишься и налаживаешь коммуникацию. Они могут помочь тебе, если ты не можешь с чем-либо справиться. Ты, в свою очередь, тоже можешь помочь кому-то, кто столкнулся с трудностью, которую ты умеешь решать.
Учёба в кампусе длится полгода, а обычная стажировка в Ubisoft, если я не ошибаюсь, длится около двух месяцев. И она предусматривает обучение более общего профиля. Там примерно так же набирают людей с базовыми знаниями, интенсивно обучают, потом переводят их на реальные проекты, делают из них junior программистов и выше. После того, как ты закончил свой курс, смотрят уже по результатам стажировки — думают, куда можно порекомендовать, на какие направления, какие специализации. Так что сама стажировка не направлена на какую-то конкретную специализацию.
В то время как стажировка в Ubisoft Coding Campus направлена конкретно на обучение по направлению онлайн-программист, то есть сетевой программист. Это тоже достаточно универсальная специализация. Сюда подпадает сетевое взаимодействие в игре, сопутствующие онлайн-сервисы и прочее. Это могут быть и внешние сервисы, которые хоть не относятся непосредственно к геймплею, но при этом являют собой неотъемлемую часть игры.
Я не могу сказать, что железно уверен в этой всей терминологии, но то, о чём я говорю, представляет собой часть игры, для взаимодействия с которой нужно сетевое соединение — сетевой геймплей плюс сторонние сервисы. От программиста в первую очередь требуется синхронизировать геймплей разных игроков. А то, что я назвал внешними сервисами, — это могут быть онлайн-магазины, сервисы с таблицей очков или игровыми новостями и разные такие плюшки. Универсальность нашего обучения в том, что мы идём от низкоуровневого программирования, необходимого для синхронизации игроков в реальном времени, до более сложных задач — написания, создания объёмных внешних сервисов.
То, что мы создаём внутри игры, является в какой-то мере цельным продуктом, и включает в себя почти все базовые составляющие самой игры. С точки зрения программирования, можно назвать это миниатюрной версией игры. Сначала мы пишем для него основу, геймплей, а потом — сетевое взаимодействие и внешние сервисы. После этого в эту игру уже можно играть онлайн. В конце концов, у нас получается такой простенький 2D шутер.
Можно сказать, что мы там работаем не вместе, а параллельно. Конечно, менторы и участники команды помогают тебе, а ты помогаешь своей команде, но каждый сам делает свой проект. На старте нам дали костяк, движок, но в этом движке были совсем базовые вещи, которые мы могли бы написать сами примерно за месяц. Нам просто сэкономили время. И потом — для того, чтобы запилить любую фичу, любое задание, которое нам давали, нужно было в любом случае создавать к ней фундамент, который позволил бы эту фичу реализовать. Я совершенствовал движок в игре, добавлял в него новый функционал, и в то же время программировал эти фичи.
Рабочий день
Каждое утро менторы проводят ежедневный стендап для команд. Кампус поделен на пять команд, нас там около 20 человек. Так вот, утром мы собираемся в круг и по очереди обсуждаем свои проблемы и планы. С одной стороны, это отчёт, а с другой стороны, удобная возможность проговорить свои вопросы с коллегами и, если нужно, попросить о помощи. Если ты столкнулся с определенной проблемой, после окончания стендапа ментор подходит к тебе и вы более подробно обсуждаете твою задачу.
Потом начинается сам рабочий день в приятном опенспейсе. Обычно до или после обеденного перерыва проходят лекции. Потом до конца рабочего дня сидишь и делаешь своё задание. Вечером мы с коллегами спускаемся в sport area и играем в пинг-понг. Там, кстати, собираются ребята со всего учебного заведения.
Атмосфера
Начну с того, там почти все мои ровесники. Когда я пришёл туда, то было такое ощущение, что я попал в новую группу или в новый класс. Я быстро со всеми познакомился и легко нашёл общий язык. Ещё из общего — иногда проводятся лекции. Так что, с одной стороны, я приходил туда как в школу или в универ. Но на этом сходства заканчиваются.
Отличий же куда больше. Главное отличие выражалось в том, что учёба в кампусе проходит сугубо в виде практики. Теоретические лекции про разработку игр, конечно, есть, они нужны, и лучше их посещать, но мы не сдаём по ним никаких экзаменов и ничего такого. Бывают и более серьёзные лекции, которые связанны непосредственно с тем, что мы делаем. На этой стажировке почти всё обучение крутится вокруг того, что вам доручили большой проект, вы все его делаете, и ваша главная задача — довести его до конца. Если что-то с проектом не получается, ты всегда можешь обратиться к кому-то из менторов за помощью. Всё остальное в какой-то степени вторично.
Командно мы работали только на гейм-джемах, то есть не в рамках учебной программы. В теории, гейм-джемы — это конкурсы, где команды за ограниченное время должны создать игру и потом её представить. В нашем случае мы делали не игры, а онлайн-сервисы для игр. Так что да, у нас были ивенты такого рода, где мы были в командах, но в целом мы работаем все индивидуально. Вы сидите рядом, много коммуницируете, очень много проблем вы обсуждаете вместе. В итоге, конечно, каждый как-то по-своему решает задачи, но в плане общей концепции, командное обсуждение может значительно упростить понимание каких-то сложных вопросов. Делать это никто не запрещает, наоборот, это приветствуется. Да и круг людей, к которым ты можешь обратиться, не ограничивается только твоей командой. Ты можешь подойти в принципе к кому угодно, кто столкнулся с похожей проблемой, и попросить совет. Тем не менее, ты всё равно должен пройти все круги ада лично и выйти из них закалённым.
Или вот ещё пример кооперации — когда мы пишем какой-то код, то по правилам «соседи» должны его отрецензировать. У нас есть определённые требования насчёт чистоты, логики и стиля кода, так что таким образом проверяется соблюдение этих норм, выполняется поиск ошибок. Это стандартная и довольно эффективная практика, многие компании к ней прибегают. В целом, атмосфера мне нравится. Немало времени я провожу в sport area, много с кем я познакомился именно там.
Впечатления от стажировки
Я определённо многому научился. До этого у меня были хорошие базовые знания в сфере computer science, и в принципе они на том уровне и остались, но в большей мере я научился прикладным всяким штукам и техникам. Это был первый раз в моей жизни, когда я писал проект такого масштаба. До этого, за весь свой опыт, я решал только какие-то локальные задачи. И вот, у меня появляется первый большой проект, целая игра! Хоть она и простая, но она была написана мной, и я лично отвечал за качество. Как раз это на меня и повлияло сильнее всего — наличие большой ответственности. Я был вынужден к этому привыкать. Нужно учиться правильно разделять свои ресурсы, планировать решения задач. С такой прикладной точки зрения я действительно много чего освоил и чувствую в себе улучшения.
Важно то, что я стал реалистом, научился правильно оценивать задачу. Раньше я страдал идеализмом и имел довольно смазанные представления о суровой реальности работы над проектом. Сейчас я перестал стремиться к «идеальным» решениям и стал куда более прагматичен. Раньше я полагал, что в программировании, как в шахматах, всегда есть ход лучше, и нужно просто всматриваться до тех пор, пока его не увидишь. Сейчас, ознакомившись с реальной разработкой в условиях ограниченных ресурсов, я понимаю, как мне здорово мешал этот максимализм. Умение балансировать между решениями и понимание того, как не загоняться и сделать всё вовремя, является, наверное, одним из лучших аспектов, сформировавшихся у меня за время обучения в кампусе.
И вообще, теперь я уверен в том, что умение трезво оценивать свои ресурсы очень важно для разработчика, если он хочет реализовывать задачи вовремя, или хотя бы вообще их реализовывать. Мне кажется, что это как раз то самое, что отличает опытных разработчиков от начинающих. У профи наработан глазомер, по которому они сразу понимают, какое количество ресурсов потребует задача и сколько времени на это уйдёт. К тому же, у более опытных присутствует понимание людей, а точнее, понимание команды. Хотя, опять же, в моём же случае эти примеры применимы более индивидуально, ведь я уже говорил, что как таковой классической работы в команде у нас почти не было.
Окончание стажировки и релокация
Тестовый проект мы сдаём через месяц, но я уже выбрал студию, в которую хотел бы релоцироваться. Возможно, они там как-то оценят наш проект. Те, кто отказался от релокации, наверное, и не будут ничего презентовать. Менторы и так уже тебя знают, могут оценить твои способности. Они всю твою игру видели в процессе создания. Так что в конце, когда они смотрят на весь проект целиком, у них есть довольно широкое представление о том, как ты работал, и с какими трудностями ты столкнулся.
Релокация происходит по окончании курса стажировки, и наш курс уже почти закончился. Но тем, кто учится в университете, они дают время закончить его и получить диплом. Так что в моём случае это будет примерно летом. Я получу диплом магистра и тогда же уеду. Хотя точно не могу сказать.
Планы на будущее
Могу сказать, что мечты сбываются. У меня это ощущение было особенно сильным на первых порах этой стажировки. Сейчас я уже привык, но я помню те чувства в самом начале, когда я только шёл на первое собеседование. Я чувствовал воодушевление от одной мысли о том, куда я сейчас иду и чем я буду там заниматься. Не знаю точно, чем я буду заниматься во Франции, и как я буду там жить. Буду, наверное, учить язык, заниматься саморазвитием, работать. У меня там будет больше свободного времени, потому что сейчас его съедает университет. Тем более во Франции короткая рабочая неделя, всего 35 часов. Я жду того, что попаду на какой-нибудь действительно интересный проект, уже немного надоело делать учебные задания, проходить все эти тренировки, обучения. Хочется уже в настоящий «бой». Мне самому интересно, что там будет происходить.
В конечном итоге, моя великая цель не стать крутым специалистом, а сделать крутой продукт. Я верю, что компьютерные игры — это произведение искусства, а современная игровая индустрия игнорирует это и хочет делать больше конвейерного ширпотреба. По моему мнению, игра должна соответствовать определённым критериям. Один из них — целостность. Прохождение игры должно быть целостным экспириенсом, погружением, как просмотр хорошего фильма. В то же время, игра должна быть не только захватывающим приключением, но и нести какой-то смысл. Честно говоря, я затрудняюсь немного описать, потому что это такое очень внутреннее ощущение, представление. Я хочу создавать что-то, что будет воодушевлять людей, подталкивать к каким-то размышлениям. Для геймера игра должна ощущаться как элемент творчества.
Мне кажется, что на данный момент в индустрии с этим присутствует какая-то проблема. Сейчас я нахожу довольно мало игр, которые соответствовали бы моим личным критериям. Слишком много продуктов, которые сами по себе вторичны, они просто копируют своих предшественников. Возможно, дело в том, что компьютерные игры — относительно молодая сфера, и она ещё не успела раскрыть весь свой потенциал. У разработчиков будто бы немного не хватает или опыта, или понимания того, какой может быть игра, если наделить её теми качествами, о которых я говорил. Индустрия ищет своё направление, и я считаю, что сейчас такой момент, когда этот вектор можно задать. Я хочу создать продукт, который задаст новое направление в игровой индустрии. Я хочу добиться того, чтобы все наконец признали компьютерные игры полноценным видом искусства.
За помощь в оформлении материала благодарим Сергея Казаряна.