paint-brush
Подходит ли вам карьера в разработке игр?к@solverit
378 чтения
378 чтения

Подходит ли вам карьера в разработке игр?

к Andrey Mikheev16m2023/11/01
Read on Terminal Reader

Слишком долго; Читать

Если вы хотите стать разработчиком игр, начните с сосредоточения внимания на общих навыках программирования и написании чистого, высококачественного кода. Не спешите создавать игру на миллиард долларов; вместо этого стремитесь расти как разработчик. Отдавайте приоритет таким концепциям обучения, как чистый код, чистая архитектура, ECS, SOLID, KISS, ООП, алгоритмы и структуры данных. Рассмотрите возможность стажировки в игровой студии или самостоятельного обучения, чтобы набраться опыта. Выберите язык программирования, например C#, Java, JavaScript, Lua или Python, в зависимости от ваших целей. Изучение технического английского имеет решающее значение, поскольку большинство ресурсов по программированию написаны на английском языке. Решите, хотите ли вы работать над однопользовательскими или многопользовательскими играми. Начинайте с небольших проектов, чтобы накопить опыт, и постепенно увеличивайте сложность. Выбирайте свои инструменты, сначала изучите язык программирования, а затем переходите к игровым движкам. Подумайте о выпуске своей первой игры на таких платформах, как Itch.io, или веб-порталах. Избегайте подходов «без кода» и не забывайте получать удовольствие — страсть имеет решающее значение в разработке игр.
featured image - Подходит ли вам карьера в разработке игр?
Andrey Mikheev HackerNoon profile picture
0-item


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


Например:


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


На эти темы существует масса информации — настолько много, что это может легко перегрузить ваш мозг, что затруднит принятие стоящего выбора.


Меня зовут Андрей Михеев, я старший бэкенд-разработчик в Pixonic, MY.GAMES. Я работаю в игровой индустрии уже 20 лет. Впервые я попробовал создавать игры еще в 90-х на популярном тогда ZX Spectrum. В этой статье я расскажу о вариантах, которые у вас есть при переходе на разработку игр, и объясню, чем эти варианты отличаются.


Сначала несколько вещей

В этом посте мы будем исходить из предположения, что читатель только начинает свой путь в отрасль. Невозможно выучить все одновременно, поэтому вам придется расставить приоритеты и выбрать, как проходить учебу. Конечно, у каждого свой опыт; В этой профессии есть несколько путей развития.


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

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


Но имейте в виду, что технология — это всего лишь инструмент; вам не обязательно строить свою личность как разработчика вокруг какой-то конкретной вещи ; механик - это не ключ. Сегодня крестовая отвертка, завтра электрическая, послезавтра пневмоинструмент. Цель не в том, чтобы научиться пользоваться конкретной отверткой, а в том, чтобы понять устройство автомобилей, а также способы их сборки и ремонта.


Технологии — это всего лишь инструмент, ваше умение — вот что важно.


Замените эти гаечные ключи игровыми движками, языками программирования и прочим — и суть не изменится. Это всего лишь инструменты, которые вы можете использовать.


Несколько советов по общим навыкам для разработчиков игр

Так что, на мой взгляд, общие навыки — самое важное на этом этапе. Потому что на вас возложена задача не создания «игры», а написания хорошего кода .


Цель не в том, чтобы создать хитовую игру стоимостью в миллиард долларов, а в том, чтобы вырасти как разработчик. В любом случае создание игры стоимостью в миллиард долларов — это не столько разработка, сколько идеи и маркетинг; код является второстепенным по отношению к этому. Конечно, эти две цели не противоречат друг другу, но я бы не стал ставить ошеломляющий успех в качестве первой цели — сделайте это, и вы можете быстро разочароваться во всем предприятии в целом.


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


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


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


