Share This
Связаться со мной
Крути в низ
Categories
//🎮 Путь в профессию: младший разработчик игр дает советы новичкам

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

Артём – младший игровой программист в белорусской IT-компании, занимающейся аутсорсингом в сфере игрового ПО. Он попал в профессию сравнительно недавно, что делает его опыт современным, а значит и повторимым. Обсудить

put v professiju mladshij razrabotchik igr daet sovety novichkam d71197a - 🎮 Путь в профессию: младший разработчик игр дает советы новичкам

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

Впервые я попробовал программирование на Pascal 8 лет назад (это было в школе). Мне понравилось, и вскоре я понял, что программирование – именно то, чем я хочу заниматься по жизни.

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

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

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

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

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

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

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

Мы аутсорсеры: нас нанимают игровые студии, чтобы мы помогали им разрабатывать игры. Наш профиль – разработка игр на Unreal Engine.

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

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

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

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

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

Так, в какой-то момент я оказался основным архитектором и разработчиком одного из подпроектов на нашем проекте – утилиты для аудио-команды. Не без присмотра старших товарищей, конечно.

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

Расскажите, насколько позволяет 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 – никуда. Что касается общего управления памятью, то тут собственные аллокаторы писать не приходится, но надо знать, как пользоваться умными указателями.

В связи с активным использованием делегатов в UE4 нужно хорошо понимать и уметь пользоваться лямбда-выражениями. Что касается метапрограммирования, то такие pro-level вещи как SFINAE мы не применяем, но базово разбираться в шаблонах все-таки нужно.

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

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

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

Если нужно реализовать что-то низкоуровневое или расширить/модифицировать движок, тут однозначно используется C++.

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

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

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

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

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

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

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

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

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

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

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

put v professiju mladshij razrabotchik igr daet sovety novichkam 6e13dfc - 🎮 Путь в профессию: младший разработчик игр дает советы новичкам

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

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

put v professiju mladshij razrabotchik igr daet sovety novichkam cc8b1a2 - 🎮 Путь в профессию: младший разработчик игр дает советы новичкам

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

Курсы Для изучения UE4 рекомендую курсы от Epic Games, т.к. никто не научит движку лучше чем его создатели. В первую очередь советую пройти набор Unreal Engine Kickstart for Developers, где каждый курс представляет собой подробный обзор той части движка, которая касается специалиста конкретного профиля: аниматора, левел-дизайнера, программиста и т.д.

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

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

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

  • 1 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Свежие комментарии

    Рубрики

    About Author 01.

    blank
    Roman Spiridonov

    Моя специальность - Back-end Developer, Software Engineer Python. Мне 39 лет, я работаю в области информационных технологий более 5 лет. Опыт программирования на Python более 3 лет. На Django более 2 лет.

    Categories 05.

    © Speccy 2022 / All rights reserved

    Связаться со мной
    Close