Как я попал в геймдев

С июня 2020 меня официально повысили, поэтому теперь я Senior Software Developer (старший программист). Пользуясь случаем, я решил порефлексировать, поразмышлять о своей карьере и написать, как я попал в геймдев. У этой рефлексии даже есть мораль, так что пост может быть полезен для тех, кто хочет поучиться на чужих решениях и ошибках.

Как я попал в геймдев

Универ

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

Мои родители по образованию связисты, поэтому я последовал их примеру и поступил на кафедру радиотехники в политех в Санкт-Петербурге. Теперь я не боюсь 5G и понимаю почти все из этого видео.

Российский институт мощного радиостроения

Начиная со второго курса, в политехе есть такая вещь, как НИР — научно-исследовательская работа. Студенты выбирают себе какую-то тему у одного из преподавателей кафедры или на одном из предприятий, с которыми кафедра сотрудничает. В идеале, студент с помощью НИР набирает материалы для бакалаврской работы на 4м курсе, а потом и для магистерской на 6м. Так я попал в РИМР — российский институт мощного радиостроения, в отдел длинноволновых передатчиков. Это такие передатчики с мощностью в сотни киловатт и с антеннами длиной в несколько сотен метров.

Мой научный руководитель, он же ведущий инженер и руководитель проекта, задал мне вопрос — чем бы мне было интереснее заниматься: железом для передатчиков или программированием микроконтроллеров для систем управления в этих передатчиках. Я еще где-то день размышлял, даже звонил маме посоветоваться (а с кем еще советоваться на 2м курсе?). В итоге, я решил, что программировать микроконтроллеры — это более перспективно, чем заниматься железом. Сейчас я понимаю, что это было одним из ключевых решений в моей карьере.

Я писал софт для микроконтроллеров (сначала на ассемблере, потом на C) и программируемых логических интегральных схем (на Verilog). Тогда я решил, что в программировании микроконтроллеров мне больше нравится программирование и меньше — сами микроконтроллеры.

Так я поставил себе цель — стать программистом. Когда есть цель, легче планировать свое время. На кафедре радиотехники не учат программированию, поэтому я нашел и закончил курсы Junior C++ Developer и начал читать кучу книг о программировании и алгоритмах. Настало время подумать о смене работы.

В те времена я активно играл в Magic: the Gathering (вживую, не онлайн) и познакомился с игроком, которым был руководителем отдела верификации в компании, которая занималась софтом для авионики. Он позвал меня на собеседование — это было мое первое серьезное собеседование, и я его даже прошел. Правда, мне сказали, что пара их бывших опытных программистов решили вернуться, поэтому меня не могут взять прямо сейчас. Пришлось искать работу классическим способом: через hh.ru, рассылку резюме и собеседования.

У меня даже было собеседование в Nevosoft — питерской компании, которая делает казуалки. Мне ответили, что я им понравился, но продюсер решил, что на проект нужен кто-то более опытный. А так мог бы попасть в геймдев уже тогда и делать match-3 игры, эх…

НПП Буревестник

Так я попал в научно-производственное предприятие «Буревестник». Мне очень понравилась команда — я даже получил удовольствие от собеседования с этими людьми. Еще мне понравилось, что тут есть и софт, и железо, но софт уже не для микроконтроллеров, а для Windows и Linux, в том числе на встраиваемых одноплатных компьютерах. Поэтому переход получился более мягкий — я мог опираться на уже полученный опыт, пока подтягиваю программирование. Но, по сути, я с одного советского завода пришел на другой советский завод.

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

Через пару месяцев работы мне позвонил тот самый знакомый по Magic: the Gathering и сказал, что они создают новый отдел и набирают туда людей. Зарплата в 1.5 раза выше текущей, участие в развитии отдела с самого начала, карьерные перспективы. Мне нужны были деньги, так как я планировал поступать на платную магистратуру на вечерку и мне нужно было платить за аренду квартиры. Тогда я еще был на испытательном сроке, поэтому мог легко уйти, но мне сделали встречное предложение. В Буревестнике не могли повысить зарплату из-за ограничений в бухгалтерии, но они могли оплачивать мне аренду квартиры, так как это бы прошло по другой статье расходов. В итоге я извинился перед знакомым по MtG, остался в Буревестнике и поступил на второе высшее, как и планировал.

Следующие 3 года я писал софт для промышленных аналитических приборов на C++ (Qt) и Java (JavaFX).

На фото ЭМИС-3 видно графический интерфейс — это я делал. Я же его и дизайнил. Откуда на заводе отдельный дизайнер? Прототип ЭМИС-3, кстати, во время тестирования несколько недель стоял на одном из отчистных сооружений Водоканала в Санкт-Петербурге. В приборе стоял 3G-модем, поэтому к нему можно было подключаться удаленно, чтобы брать данные или управлять через ssh. Тогда я узнал, каково это — накосячить так, что к прибору больше нельзя подключиться и нужно ехать восстанавливать на месте.