Другие специалисты должны легко понимать ваш код , уметь его адаптировать, без необходимости его переписывания. И вы тоже сможете легко его прочитать , если вдруг решите что-то изменить через несколько лет. Как грубый пример: лучше один раз потратить пару месяцев на написание качественного кода и иметь возможность за пару дней быстро внести какие-то изменения, чем за неделю написать что-то непонятное, на каждую второстепенную потом понадобится месяц. редактировать в будущем.



Попробуйте сделать чистый код — это вам очень поможет.



В двух словах: чистый код, чистая архитектура, ECS, SOLID, KISS, ООП, алгоритмы и структуры данных — всем этим темам следует уделять особое внимание, если вы хотите быть хорошим техническим специалистом в области разработки игр.


Да, у некоторых алгоритмы могут вызвать головную боль. Но таких «алгоритмов и структур» в разработке игр намного больше, чем в типичных веб-проектах, и если вы освоите их, они значительно упростят вам жизнь.


Более глубокое понимание этих концепций, естественно, придет только с опытом. Со временем вы поучаствуете в самых разных проектах, начнете понимать, как работают другие специалисты, и увидите, что лично вас беспокоит при работе с игровым кодом.

Очень важно учиться на опыте других людей . Изучайте проекты с открытым исходным кодом, слушайте лекции отраслевых экспертов и помните, что сейчас доступно множество источников информации. А вот чего не стоит делать, так это вариться в соке своего проекта, особенно если в вашей команде нет хорошего наставника. Ни один компетентный разработчик не может работать в вакууме. Здесь главное не переборщить и не начать использовать код других проектов, не понимая, что вы делаете и зачем.


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


Процесс улучшения ваших общих навыков программирования не быстрый. Это может занять месяцы или даже годы. Так что будьте к этому готовы, ведь без этого просто не обойтись.


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

Поиск первой работы в игровой индустрии с нуля – еще одна задача. Знаменитый парадокс: чтобы получить работу, нужен опыт, а чтобы получить опыт, нужна работа. В этом случае стоит задуматься о самостоятельном обучении . Сразу отбросим идею платных курсов: они подходят не всем по многим причинам. К счастью, в Интернете есть десятки и сотни руководств по всем аспектам программирования игр.



Выбор игрового движка

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


Эта тема слишком обширна, чтобы ее можно было охватить в одной статье. Более того, нас, разработчиков, интересуют не столько движки, сколько языки программирования. Если вы хотите углубиться в тему, советую прочитать это полезная статья о самых популярных игровых движках в Steam от Game Developer.


В начале своего пути вам не обязательно сразу выбирать какой-то большой и серьезный движок типа Unreal Engine или Unity. Если у вас нет ни теоретической, ни практической подготовки, достаточно какого-нибудь движка для веб-игр: что-то вроде PlayCanvas или его аналогов.


Движок Defold также может быть хорошим вариантом для начала . Он проще Unity и больше ориентирован на 2D-игры. Он использует очень простой язык Lua, который легко выучить.


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



Приоритет языков программирования

Чтобы сэкономить ваше время, я просто опишу некоторые аспекты языков и расставлю их в порядке приоритетности по мере их изучения; этот приказ не говорит о качестве языка или его проблемах. Вместо этого это моя оценка баланса между сложностью, актуальностью и возможностями языков.


