Нажмите "Enter" для перехода к содержанию

Путь в профессию младший игровой программист дает советы новичкам

0

Когда и почему вы выбрали программирование и сферу геймдев?

Я несколько лет экспериментировал с разными сферами IT: попробовал себя в бэкенде, фронтенде, разработке десктопных приложений, геймдеве. В итоге обнаружил, что последний привлекает меня больше остальных – отчасти из-за открывшейся неприязни к Вебу и некоторым другим областям IT, отчасти из-за того, что геймдев выглядел разносторонним (ведь это гораздо больше, чем просто программирование), а в контексте программирования – потенциально низкоуровневым.

Как вы попали в компанию, в которой сейчас работаете?

На третьем курсе мне нужно было найти место для прохождения производственной практики. Я написал резюме, опубликовал его и начал искать подходящие предложения. В какой-то момент наткнулся на вакансию Unreal Engine 4 C++/Blueprint-разработчика. Тут важно сказать: хоть на C++ к тому времени я активно кодил около четырех лет и кое-что умел, опыта работы с UE4 у меня практически не было. Но я все-таки решил откликнуться и не зря: уже на следующий день меня пригласили на собеседование.

Как вы готовились к собеседованию?

Я не стал читать статьи вроде “96 популярных задач на собеседованиях”, а решил расширить и освежить в памяти знания о тех областях C++, в которых не чувствовал себя на 100% уверенно. Как оказалось, не зря: несколько вопросов на собеседовании касались как раз одной из таких областей.

Расскажите, чем занимается компания, в которую вы попали?

Некоторые считают, что раз компания аутсорсинговая, то у нас постоянно меняется заказчик (а значит, начальник и требования к работе), но это не так. На данный момент мы больше года работаем на нескольких проектах одной и той же студии: разные части команды занимаются каждая своим проектом.

Расскажите о ваших обязанностях?

Я программист, поэтому моя главная обязанность – программировать, закрывая вовремя свои задачи. Помимо этого часто приходится общаться с сотрудниками студии, на которую мы работаем, чтобы уточнить какие-то моменты, а иногда и помочь им с чем-то разобраться. Должен сказать, что общаться нужно не только с программистами, но и с разного рода дизайнерами – начиная от нарративных и заканчивая аудиодизайнерами. Это к тому, что иногда требуется объяснять программистские вещи неспециалистам. Ну и, разумеется, я обязан посещать ежедневные миты, но много времени это не отнимает.

Какие задачи доверяют младшему программисту?

Любые, с которыми по твоему мнению ты можешь справиться. Команда и тимлид лишены предрассудков о том, что джуниор должен красить кнопочки, так что задачи я беру те, что мне интересны ввиду их сложности или необычности.

Иначе говоря, если команда видит, что ты справляешься с задачами определённого уровня, то тебе без опаски начинают доверять задачи этого уровня, даже если он не джуниоровский.

Расскажите, насколько позволяет NDA, о проекте, над которым вы сейчас работаете?

Это драйвовая онлайн action-RPG для PC и консолей.

Какие технологии в нём используются?

В первую очередь Unreal Engine 4. Тут важно сказать, что мы используем во многих местах кастомизированную под проект версию движка, а не официальный вариант от Epic Games. Конечно вместе с UE4 идёт C++, но это не единственный язык на проекте. Помимо очевидных сопутствующих языков типа SQL, используется также Golang – для вещей, связанных с сервером, и Python – для скриптинга чего угодно. В некоторых задачах приходится использовать не связанные непосредственно с игрой API, начиная с Win API и заканчивая Google Spreadsheets API. В качестве системы контроля версий мы используем Perforce. Сервера – Amazon Web Services.

Многие боятся C++. Насколько глубоко нужно знать этот язык?

Достаточно глубоко. Необходимо ясно понимать, когда, сколько раз и при каких условиях создаются копии объектов, соответственно, без понимания конструкторов копирования, операторов присваивания и move-semantics – никуда. Что касается общего управления памятью, то тут собственные аллокаторы писать не приходится, но надо знать, как пользоваться умными указателями.