Второе высшее

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

Так у меня появилась новая цель — попасть в геймдев. Я начал читать про алгоритмы из игр, как работает 3D-графика, копался в LibGDX (набор библиотек для разработки игр на Java), а также старался выбирать темы для курсовых, связанные с играми — например, алгоритмы поиска пути.

Прототип тактической мобильной игры на LibGDX

А потом еще и магистерскую диссертацию написал по теме «Исследование методов моделирования принятия решений на примере ботов в компьютерной игре». Для этого я написал простенький top-down шутер, стравливал на арене ботов с разными алгоритмами и считал винрейт. В качестве научной работы получилось слабовато, но зато узнал много нового об алгоритмах принятия решений: конечные автоматы, деревья поведения, нечеткая логика, нейронные сети, теория полезности, проверка статистических гипотез и goal oriented action planning (который используется в F.E.A.R.)

Конечный автомат (синий) против дерева поведения (красный)

Wargaming Academy

Примерно за полгода до окончания второго высшего я увидел в твиттере ссылку на это интервью на app2top с анонсом нового набора студентов в Wargaming Academy.

Я подумал, что почему бы и нет, надо вписаться. И вписался. Wargaming Academy (WGA) — это такое бесплатное обучение, которое длится полгода. Всех студентов делят на команды и ждут от них проекты к концу обучения. Жанр и сеттинг проектов определяется по жребию. Но самое главное — это лекции. На протяжении всего этого времени пару раз в неделю дают лекции по разным темам, причем лекции ведут сами сотрудники питерского варгейминга. И это очень круто. Будучи студентом, ты можешь лично задать вопросы программистам логики и графики, главе отдела тестирования, геймдизайнерам, 2D и 3D художникам, главе издательского отдела и многим другим. Не понимаю людей, которые пропускали лекции и просто делали проекты. Зачем вообще тогда записываться?

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

Я вдохновился Layers of Fear, а, конкретно, их фишкой с тем, что окружение меняется, когда на него не смотришь.

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

Я взял Unity, купил за 50 баксов ассеты с хоррор-школой, взял музыку из других хорроров, а в качестве монстра взял просто точечный источник света и добавил глитч-эффектов, когда игрок смотрит на него, — это было гораздо проще, чем возиться с моделями и анимацией. Антиутопическому сеттингу досталось хуже всего — я просто условно натянул его на то, что получилось.

Итоговый проект. Прохождение с хорошей концовкой.

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

Wargaming

На одной из лекций в WGA преподаватель обмолвился, что они ищут программиста в отдел. Я отправил ему ссылку на свой GitHub аккаут с исходными кодами своих проектов, и меня позвали на собеседование. Собеседование было простым — без технических вопросов, так как брали младшим программистом, примеры моего кода уже видели на GitHub, а со мной уже были знакомы по академии. Так я попал в геймдев в качестве младшего Unity-программиста, а после испытательного срока уже стал мидлом.

Мы делали мобильную стратегию Warfair, и это было круто. Пока игра была в раннем доступе, мы сами активно играли, обсуждали мету и общались с игроками в дискорде.

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

Как я попал в геймдев

Забавное совпадение: два человека из этого отдела раньше работали в Nevosoft, куда я проходил собеседование за несколько лет до этого. Так что я мог бы познакомиться с ними раньше, если бы меня туда взяли.

Sulake

После закрытия Warfair я стал потихоньку думать о смене работы. Жена тоже хотела поменять работу, поэтому мы решили, что почему бы тогда не искать сразу в другой стране. Мы еще молодые, у нас нет жестких якорей, поэтому можно подумать и о карьере за рубежом. Так у нас появилась новая цель — найти работу в Европе. Желательно в Финляндии, так как там очень развита игровая индустрия, и Финляндия очень близко к Санкт-Петербургу.

Примерно так же случайно, как и про WGA, я узнал про Finnish Game Days (сейчас называются Games Job Fair, организатор — Games Factory Talent). Это конференции, которые проводятся в разных городах 1-2 раза в год. На них приходят представители финских игровых и околоигровых компаний и ищут себе работников среди местного населения. Я попал на одну такую конференцию, собеседовался с одной компанией, но без результата.

Зато мое резюме оказалось у организаторов Finnish Game Days, которые по своей сути являются рекрутинговым агентством. Они написали мне через несколько месяцев и сказали, что есть одна компания из Хельсинки, которая ищет Java-программиста. После 3х собеседований (2 удаленно и 1 в Хельсинки) мне предложили работу. Так я попал в Sulake.