Например, Lua — очень интересный язык, простой в освоении, на нем можно написать игру, используя движок Defold. Но вы не можете выбрать его в качестве основного языка для своей разработки. Это вспомогательный язык, используемый вместе с более популярными языками, такими как C++ или C#.

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


  • Русский : Да, не удивляйтесь. Вероятно, это самый важный язык для разработчика. Если вы не являетесь носителем языка, изучение этого языка окупится — и это очень важно. Большая часть информации по программированию доступна на английском языке: руководства, курсы, документация, форумы; в общем, все, что вам нужно будет изучить. По идее, можно было поискать местные сообщества программистов на родном языке и попросить помощи там, но если вы сделаете это на англоязычном ресурсе, то проблема решится в сто раз быстрее.


  • C#: Если вы планируете серьезно и долго заниматься разработкой, то лучше начать с популярных языков общего назначения. C# — один из них. Это также язык, подходящий для вашего плана резервного копирования: даже если вам вдруг надоест разработка игр, вы можете написать на C# различное программное обеспечение, например финтех, бизнес-приложения и так далее.


    C# позволит вам познакомиться со стандартными концепциями программирования и реализовать различные подходы к разработке. Вы узнаете все о таких, казалось бы, устрашающих аббревиатурах, как OOP, CQRS, DDD, ECS. Конечно, большинство этих подходов можно реализовать на любом языке программирования. Но есть нюансы. Например, не во всех языках есть понятие «класс», и соответственно понятия реализованы по-разному. Это может взорвать голову начинающему разработчику и создать кучу ненужных проблем, в том числе мотивационных. Так что, на мой взгляд, C# — лучший (но не самый простой) выбор для начала карьеры в разработке по сравнению, например, с JavaScript.


  • Java : Как и C#, Java является языком общего назначения. Но в разработке игр это в основном актуально с точки зрения серверов. Есть, конечно, игровые Java-движки (например, LibGDX), но они не так популярны, как что-то вроде Unity для разработки игр.


    Опять же, эти общие языки хороши для ситуации, когда вы уже знаете Java, но работаете, например, в Fintech — и вдруг решили сделать игру. Вы же не захотите изучать новый язык с нуля только ради эксперимента, не так ли?


  • JavaScript : Как сказал Джефф Этвуд, один из основателей Stack Overflow: «Все, что можно написать на JavaScript, будет написано на JavaScript. »


    Печально, но факт: все больше игровых проектов пишутся на этом языке. Дело в том, что JavaScript очень прост, особенно для новичков. А если вы работаете над каким-то веб-движком, вам, скорее всего, даже скажут, куда вводить строки кода.


    Несмотря на свою простоту, я не думаю, что JavaScript — хорошее место для начала пути в разработке игр. Он слишком отличается от других языков общего назначения, и это может сыграть злую шутку с разработчиками. Существует идея, что разработчик думает с точки зрения концепций своего первого языка программирования . В этом есть доля правды, поэтому в самом начале лучше изучить более общие техники и подходы. Но если вы решите начать с веб-игр, без JavaScript вам, скорее всего, не обойтись. Оно царит в мире Интернета. В этом случае я бы посоветовал обратить внимание на TypeScript. Этот язык очень похож на C# и облегчит переход на другой язык в будущем.


  • Lua/Python: Почему я собрал их вместе? Это скриптовые языки, обычно используемые для написания отдельных частей игровой логики. (Да, есть такие движки, как Defold, где они являются основными языками разработки. Но это исключения из правил.) Например, Python — очень популярный инструмент для встроенных сценариев, и он используется в 3D-редакторе Blender.


    Знать и уметь использовать Lua и Python полезно, но, как я упоминал ранее, это вспомогательные языки, и я бы оставил их на потом. Если, конечно, вы не выбрали для своего первого проекта движок Defold, то Lua незаменим.


  • C++ : Некоторые из вас могут быть удивлены тем, что C++ находится в конце списка. И дело не в том, что язык плох, а в том, что его путь самый трудный. Это самый мощный язык из представленных, но и самый сложный, со своими особенностями.


    C++ используется для создания ААА-игр и позволяет максимально эффективно использовать аппаратное обеспечение. Но я бы не советовал это начинающему разработчику — велика вероятность, что вы разочаруетесь в отрасли. Но если вы действительно знаете, что C++ — это то, что вам действительно нужно, и вас не пугают возникающие трудности, и у вас есть четкий план действий — тогда вперед!




Это лишь некоторые из языков программирования


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


Одиночная или многопользовательская игра?