Очень важно отметить, что знания стандартной библиотеки C++ в контексте UE4 становятся по большей части бесполезными, так как в Unreal Engine есть свои аналоги практически всему из std. Однако некоторые общие техники и принципы из стандартной библиотеки используются и в Unreal, так что общее понятие о std и опыт работы с ней полезны.

В UE4 есть два способа написания логики: визуальный (через Blueprints) и традиционный (на C++). Какой из них чаще используется?

Важно сказать, что C++ и Blueprints не полностью взаимозаменяемы, так что всё зависит от конкретной задачи. Если нужно добавить/исправить чистую игровую логику, велика вероятность того, что это будет сделано с помощью BP, особенно учитывая, что внушительная часть подобного функционала уже реализована через BP.

Вообще-то BP должны использоваться только не-программистами. Однако в нашем проекте большое количество логики было написано на BP именно программистами. Это меня удивило, но тимлид объяснил, что так было начато нашими коллегами из студии, и пока оно никому не мешает, оно останется. Однако когда проект приблизится к релизу, в целях оптимизации вся BP-логика будет заменена эквивалентом на C++. По этой причине при выполнении задач, если это возможно, я всегда выбираю C++.

Правда ли, что в игровом программировании без математики не обойтись?

Отчасти. Математика – это слишком широко, чтобы ответить однозначно. Используются основы тригонометрии и линейной алгебры: векторное и скалярное произведения, матрицы.

Нужно ли знать английский для эффективной работы?

Как минимум необходим уровень беглого чтения технической документации; но документация – не единственное место, где нужен язык. Внутри команды мы используем русский, но с коллегами из студии общаемся исключительно на английском. Причем используется не только письменная речь, но и устная, т.к. созвоны происходят регулярно. Ежедневные миты также проходят на английском. Мой уровень английского – около C1, и в целом я чувствую себя уверенно.

Что вам особенно нравится или не нравится в работе игрового программиста?

Я рад, что попал в индустрию и у меня появилось большое количество знакомых соответствующего профиля. Ещё я давно хотел изучить UE4, но не доходили руки. Теперь же я постоянно углубляю свои знания движка, т.к. это критически важно для успешного выполнения работы.

Полученные в университете знания пригодились вам в работе?

Сразу стоит сказать, что моя университетская специальность – “Искусственный интеллект”, так что пересекаются лишь фундаментальные вещи: все та же линейная алгебра, тригонометрия и дискретная математика. Основы теории графов и теории формальных языков также пригодились: они упрощают понимание различных концепций, связанных с работой. Основы логики просто помогают программировать.

Какие ресурсы посоветуете для изучения необходимых технологий?

Книга “Foundations of Game Engine Development (FGED). Volume 1: Mathematics”, Eric Lengyel.

Пособие по линейной алгебре и не только для разработчиков игровых движков и игр. Автор дает материал подробно, однако соблюдая баланс: не уходит в академические дебри, но при этом не сводит всё к “подставьте здесь нужное число – и готово!”. К каждому “Что такое?” обязательно идёт “Зачем это надо разработчику игр?”. Рекомендую также вю серию FGED.

Книга Professional C++, Marc Gregoire.

1200 страниц подробного, последовательного и актуального описания всех возможностей C++. В начале 2021 года вышло 5-е издание, которое было расширено описанием новых фич языка.

Стоит сказать, что документация у UE4 достаточно слабая, так что если необходимо узнать подробности работы какой-то функции, могу порекомендовать не стесняться смотреть в исходной код движка.

Что вы посоветуете планирующим освоить профессию?

Выберите движок, с которым хотите работать, и начинайте изучать его вместе с языком, который в нем используется. Изучайте до тех пор, пока не начнете чувствовать себя более чем уверенно. После этого вы с легкостью пройдете любое собеседование (конечно, если вас не завалят вопросами о том, какой ваш любимый цвет). Удачи!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *