Эссе о разработке игр, мышлении и книгах

Итоги творческого отпуска 2024-2026 годов en ru

Идиоматически проводим творческий отпуск.

Идиоматически проводим творческий отпуск.

В 2023 году Юля сделала таблицу из 1000 лаб (!), выбрала из них одну, переехала в Германию и начала делать PhD в ней. Мы год полетали друг к другу между Польшей и Германией, поняли, что это жуть как неудобно и дорого, поэтому я уволился из Palta и в начале 2024 года переехал прицепом жены в Германию.

«Отличный повод уйти в очередной творческий отпуск», — подумал я, после чего так и сделал. Два с половиной года спустя пришло время искать работу подводить итоги.

В этом посте вы найдёте полный отчёт о проделанном отдыхе: что было запланировано, как изменились планы, что удалось сделать, а что нет.

Краткие итоги: блог обновлён, 68 постов написано, 20 книг прочитано, 4 новых open source проекта реализовано, больше 400 звёзд на GitHub заработано, feeds.fun стал удобным в использовании и готов к монетизации, собственный подход к менеджменту сформулирован, странные, но интересные курсы разработки интеллектуальной собственности пройдены, с ИИ разобрался, coding agents кодят, глаз у жены дёргается.

Ссылки для лучшего понимания поста:

План

Отпуск планировался заранее и включал следующие направления.

Главные цели:

  • [done] Завершить переезд семьи в Германию, решить бытовые вопросы.
  • [done] Подтянуть теоретические знания по менеджменту.
  • [90%] Попробовать запустить минимум один свой проект.

Второстепенные цели:

  • [50%] Отдохнуть.
  • [in progress] Улучшить английский.
  • [50%] Разгрести накопившуюся очередь из книг.
  • [done] Обновить блог.

На всё это удовольствие я выделил себе 2 года, но потом добавились новые цели, и в итоге получилось 2.5 года.

Внезапные цели:

  • [done] Закончить курс World Builders про разработку интеллектуальной собственности и создание вымышленных миров.
  • [done] Разобраться с ИИ хайпом: что есть что и куда всё движется.
  • [in progress] Разобраться с coding agents, научиться эффективно их использовать.

Результаты с высокой колокольни

Результатами я удовлетворён, но лишние полгода, конечно, раздражают и портят картину.

Идея была в том, чтобы в лёгком темпе закрыть накопившиеся вопросы и двигаться дальше. Вместо этого пришлось довольно сильно напрягаться, чтобы совсем не вылететь из графика. В итоге с отдыхом, например, не задалось. Однако я всё-таки немного отдохнул.

Задержка, конечно, связана с дополнительными целями, каждая из которых отъела по 3-6 месяцев. С другой стороны, если участие в World Builders и было потенциально неверным осознанным выбором, то ИИ влез в планы без спроса, и ничего с этим не поделать. Я рад, что взлёт LLM и coding agents пришёлся на саббатикал — совершенно не представляю, как без стресса с этим можно было разобраться в рабочих условиях.

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

Самой заметной неудачей я считаю «незапуск» своего проекта. Главных причин две:

  • До завершения курса World Builders было неясно, что это будет: игра или feeds.fun.
  • Моя боязнь немецкой бюрократии и нежелание тратить лишние деньги. В итоге в Feeds Fun для подключения платежей готово всё, кроме юридического лица и обработчика веб-хуков от сервиса платежей. Поэтому этой цели поставлен прогресс в 90%. Подключу платежи, как только определюсь, что буду делать после саббатикала.

Теперь можно рассказать подробнее, чем именно я занимался. Мелкие и личные вещи опущу, пройдёмся по основным направлениям.

Open source

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

За саббатикал я с нуля реализовал 4 новых проекта и активно работал над ещё двумя (Feeds Fun и Сказка).

  • feeds.fun — web-based self-hosted читалка новостей с тегами и правилами приоритезации новостей.
  • brigid — движок этого блога.
  • changy — CLI-менеджер/генератор changelog для людей — его используют все мои проекты.
  • donna — CLI для контроля потока исполнения вашего агента, чтобы агент работал строго по workflow.
  • depmesh — CLI для определения зависимостей между файлами вашего проекта, чтобы агенты могли быстрее и экономнее формировать контекст.
  • Лор Сказки открыт под лицензией CC BY 4.0, игра остановлена после 13 лет работы. На всякий случай вот сайт игры и исходники.

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

Feeds Fun