По моему мнению, это следующее решение, которое должен принять разработчик игры. (Это не что-то вроде выбора между разработкой мобильных игр, ААА-игр или веб-игр.) Причина проста: в самом начале вашего пути у вас почти наверняка не будет выбора: создавать большие игры. Подумайте об этом, как вы могли бы работать над каким-нибудь Escape from Tarkov или Call of Duty, не имея за плечами опыта? Ваша первая игра не должна быть большой и сложной, иначе вы ее не закончите. Вы просто перегорите и уйдете из разработки игр.


Хорошо понимать, что именно ты хочешь сделать. Для опытного разработчика это не так важно, но на начальном этапе ответ на этот вопрос сузит пути возможного обучения.


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


Однопользовательская игра в этом отношении проще, поскольку вам не нужно беспокоиться о синхронизации состояния мира для других игроков, разделении игровой логики и других подобных проблемах.


С точки зрения игровой механики однопользовательская игра также может быть намного проще многопользовательской — и чем проще проект, тем легче вам его закончить. А завершить начатое – важнейший навык в любом деле!


Подводя итог, я бы посоветовал начать с одиночных игр — так будет проще . Но если вы действительно хотите создать простую многопользовательскую игру, в которую можно играть с друзьями, то почему бы и нет? Просто нужно понимать, что для получения первой рабочей версии потребуется больше времени. Однако внутренний драйв человека — штука очень сложная — возможно, создание онлайн-игр будет мотивировать вас гораздо больше, чем одиночные, увеличивая шансы завершить свой первый проект.


Ваш первый проект

Ну вот мы и подошли к главному вопросу — с чего именно начать, если хочешь делать игры?


Шаг 1. Выберите инструменты

