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

Часть 1. Путешествие героя

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

Наконец-то пришло время заняться чем-нибудь интересным. Больше никаких уроков кодирования! Больше не говорят, что делать! (Кроме 8 часов в день, пять дней в неделю).

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

По выходным их маленькая игра становится все более и более изощренной. Жизнь хороша. Их сверстники в Discord рады видеть, что они добавили в свой маленький проект. Но потом приходит рой.

Ошибки.

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

Но уже слишком поздно. Баги не исчезнут.

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

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

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

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

Встревоженный, герой отправляет последнюю фиксацию и смиряется с тем, что днем ​​​​будет программистом. Когда они видят любой пиксель-арт где угодно — даже висящий в окне GameStop на рекламном фрагменте — это жалит. Разработка игр — это сложно.

Квест окончен —

Часть 2. Герой наносит ответный удар

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

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

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

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

Почему этот инструмент командной строки не настроит проект правильно? Разве эти шаблоны не должны работать из коробки? Почему автозаполнение перестало работать в моем редакторе кода? Почему он говорит мне, что проект устарел сразу после того, как я его создал? В любом случае, что такое разрешение зависимостей? Что! Мой редактор кода только что разбился… снова?!?!

Сколько инструментов командной строки я должен победить? Почему все файлы проекта в… XML? Смогу ли я когда-нибудь снова заняться кодированием? Подожди, как я сделал это в прошлый раз? Я должен был делать заметки? Я просто удалю проект и начну заново. Конечно, на этот раз генератор шаблонов сработает… неужели так сложится моя дальнейшая карьера? Это то, о чем меня пытались предупредить?

Это не что иное, как искра радости, которую герой впервые испытал, работая над своим глючным платформенно-зависимым 2D-проектом в прошлые годы! Разработка игр — это не весело — это объективно ужасно! Это даже серьезная работа! Если Инструменты всегда пытаются бороться с вами, как вы должны что-то делать?

Пора вернуться к игре в Stardew Valley. Может быть, они смогут подавить этот дурацкий зуд сделать что-то раз и навсегда. Возможно, они смогут потушить огонь, горящий внутри них… Вечный огонь разработки игр. В конце концов, пламя превращается в маленькую, шипящую свечу, запертую в самых темных уголках их сердец, и их больше никогда не увидят.

Часть 3. Мастер-волшебник

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

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

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

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

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

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

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

Когда они понимают, что их плагин Omnisharp C# не будет генерировать для них файлы launch.json из-за ошибки в недавнем расширении, они терпеливо удаляют текущую версию, ищут нужную версию на странице выпуска расширения GitHub, устанавливают ее, генерируют файлы и обновиться до последней версии. Вместо того, чтобы бояться Инструментов, они делают коммиты Git, к которым можно легко вернуться. Они знают, что путь долог и мучителен, и немногие выживают. Герой обнаруживает священные документы, описывающие правильную настройку проекта, закопанные на малоизвестной ветке личного проекта самим создателем MonoGame. Мало-помалу они продолжают прокладывать туннели через темное подземелье, пока не достигают дневного света:

Красивое многопроектное решение C# с тестированием, общим независимым от платформы кодом и зависимыми от платформы проектами. Все работает в отладчике, все было тщательно настроено вручную с помощью утилит командной строки dotnet. Слеза скатывается по их лицу. Они поднимают глаза как раз вовремя, чтобы увидеть, как Муфаса улыбается им сверху.

Отсюда создание игры кажется слишком простым. Это почти ошеломляет. Имея заглушки для игрового кода, тестов и макетов, ничего не остается делать, кроме как создать настоящую игру. И строят они. Искра хакерства в 2D-игре возвращается, сдерживаемая трудоемким написанием тестов. Постепенно они, наконец, создают 2D-игру своей мечты.

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

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

Но никто не покупает.

Часть 4. Стать злодеем

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

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

Поначалу герой не верит в это. Как так много других людей смогли успешно создать игру, когда это ТАК СЛОЖНО? После некоторого гугления выясняется, что все остальные на самом деле используют игровые движки, как здравомыслящие люди, а не просто фреймворк вроде MonoGame, который позволяет все делать самому. Некоторые из них даже использовали GameMaker! Какие двуличные самозванцы! Они не заработали! Я сделал эту игру своей кровью, потом и слезами!

По мере того, как гугление продолжается, главный фокусник понимает свою ошибку. Они не запускали сервер Discord и не публиковали обновления разработчиков. Они не платили за рекламу на Facebook и даже не открывали Страницу Facebook. Их даже нет на Facebook больше! Столько упущенных возможностей! Они могли бы запустить патреон, транслировать разработку на Twitch или вести журнал разработки игр на YouTube. Но нет, кодировали молча.

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

Игра могла бы быть намного лучше. То, что они создали, на самом деле является лишь началом чего-то гораздо большего.

В отчаянии наш герой пытается запустить сервер Discord. Они публикуют обновления разработки игр. Они принимают запросы сообщества. Они создают больше искусства, расширяют знания и реорганизуют код. Выходит следующее. Начинают вылетать регулярные обновления. Они интегрируют SteamWorks и начинают обдумывать вариант многопользовательской игры. Их код не нужно было бы сильно менять, чтобы втиснуть его… Другие люди предлагают им помощь. Герой нанимает кого-то, кто занимается продажами игры, чтобы тот занимался маркетинговым аспектом. Они образуют небольшую игровую студию.

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

Конец.