Динамика звёзд репозитория [feeds.fun](https://github.com/Tiendil/feeds.fun).

Динамика звёзд репозитория feeds.fun.

Сначала я как-то взгрустнул по поводу прогресса проекта, но потом посмотрел, что количество звёзд у репозитория выросло с 10 до 400 11 до 394, и пошёл читать CHANGELOG.

За два года было сделано много чего, особенно в плане скрытой работы.

Подготовлено много штук для сообщества: roadmap, Docker images, примеры использования, блог, Discord, Reddit.

Кроме запланированных задач, периодически делал фичи по запросу пользователей. Это говорит о том, что читалкой пользуются.

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

Доработал интерфейс до уровня «не стыдно показать людям».

Текущий вид интерфейса.

Текущий вид интерфейса.

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

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

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

Количество уникальных тегов в месяц до и после включения нормализации.

Количество уникальных тегов в месяц до и после включения нормализации.

Оптимизировал производительность, параллельно наткнулся на довольно показательную проблему Python при работе со внешними библиотеками.

Сделал маркетинговый тест, который показал довольно слабые метрики; я предположил, что это из-за требования к пользователям вводить свой OpenAI/Gemini API key, поэтому решил довести проект до монетизации и повторить тест. Расчёт необходимых цен произведён, код для начисления и траты «новостных токенов» готов, осталось оформиться юридически и подключить реальные платежи.

Менеджмент

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

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

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

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

Искусственный интеллект

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

На эту тему у меня вышло много постов, вы можете найти их по тегу large-language-models. Тут упомяну только самые интересные.

Разобрался, что такое LLM, и сделал прогноз их развития на ближайшее будущее, пока сбывается (2 года уже):

Наработал опыт разработки с coding agents.

Выпустил две CLI-утилиты для coding agents:

  • donna — CLI для контроля потока исполнения вашего агента, чтобы агент шёл строго по workflow.
  • depmesh — CLI для определения зависимостей между файлами вашего проекта, чтобы агенты могли быстрее и экономнее формировать контекст.

На подходе ещё несколько — следите за моими постами.

И даже поучаствовал в подкасте:

Что на самом деле меняют ИИ-агенты в разработке.

Курсы World Builders

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

По задумке авторов (Ярополк Раш и Алекс Поляков) курсы должны были перерасти во что-то вроде MBA для креативных директоров, но в итоге получился только один набор. Жаль, материал был интересный.

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

Предполагаю, что всё это мне со временем пригодится, к сожалению, не прямо сейчас.

Куда более важно, что по итогам курсов у меня зачесались руки на создание более глубокого игрового прототипа, и я пошёл разбираться с Rust и Godot.

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

Я поменял своё мнение о Rust с негативного на позитивное. Теперь я считаю, что Rust — это лучший язык для разработки с помощью coding agents. Если будет возможность, следующий коммерческий проект буду делать на Rust, а не на Python.

«Секретный» проект

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

  • Полностью детерминистическая игровая логика.
  • Все параметры игровых сущностей организованы в общий вычислительный граф.
  • Жёсткое разделение бэкенда (логика) и фронтенда (рендеринг, UI, звук, ввод, etc.) игры. Вплоть до возможности запуска нескольких фронтендов на разных машинах (при одном бэкенде).
  • Встроенные элементы логического программирования.
  • В перспективе хочу, чтобы бэкенд для внешних утилит выглядел как реляционная база данных.
  • GUI реализован как полноценный веб-интерфейс: HTML + CSS + JS/TS/WebAssembly.
  • Движок фокусируется на создании игр через вайбкодинг => никаких визуальных редакторов, только код и конфиги под системой контроля версий.

Вот такая жуть. Сейчас это выглядит крайне грязно и некрасиво, зато есть целая честно навайбкоженная игра.

Скриншот полностью навайбкоженной игры.

Скриншот полностью навайбкоженной игры.

Книги

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

Всего прочитал 20 книг:

Прочее

Стоит упомянуть ещё несколько активностей.

Кроме того, что я открыл лор Сказки под лицензией CC BY 4.0, я ещё поучаствовал в подкасте про игру, где рассказал о её истории и особенностях.

Игра, опередившая время

Блог претерпел огромные изменения:

  • Переехал с WordPress на собственный движок Brigid.
  • Новые посты теперь выходят сразу на двух языках: русском и английском.

Английский активно доучивается сразу по нескольким направлениям:

  • Пишу англоязычные посты в блоге.
  • Все книги читаю на английском.
  • Добиваю словарный запас с помощью Duocards.
  • Фармлю карму на Reddit.
  • Наконец-то нашёл репетитора, с которым занимаюсь два раза в неделю.

Бытовые вопросы в Германии, само собой, решены. Не только мной, конечно, но и Юлей.

Если вам интересны подробности, то их можно найти в годовых отчётах:

Выводы

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

Первое. Разработка продукта «для себя» и «для зарабатывания денег» — это разные вещи. Каждое направление предполагает фичи и архитектуру, которые не нужны в другом. Поэтому, если двигаться сразу в обе стороны, двигаться будешь медленнее. Как этого можно было избежать в случае с Feeds Fun, я слабо представляю, но в будущем попробую эти цели разделять именно на уровне продуктов.

Второе. В следующий раз надо явно разделить исследовательский трек и трек разработки продукта(ов). Трек разработки должен иметь фиксированные сроки и оптимизироваться через урезание объёма работы (всё неопределённое перемещается в исследовательский трек), а трек исследования должен оптимизироваться через приоритизацию — с самым важным разбираемся в первую очередь, что не успели — то не успели.