Подробнее обо всем этом я писал на Хабре:

Теперь я Java-программист. Пишу бэкенд для игр (Spring) и внутренние инструменты в админке (AngularJS). Клиент пишется на Unity, так что опыт с прошлой работы тоже иногда пригождается, хоть и редко. В каком-то смысле, это решение было принято про принципу «Лучше синица в руках, чем журавль в небе». Я решил согласиться и сменить стек с Unity на Java, потому что это была уж очень хорошая возможность, а другой можно было бы ждать еще долго.

Sulake — это разработчики Habbo, социальной игры / платформы, где игроки общаются друг с другом и кастомизируют своих аватаров и комнаты. Ей уже 20 лет, золотые времена Хаббо были в 2006-2010 годах, когда там была куча рейдов с форчана. Самый известный из них — «Бассейн закрыт, в нем СПИД!» (Pool’s closed due to AIDS!). Про это даже есть статьи на лурке и knowyourmeme.

Бассейн закрыт
Бассейн закрыт
Пранк, который вышел из-под контроля (на английском).

Я работаю над Hotel Hideaway — игрой в том же жанре, что и Habbo. К этому же жанру можно отнести Second Life и даже VR Chat. В каком-то смысле, мы делаем игры, которые приносят пользу. Во время пандемии короновируса у нас был большой приток пользователей. Люди, которым не хватает общения в жизни, идут в такие игры, чтобы общаться с друзьями там.

Hotel Hideaway

Выводы

Ставьте цели — так легче находить решения

В посте про феномен Баадера-Майнхоф я писал про одно из его проявлений: если у вас есть какая-то проблема, то мозг лучше подмечает решения для нее. Если у вас есть сформулированная цель, вам будет легче двигаться в нужном направлении.

Моя карьера — это череда случайных возможностей, которыми я удачно воспользовался. Когда у меня была цель стать программистом, я узнал, что один мой знакомый по хобби ищет программистов. Когда у меня была цель попасть в геймдев, я узнал про Wargaming Academy, а потом удачно поговорил с одним из лекторов. Когда у меня была цель найти работу в Финляндии, я узнал про Finnish Game Days.

Сейчас у меня тоже есть цель, и я ее придерживаюсь.

Портфолио — это полезно

Если б у меня не было аккаунта на GitHub с примерами моего кода, то, возможно, некоторые собеседования прошли бы по-другому. Так что если у вас есть, что добавить в портфолио, то лучше это сделать.

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

Отсутстсвие специализации тормозит карьеру

Это для меня очень больная тема. За всю свою карьеру (9 лет) я поменял кучу технологий. Мой путь, как программиста, выглядит так:

Assembler → C → C++ (Qt) → Java SE → C# (Unity) → Java (Spring)

Я радикально меняю технологический стек примерно раз в 2 года. Из-за этого у меня большой кругозор, много поверхностных знаний, но им часто не хватает глубины. Только сейчас, после 9 лет, я стал синьором (senior programmer). Мне немного обидно смотреть на 25-летних синьоров и технических директоров. Или на однокурсников, которые учились вместе со мной на втором высшем, потом ушли в какой-нибудь T-Systems или EPAM на аутсорс-разработку и стали синьорами за 2 года.

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

Но я бы советовал людям определиться со специализацией пораньше. Не делайте моих ошибок.

6868
27 комментариев

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

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

Не хочу говорить фразы типа "передаю челлендж" или "передаю эстафету" такому-то, но я, например, знаю, что у @Andrey Apanasik есть история про инди-проект и бизнес-инкубаторы из 4х разных стран - было бы очень интересно почитать об этом и многом другом. А еще он лично знает Галёнкина и был у него в подкасте. Ну или это какой-то другой "Андрей Апанасик, CTO/backend dev, Unnyhog", всякое бывает.

5
Ответить

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

12
Ответить

С июня 2020 меня официально повысили, поэтому теперь я Senior Software Developer (старший программист).Поздравляю и желаю успехов!

4
Ответить

Спасибо!

3
Ответить

Но я бы советовал людям определиться со специализацией пораньше. Не делайте моих ошибок.+++.
Сам начал менять профессию в 21 год, учился и работал по смежной специальности, в 2 года назад только удалось достичь цели, закончив ВУЗ + доп.программу в другом ВУЗе. Зато, миновал позицию джуна/ассистента и сразу выполз на среднестатистического спеца, с оговоркой, что первые месяцы чуть ли не ночевал в офисе.
Сейчас сижу с учебниками в обнимку с целью притопать к синиору или как минимум к зп синиора, что в принципе мне даже интереснее.
С другой стороны, не всегда возможно сразу найти то, чего хочешь, но с уверенностью могу сказать, что менять что-то никогда не поздно. 

2
Ответить