Игорь Сыченко: от геймдева до ядерной разработки и обратно
История программиста, который 10 лет разрабатывал информационные системы для ядерного производства, а потом стал делать игры.
Иллюстрация: Colowgee для Skillbox Media
Я получил образование в Озёрске, в Челябинской области. Окончил лицей и отучился на инженера-программиста в Озёрском технологическом институте — филиале МИФИ.
Градообразующие предприятия в Озёрске — это заводы производственного объединения «Маяк». У каждого из них своя специализация, но все так или иначе связаны с ядерной тематикой. Есть чисто оборонный комплекс, производящий оружейный плутоний. Кто-то занимается его переработкой, кто-то — подготовкой для атомных электростанций. Есть медицинское направление, где создают изотопы для диагностики, и научные лаборатории по радиохимии.
На третьем и четвёртом курсе мы с другом проходили на «Маяке» практику. Нас приметили, при переходе на пятый курс предложили работу. Моя дипломная работа была связана с информационной системой предприятия.
Как я был ядерщиком
Наше подразделение обеспечивало информационную поддержку всех направлений, по которым работает «Маяк». Я занимался разработкой корпоративной логистики, включающей учёт и движение материалов, бухгалтерию, амортизацию и так далее.
Делал я это через базы данных и специализированные среды разработки от Alfasystem. Постепенно дорос до руководителя рабочей группы. Подписывал документы о неразглашении, не имел доступа ко многим данным. Отдельные сети, ограничения — многое было завязано на «первом», секретном отделе.
Но препятствий работе это не чинило. Я понимал, в какой форме данные будут храниться, и мог выстроить их структуру. Другое дело, что я не знал, чем именно наполнят эту структуру.
На самом деле крупные корпорации, частные и государственные, мало чем отличаются друг от друга. У них схожая иерархия, и они работают по одному и тому же принципу. Сверху есть руководство, а на сигнал снизу они практически не реагируют. Нет гибкости, и все изменения спускаются сверху. В случае «Маяка» всё было завязано на волю государства. Целью нашей деятельности было не приносить прибыль или предоставлять услуги, как на предприятиях рыночного сектора, а строго выполнять государственные задачи.
Главным плюсом была стабильность. Государство просто не может допустить, чтобы «Маяк» не работал, — это стратегический вопрос. Поэтому, вне зависимости от ситуации, тебе заплатят и у тебя будет работа. Даже в 2014 году, когда были проблемы с поставкой отработанного ядерного топлива (и, соответственно, оплатой его переработки), зарплату всё равно выплачивали регулярно.
Я работал на «Маяке» вплоть до 2017 года, но одной только стабильности мне не хватало. Хотелось чего-то ещё.
Как я математически описал смену своей работы
Когда учился на третьем курсе, я начал преподавать в школе компьютерных технологий при МИФИ. Обучал школьников, которые готовились к поступлению в вуз или просто интересовались программированием.
Потом преподавал уже у студентов. Учил их проектированию баз данных, составлению бизнес-логики, интеграции в общую информационную среду предприятия. По сути, это то, чем я занимался на «Маяке». На предприятии нам дали ограниченный доступ, урезанную копию чистой базы данных, и мы с этим работали.
Во время своей вузовской карьеры я написал несколько работ по метафизике. При МИФИ есть философский клуб. Я подружился с его руководителем, и мы стали вместе работать. Так появилась статья на стыке философии и математики.
Есть такая последовательность Фейгенбаума, когда последующий элемент определяется предыдущим с помощью простейшей функции, которая даёт минимальное приращение на каждой итерации. Как ни странно, такая кажущаяся простота может привести к очень интересным, неоднозначным результатам.
Если перекладывать на обычную жизнь, каждый наш шаг вносит минимальную дельту в нашу жизнь. Но в какой-то момент происходит «непонятная аномалия», которая перестаёт описываться этой функцией. Она называется точкой бифуркации. В ней возникает развилка, когда дальнейшее развитие функции пойдёт по двум самым вероятным вариантам.
То есть в какой-то момент сумма накопленных изменений позволяет превратить количество в качество. В нашей жизни эти точки бифуркации появляются, когда ты стоишь на развилке своей жизни и можешь пойти различными путями.
Моя работа по метафизике — математическое обоснование того, как мы преодолеваем кризисы. Таким образом, я математически описал, как в будущем сменю работу.
Почему я ушёл в бизнес
Стабильность — это хорошо, но мне хотелось свободы и развития. Я решил найти себя в чём-то новом. Перебрался в Челябинск и вместе с компаньоном занялся рекламным бизнесом. Он занимался бизнес-частью, а я технологическим обеспечением. Изначально мне хотелось попробовать себя в чём-то другом, но в итоге я вернулся к тому, чем занимался в «Маяке», — к информационным системам.
Я создал рабочую ИС, которая функционировала вплоть до закрытия фирмы. Это позволило стандартизировать процессы, сделать их прозрачными. Мы смогли, например, заменить шесть человек одним, что заметно сэкономило средства из фонда оплаты труда.
Поскольку всё это строилось на базе сайта, я обслуживал и его. Не могу назвать себя фанатом фронтенда и интернет-технологий, но пришлось выучить. Знаний хватало, чтобы освоить всё быстро и самостоятельно, — Google в помощь.
Работа в крупном госучреждении и небольшой частной фирме очень сильно различается. В бизнесе всё постоянно меняется. Нельзя что-то сделать на годы вперёд. Наоборот: сделал — и сразу же начинаешь переделывать, потому что ситуация на рынке изменилась, а та бизнес-логика, которую ты выстроил, оказалась недостаточно эффективной. Это нескончаемый процесс проведения улучшений и изменений — нужно постоянно что-то оптимизировать, искать новые решения.
С одной стороны, ты не стагнируешь, всё время развиваешься. С другой стороны, ты всю дорогу на иголках и пашешь 24/7.
Психологически было трудно. Я дико перерабатывал. Были месяцы, когда средний рабочий день составлял 14–18 часов. И я не знал, приведёт мой труд к материальному достатку или всё в результате окажется просто волонтёрством.
Как я потерял всё, но не ушёл из программирования
Конец этому периоду жизни положила пандемия. Она нанесла очень сильный удар по рекламному бизнесу: кого будет волновать реклама, если нет ни продаж, ни заказчиков?
Правда, мы, благодаря нашей информационной системе, ещё довольно долго продержались и даже закрыли предприятие без долгов. Выполнили все обязательства, потихонечку отпустили людей с зарплатой — никто не ушёл на улицу ни с чем.
Лично для меня всё закончилось в августе 2020 года: в кармане — полторы тысячи рублей, доходов в обозримом будущем не предвидится. Понимаю, что больше не хочу заниматься информационными системами. А на то, чтобы найти что-то новое, есть максимум месяц. Больше нельзя: надо что-то кушать.
Это был тяжёлый месяц. Я не знал, к чему себя приложить, потому что не привык сидеть без дела. Я считаю, что человек проявляется именно в работе: для себя, для других людей, для общества. Труд — это выражение человека.
Если ты ничем не занят, то ты практически паразит на теле общества. Это не значит, что нельзя отдыхать, но мне важно понимать, для чего я живу, что делаю, что привношу в эту жизнь.
Начался поиск себя: чем я вообще хочу заниматься? Есть простая, но эффективная методика. Выписываешь, что умеешь делать и за что люди готовы благодарить или платить. Потом из этого выбираешь умения и сферы, в которых хочется развиваться. Я выписал большой список того, что нравится, вплоть до «люблю смотреть кино на диване». Это тоже может подтолкнуть к мысли о новом направлении деятельности.
Стал присматриваться к отраслям, не связанным с программированием. Некоторое время я занимался творчеством, есть несколько изданных научно-фантастических книг. Но если хочешь стать писателем, книги должны печься как горячие пирожки — по несколько страниц за день. Пробовал — в таком темпе нереально продержаться долго.
Подумал: «Что ещё мне интересно? Почему я в программирование пошёл?» Каждый раз, изучая новый язык программирования, я делал небольшую игру. Это и помогало в обучении, и приносило удовольствие.
Тут меня озарило: «Отлично! Что объединяет игры и книги? Сюжет, нарратив. Может быть, в нарративный дизайн пойти?»
В Челябинске была замечательная группа, которая устраивала обеды для разработчиков игр. Я сходил туда, поговорил с ребятами и понял, что не хочу уходить из программирования ни при каких обстоятельствах.
Да, творчество — это интересно, это моё. Программирование — тоже творческий процесс. Почему бы не совместить одно с другим? Так я вышел на игровой движок Unreal, за следующий месяц освоил его и устроился на работу.
Этот месяц обучения прошёл на подъёме. Чем больше я учился, тем больше понимал: это то, что мне нужно. И задавал себе вопрос: «Почему мне потребовался такой длинный путь?»
Почему мне нужно было потратить 10 лет на то, чтобы прийти к тому, с чего я начинал? Я ведь именно поэтому пошёл в программирование: мне интересны игры и то, как они работают. Цикл замкнулся.
В препятствиях скрыто очень много ресурсов — подтягиваешь опыт и идёшь новой дорогой. Мой стресс помог «обнулиться» и после 10 лет исканий найти дело по душе и войти в него с багажом профессионального опыта.
Что нужно знать начинающему игровому разработчику — на примере Unreal
Программисту, чтобы войти в геймдев, нужно, во-первых, выбрать движок. Самые популярные — Unity и Unreal.
Нужно ли глубоко знать языки, на которых написан движок? Unreal, например, использует C++, но привносит многое от себя. Чтобы что-то делать на Unreal на базовом уровне, глубокое понимание C++ не требуется.
Более того, благодаря визуальному программированию через Blueprint знать язык вообще не нужно. Его будет достаточно для простенькой игры. Однако, если мы говорим о профессиональном уровне, без знания языка никуда. Оно становится необходимым, если начинаешь разрабатывать собственные инструменты и хочешь оптимизировать их.
Но у того же Unreal есть широкий инструментарий, который написан разработчиками. Использовать его можно, но под специфические задачи, как правило, готовых инструментов не хватает. Приходится разрабатывать что-то своё.
Unreal построен на принципах объектно-ориентированного программирования. Для игр это не всегда хорошо. Более того, при разработке сложной, комплексной игры, такой как RPG, например, ООП создаёт большие проблемы. В какой-то момент оно перестаёт быть гибким инструментом.
Поэтому сейчас всё чаще используют ECS-подход. В пятой версии Unreal разрабатывается специальный инструмент для работы с ECS — MassEntity.
Джунам достаточно общего понимания. Если берёшь Unreal, нужно понимать, как он устроен, как работает, что такое game state, game mode, как работает контроллер игрока, как работать с сетью, что такое репликация, какие сетевые объекты подлежат репликации, какие нет и так далее.
Нужно изучить архитектуру Unreal. Плюс требуется базовое понимание C++, паттернов программирования. Лучше всего сделать свой простенький проект и на этом потренироваться.
Так что, если хотим стать игровым разработчиком, изучаем движок, изучаем ECS, изучаем ООП, изучаем философию программирования. И пробуем, пробуем, пробуем.
Как я работаю в геймдеве
Освоив Unreal, я устроился в AppFox и проработал там чуть меньше года. Это был мой первый опыт в геймдеве. Мы занимались VR-проектом, затем перешли на разработку мобильной игры, мини-стрелялки.
На втором проекте я стал ведущим разработчиком, довёл игру до готовности к мультиплееру и отправился искать новую работу.
Пришёл в Black Caviar Games на мобильную RPG. Проект тогда только зарождался. Мы начали разработку на Unreal и активно использовали Gameplay Ability System — это довольно гибкий ECS-подобный плагин для Unreal.
Но поскольку компетенции компании в основном были связаны с Unity, со временем мы перешли на эту платформу. Пришлось за три недели освоить азы нового движка, чтобы перенести игру на него. На Unity проект сейчас и развивается.
В мои обязанности входит в первую очередь разработка логики игры. Сейчас, например, я занимаюсь искусственным интеллектом и его расширением под новые задачи. Тот ИИ, который был раньше, нас не устраивает. Хотим расширить его так, чтобы геймдизайнеры могли сами, как конструктор, собирать логику поведения мобов, NPC и так далее.
Прошёл альфа-релиз, все заказчики остались довольны, продолжаем разрабатывать. Надеюсь, скоро в релиз выйдем.
Чем игровая разработка отличается от других
Геймдев радикально отличается от того, чем я занимался раньше. Постоянно испытываю что-то похожее на то, что чувствовал при переходе из «Маяка» в собственный бизнес. Ты что-то делаешь, потом приходит геймдизайнер и говорит: «Отлично, это хорошо работает, но нужно дополнить» — или вообще сделать по-другому.
При создании игры нельзя просто написать: «Это будет устроено так, а это — вот так». Это постоянный поиск того, что зацепит игрока и создаст для него нужный опыт. Всегда смотришь на созданное и оцениваешь: «Вот это работает, а вот здесь нет желаемого впечатления».
Возьмём игровую камеру. Как она должна вести себя, когда игрок не в боевом режиме и просто перемещается по локации? Когда разговаривает с каким-то NPC? Когда он в бою?
Это три совершенно разные камеры и совершенно разные взгляды со стороны игрока. Когда игрок перемещается, ему важно видеть, куда он идёт. Во время разговора ему интересно, с кем он разговаривает и как это выглядит со стороны, если камера от третьего лица. В бою он хочет понимать, где находятся противники, как избежать их удара и нанести свой.
Такие вопросы решают геймдизайнеры. Моя задача как программиста — дать им инструмент для одновременно тонкой и гибкой настройки: «кубики логики», из которых будет построена игра. Например, для искусственного интеллекта эти кубики выглядят как условия (проверки радиуса атаки, наличия врагов, собственного состояния), действия (перемещение по уровню, применение атаки) и так далее.
Поэтому ООП не всегда подходит — при работе с ним гораздо сложнее вносить изменения. В ECS-структуре обычно нужно включить одну функцию или немножко её изменить, и этого будет достаточно.
В ООП, как правило, всё взаимосвязано. Так тесно переплетено, что, изменяя одно, ты задеваешь другое. Это тянет за собой каскад изменений, на которые тратится очень много времени.
Как я отношусь к работе
Сейчас я живу в Челябинске, но в течение жизни сменил шесть городов. Когда ты меняешь город за городом, учишься быстро адаптироваться к новым условиям. Возможно, это как-то повлияло на гибкость и обучаемость. А может, это было врождённое.
У меня нет страха что-то радикально поменять. Желания тоже нет, но готовность есть всегда.
Когда уходишь с одной работы на другую, меняешь область — это всегда стресс и риск. Но это не пугает, а рождает интерес: что-то новое обязательно войдёт в жизнь. Что же?
Ещё в годы руководства я понял, что не хочу быть руководителем. Ответственности не боюсь, но мне гораздо интереснее заниматься непосредственно творческим процессом программирования и помогать новичкам.
Я кайфую от этого. У каждого по жизни свои драйверы — то, что мотивирует и преобразует опыт в новые достижения. У кого-то это карьерная лестница, у кого-то — экспертность.
Свой карьерный рост я вижу не в том, чтобы выйти «из подчинённых в начальники», а в повышении уровня знаний и навыков — того, что ты можешь сделать на проекте. Это всё равно сказывается на зарплате. Можешь больше — делаешь больше, лучше, быстрее.
Мне не нужно принимать концептуальные решения, но при этом я всё равно могу на них влиять и давать советы. Ко мне прислушиваются. Нам повезло с руководством.
Не могу оценить, теряю ли из-за своего подхода в деньгах. Подозреваю, что получаю не сильно меньше, чем мог бы на руководящей должности, — и этого достаточно. Я предпочту получать от работы удовольствие, а не ещё 10–20% к зарплате.