Допустим, мы уже примерно понимаем, какой тип игры хотим создать. Мы знаем, какие языки программирования в основном используются и в каких движках они используются. Это этап, когда необходимо выбрать этот язык и движок. (Я бы посоветовал начать с C#. Для создания AAA-хитов вам понадобится C++, но давайте оставим это на потом, когда наберемся опыта.) Итак, нашей комбинацией языка и движка может быть C# + Unity . Они пользуются спросом и являются отличным выбором.



Распространенные заблуждения


Шаг 2: выучите язык

Это важный момент: не начинайте с движка, сначала выберите язык . Без языка вы вообще не сможете эффективно изучить движок; в примерах и документации вы просто ничего не поймете и только запутаетесь. В идеале вам не следует начинать изучать игровой движок, пока вы не овладеете языком и не сможете уверенно писать простые программы.


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


Шаг 3: двигатель

После того, как вы немного освоите язык, можно, наконец, приступить к изучению движка. В 2023 году информации по этой теме много: в Интернете полно ресурсов; десятки каналов YouTube для всего, что вы выберете. К тому же, как я уже сказал, Unity пользуется бешеной популярностью, так что недостатка в материалах нет.


Вы можете найти видео решение любой проблемы от создателей движка (доступно непосредственно на Unity Hub, который вы установите в начале), в подробной документации или в сети. Вы также можете присоединиться к уважаемому сообществу Discord, где люди делятся своими историями успеха и помогают друг другу. Их десятки; если вам нужно что-то проверенное временем, попробуйте, например, Брекис .


Следующие шаги пути

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


Как только вы немного изучите выбранный вами язык и движок, попробуйте создать простую игру . Любая игра, даже крестики-нолики. Делайте все, как вам хочется — никаких ограничений. Вы должны написать код самостоятельно. (Избегайте копирования из Stack Overflow , который, тем не менее, является очень полезным ресурсом). Главный критерий — игра должна работать.


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


Попробуйте отметить, насколько легко/трудно было добавить что-то новое в ваш рабочий проект. сумма, необходимая для изменения структуры кода и так далее. После этого изучите лучшие практики, посмотрите, как другие разработчики предлагают организовать проект и код (ООП, SOLID, KISS), и перепишите игру с учетом ваших новых знаний.


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


Постепенно, через несколько итераций, усложняйте проект и переписывайте его с учетом извлеченных уроков.



Ну, бывает...



Предполагая, что вы не срезаете углы, вы увидите, как принимаемые вами решения мешают или помогают реализовать новые функции. Один из главных критериев качества кода — насколько легко вносить изменения в проект. К сожалению, четких законов на этот счет нет; все приходит с опытом.


Если вам не хочется создавать простые игры, вместо этого вы можете начать с написания отдельных механик . Например, вы можете начать с создания элементарной «машины», состоящей из пары кубов, движущихся по некоторой поверхности, а затем постепенно добавлять в смесь другие механики.


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


Выпуск вашей первой игры

Вы можете попробовать выпустить через Itch.io , если вы пока не хотите связываться с большими платформами. Там вы сможете получить опыт в других актуальных областях разработки игр, а главное — собрать отзывы других людей. Это не всегда может быть конструктивно, особенно если это касается простых проектов для начинающих. Но небольшая обратная связь поможет вам вырасти и стать лучшим программистом.


Могу предложить вам небольшой лайфхак касательно релизов игр: веб/браузерных игр . Хотя этот формат, похоже, потерял популярность, учитывая, что пользователи сейчас в основном играют на мобильных устройствах, ПК или консолях, веб-игры по-прежнему имеют достаточную аудиторию, поэтому вы можете попробовать запустить свой дебютный проект как таковой. Это также намного проще, чем выпускать нативную игру на мобильных устройствах.


Конкуренция в мобильных играх жесткая, и ваша игра, скорее всего, останется незамеченной, если ее не продвигать, а продвигать проект без издателя очень сложно. Для веб-игр существуют специальные порталы (например: Armor Games, Newgrounds, WebGames ), на которых размещаются эти проекты: там очень легко выпускать и даже можно что-то заработать на рекламе. Не надейтесь, но все равно, если это произойдет, то это приятный бонус.


Небольшое предупреждение о подходе «без кода»

Теперь небольшое предупреждение. В наши дни подход «без кода» очень популярен. Это когда проект создается без написания кода. (Это также называется «программированием щелчком мыши»). Мой совет? Лучше держаться подальше от такого подхода.


Эти подходы без кода идеально подходят для опробования игровой механики или создания простого прототипа. Но у нас другая общая цель — и сборка простой игры без кода не приблизит вас к тому, чтобы стать разработчиком.


Помните: никакое количество чтения статей и просмотра руководств на YouTube не заменит практики. Только создав несколько (и действительно несколько, а не один) проектов, вы научитесь чему-то значимому. Чтобы наметить свой путь программиста в разработке игр, необходимо идти шаг за шагом, от простого к сложному.


Я попытался дать несколько советов о том, как заняться разработкой игр и начать программировать игры. Выбор правильного языка и движка, настойчивость и настойчивость, сбор обратной связи и самоанализ — все это очень важно. Но есть еще один компонент этого процесса, которым нельзя пренебрегать: получение удовольствия.


Если вы не увлечены играми и не играете в них, скорее всего, из этой затеи ничего не выйдет; печальная истина, которая применима практически к любой творческой работе. Без удовольствия это станет просто рутиной для зарабатывания денег. Конечно, вы в любом случае можете потерять интерес спустя годы, но, надеюсь, к тому времени вы уже достигнете успеха и сможете выбирать между какой-то сопутствующей работой, или вы заработаете достаточно, чтобы сделать что-то новое и интересное для вас на этом этапе.

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


Поэтому мой последний совет: ищите то, что делает вас страстным , то, что заставляет вас работать над проектом днями и ночами (конечно, не следует делать это в буквальном смысле!) Как только вы найдете свою движущую мотивацию, то, что В противном случае обычная рутина превратится в интересное и увлекательное занятие — и это обязательно ускорит ваш профессиональный рост!


Также опубликовано здесь.