← Модуль 12/Синтез паттернов
EN
Модуль 12 · Капстоун и синтез

Синтез: сквозные паттерны курса

Курс никогда не был 54 темами. Это ~дюжина глубоких паттернов в разных костюмах. Под игровым ремеслом лежат нити, связывающие геймдев с твоим ML: и главная ценность — не факты про игры, а библиотека переносимых паттернов и навык узнавать их. Плюс хребет всего курса: знать, когда инструмент (особенно ML) — НЕ ответ.
~15 мин🧩 конфлюэнция курса
Суть за 30 секунд
Курс — это не 54 темы, а горстка паттернов, надевших разные костюмы. На поверхности — каталог игрового ремесла: технические (ограничения-рождают-инновацию, оффлайн-прекомпьют, LOD), дизайн (учи-игрой-не-текстом, значимые-трейд-оффы, петли-обратной-связи), бизнес (платформа-сбрасывает-инкумбентов, полировка-компаундится, говори-нет-фичам), мета (прототип-до-архитектуры, провал-учит-быстрее). Под ними — сквозные нити, связывающие геймдев с ML (тот самый 🔁-груз): ограниченная случайность → constrained decoding; поиск+обучение → inference-time search; храни-функцию-не-выход → implicit reps; латентность-как-дедлайн → real-time inference; Goodhart → RLHF; hit-driven power-law → research-ставки; эмерджентность-наблюдай-не-выводи → eval-driven; контур-управления → curriculum/бандиты; слабейшее-звено → надёжность пайплайна; ты-не-твой-пользователь → held-out eval; coarse-to-fine → ANN/иерархия. И хребет — знать, когда ML НЕ ответ (классика>ML для контроля, PCG>GAN, RL редко шипят). Мета-навык: спрашивать «какую проблему решает / какие трейд-оффы / где используется и почему не везде / с чем связано». Этот перенос — видеть один паттерн across доменов — и делает тебя глобально полезным.

Механизм: один паттерн, много костюмов

Два слоя

M01 M06 M08 M09 M10 M11 ML/системы ограниченная случайность латентность = дедлайн Goodhart / прокси vs цель когда ML НЕ ответ нити тянутся через модули и выходят в твой домен — темы были костюмами, нити — телом

Верхний слой — каталог игрового ремесла (технические / дизайн / бизнес / мета паттерны из §1 модуля 12): полезен как чек-лист «сталкивался ли я с этим паттерном?». Нижний, ценный для тебя слой — сквозные нити, которые в каждом уроке жили в блоке 🔁 и связывали игровую механику с ML/системами. Их и стоит унести.

Сквозные нити (тот самый 🔁-груз)

НитьВ играх (модуль)→ В твоём ML / системах
Ограниченная случайностьWFC / шум / Spelunky (M11), ограничения-рождают-инновацию (M01/M05)constrained / structured decoding; генератор + жёсткие инварианты
Поиск + обучениеminimax/MCTS + NNUE/policy (M11)inference-time search (ToT/verifier), model-based RL, RAG=поиск+LLM
Когда ML НЕ ответклассика>ML контроль, PCG>GAN, RL редко шипят (M11)детерминизм/дебаг/стоимость > «умное»; классика по умолчанию
Храни функцию, не выходfixed-point/тайлы (M01), процедурка из seed (M11)implicit representations; генерация как компрессия
Латентность = дедлайнигровой цикл (M01), аудио-буфер/джобы (M08), TTS (M11)real-time inference budget; стриминг; изоляция крит-пути
Goodhart / прокси vs цельаналитика/A-B (M06), монетизация-этика (M10), reward design (M09)RLHF / reward hacking; деградация метрики под оптимизацией
Hit-driven power-lawэкономика студий, дискаверабилити (M10)research-ставки, heavy-tailed value, kill-fast эксперименты
Эмерджентность: наблюдайMDA, системный дизайн (M09/M02)поведение обученной системы = свойство рантайма; eval-driven
Контур / explore-exploitDDA/flow (M09), UCB1/MCTS (M11)curriculum learning, бандиты, adaptive systems, IRT
Слабейшее звеноАмдал (M08), дырявое ведро (M06), воронка телеграфа (M09)надёжность многошагового пайплайна; узкое место end-to-end
Ты — не твой пользовательплейтест Valve / проклятие знания (M09)нельзя оценивать на трейне; human-eval на held-out
Coarse-to-fine / LODколлизии broad→narrow (M01), Nanite/mipmaps (M08)ANN/retrieval, иерархический поиск, adaptive compute

Хребет: знать, когда инструмент — не ответ

Одна нить проходит через весь курс и важнее прочих: зрелость понимать границу применимости. Классический ИИ бьёт ML для контроля NPC (детерминизм, дебаг, стоимость); процедурка бьёт GAN для структурного контента (валидность, контроль); RL сверхчеловечен в демо и почти не шипится в проде. Это не «ML плох» — это «у каждого инструмента есть область, где он лучший, и области, где он худший». Умение тянуться к простому, дешёвому, отлаживаемому решению по умолчанию и звать сложное (ML/поиск/сеть) только там, где иначе нельзя, — редкое и делает инженера глобально полезным. Это и была сверхзадача курса.

Мета-навык: хорошие вопросы

Как переносить паттерн в новую область? Четыре вопроса (из заключения модуля), применимые к любому незнакомому куску технологии: (1) какую проблему это решает? (2) какие трейд-оффы делает? (3) где используется — и почему не используется в другом месте? (4) с какими знакомыми паттернами связано? Четвёртый — двигатель переноса: он превращает новое в «а, это же тот паттерн в новом костюме».

🧩 Одна нить — много появлений

«Ограниченная случайность» от железа до LLM

M01: ограничения железа рождают фокус (Tetris в 10 КБ). M09: ки-сё-тэн-кэцу дозирует сложность. M11: WFC/шум/Spelunky генерят миры ограниченной случайностью. → LLM: constrained decoding — маскируй невалидные токены, вшивай валидность в процесс.

🧩 Увидь нить: одна идея — «случайность/свобода становится полезной, только когда её русло задано ограничениями» — прошла через 4 модуля и вышла в твою работу с LLM. Это не аналогия-натяжка, а один инвариант в разных доменах.

«Латентность = дедлайн» кадр → буфер → токен

M01: бюджет кадра 16.67 мс. M08: аудио-буфер (промах = щелчок), джобы под frame budget. M11: TTS-чанк до опустошения буфера. → Твой real-time инференс: тот же жёсткий бюджет, изоляция крит-пути, стриминг с backpressure.

🧩 Увидь нить: «жёсткий real-time дедлайн, промах которого виден/слышен» — это одна инженерная задача, будь то кадр, аудио-буфер или стриминговый ответ модели. Освоив её в играх, ты уже умеешь проектировать латентно-критичные ML-системы.

«Goodhart» метрика → монетизация → reward

M06: A/B и peeking, оптимизация не той метрики. M10: хищная монетизация = оптимизация прокси (трата) против блага игрока. M09: reward design в MDA. → RLHF: reward hacking, деградация под переоптимизацией прокси-награды.

🧩 Увидь нить: «оптимизация прокси расходится с истинной целью» — один закон в аналитике, этике монетизации, дизайне и выравнивании ИИ. Если видишь, где монетизация переходит в эксплуатацию, ты видишь, где оптимизация метрики переходит в манипуляцию.

Хардкор · почему перенос работает и компаундитсяможно пропустить

Паттерн — это сжатый инвариант

Паттерн переносится, потому что это абстракция — сжатая суть, выжившая после отбрасывания домен-специфичных деталей. «Слабейшее звено доминирует» верно и про Амдала (параллелизм), и про дырявое ведро (удержание), и про воронку телеграфа (level design), и про надёжность пайплайна — потому что все они суть последовательная композиция с мультипликативной/аддитивной потерей. Освоив инвариант в одном домене, ты получаешь его во всех: перенос компаундится — каждый новый домен и дешевле осваивается (узнаёшь знакомые нити), и обогащает сами паттерны новыми костюмами. Это механика экспертизы: эксперт видит не поверхность, а глубинную структуру (chunking), и потому «схватывает» новую область быстрее новичка.

Аналогия — топливо мышления, но проверяй перенос

Перенос по аналогии мощен, но не автоматичен: инвариант надо проверить, а не постулировать. «MDA как reward design» держится (обе — инверсная задача с эмерджентной серединой); «маппинг Бартла на 8 видов веселья» — не держится (разные оси, лишь грубая интуиция). Дисциплина: перенося паттерн, спрашивай «какой именно инвариант общий и где он ломается?». Хороший перенос — точный, а не «всё похоже на всё».

Аналогия
Курс — как обнаружить, что десятки песен построены на одних и тех же аккордовых прогрессиях. Сначала каждая песня звучит уникально; потом ты слышишь I–V–vi–IV под половиной попа, 12-тактовый блюз под другой частью — и вдруг можешь сыграть новую, никогда не слышанную песню, потому что узнаёшь прогрессию под ней. 54 темы были песнями; сквозные паттерны — аккордовые прогрессии. Раз услышав их, новый домен (новая игра, новая ML-система) не чужой: ты узнаёшь прогрессию под ним и играешь с листа.
Почему это важно
Это и есть смысл курса для тебя: не стать игровым программистом, а построить кросс-дисциплинарное суждение — библиотеку переносимых паттернов и навык их узнавать, чтобы геймдев, ML и системы освещали друг друга, и чтобы ты видел, когда инструмент подходит, а когда нет. Именно это делает инженера в Artificial Agency (и где угодно) глобально полезным: не глубина в одной трубе, а способность носить решения между доменами и точно чувствовать границы их применимости.
🔁 За пределами игр — сам перенос как навык
Этот урок и есть перенос, поэтому 🔁 здесь — про перенос как таковой.

ML / AI (твой домен): распознавание паттернов across доменов — ядро экспертизы (chunking, аналогия как топливо мышления): эксперт видит глубинную структуру, а не поверхность, и потому осваивает новое быстрее. Твоя конкретная выгода: дюжина нитей выше — это готовые мосты в ML (constrained decoding, inference-time search, RLHF/Goodhart, latency budget, eval-driven, curriculum, coarse-to-fine), а хребет «когда ML не ответ» — редкое суждение о границе применимости, которого не хватает многим ML-инженерам (тяга совать нейросеть всюду). Четыре мета-вопроса — портативный фреймворк для любой новой технологии. Осторожность: перенос надо проверять (общий инвариант, а не «всё похоже»), иначе получишь ложные аналогии.

Обучение/карьера: «второй мозг» (журнал паттернов) компаундится; кросс-доменная широта + узкая глубина (T-shape) ценнее чистой специализации.

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

🔧 Собери свой журнал паттернов
🧩 10 нитей в твой «второй мозг» ~30 мин
Выпиши 10 паттернов из таблицы, которые реально зацепили. Для каждого: имя, инвариант (в чём суть, независимо от домена), 1 пример из игр, 1 из твоего ML, и где он ломается (граница). Это ядро твоего pattern journal — расширяй его после каждого проекта.
🧭 Примени 4 вопроса ~15 мин
Возьми технологию, с которой столкнулся недавно по работе (новый фреймворк, метод, инструмент) и прогони 4 вопроса: какую проблему / трейд-оффы / где используется и почему не везде / с каким паттерном из журнала связано. Заметь, как четвёртый вопрос ускоряет понимание.
Чеклист: завёл журнал с 10 нитями (инвариант + 2 примера + граница); применил 4 вопроса к реальной новой технологии; сформулировал свой хребет «когда ML не ответ» одной фразой.
Связи
итог
Классика vs ML — ML-сторона хребта «когда что брать»; решающее дерево.
нити
Железо, MDA, Джобы, Монетизация — характерные появления нитей.
дальше
Постмортем — как добавлять паттерны в журнал после каждого проекта.
основа
Капстоун — где ты применишь эти паттерны на деле (Новгород).
Вопросы пытливого ума
Если выбрать один вынос из курса — какой?
Навык видеть один паттерн across доменов и знать границу его применимости. Не какой-то конкретный факт про игры, а мета-способность: столкнувшись с новым, распознать под поверхностью знакомый инвариант («это же ограниченная случайность / слабейшее звено / Goodhart / поиск+обучение») и точно чувствовать, где он работает, а где ломается. Практически это две вещи вместе: (1) библиотека переносимых паттернов (дюжина нитей из таблицы — готовые мосты между геймдевом и твоим ML), (2) хребет «когда инструмент, особенно ML, — не ответ» (зрелость тянуться к простому/дешёвому/отлаживаемому по умолчанию). Первое даёт скорость (новую область осваиваешь через знакомое), второе — мудрость (не сунешь нейросеть туда, где скрипт лучше). Вместе это и есть кросс-дисциплинарное суждение, ради которого курс и затевался: чтобы ты был полезен не как «игровой программист» или «ML-инженер» по отдельности, а как человек, носящий решения между полями и чувствующий их границы.
«Всё связано» звучит красиво, но как это практически помогает?
Через ускорение и через выбор инструмента — конкретно. Ускорение: когда упираешься в новую задачу, вместо «изучаю с нуля» ты спрашиваешь «на какой знакомый паттерн это похоже?» — и стартуешь не с чистого листа, а с готовой структуры. Пример: столкнулся со стриминговым TTS-инференсом — если знаешь нить «латентность=дедлайн» из игрового цикла/аудио-буфера, ты сразу знаешь про бюджет, backpressure, изоляцию крит-пути, а не переоткрываешь их. Выбор инструмента: нить «когда ML не ответ» прямо экономит месяцы — прежде чем обучать модель, спрашиваешь «а скрипт/поиск/алгоритм тут не лучше?» (детерминизм, дебаг, стоимость), и часто ответ «да», как в игровом ИИ. Чтобы «связь» была полезной, а не расплывчатой, она должна быть точной: не «всё похоже на всё», а «вот этот инвариант общий, и вот где он ломается» (см. хардкор про проверку переноса). Расплывчатое «всё связано» бесполезно; конкретная нить с проверенным инвариантом и известной границей — рабочий инструмент.
Как именно перенести паттерн, не впав в ложную аналогию?
Изолируй инвариант и явно проверь его границы. Три шага. (1) Сформулируй инвариант доменно-нейтрально: не «Амдал про потоки», а «в последовательной композиции слабейшее/несжимаемое звено доминирует итог». (2) Проверь перенос на общей причине, а не на поверхностном сходстве: «Амдал ≈ дырявое ведро удержания» держится, потому что оба — мультипликативная/последовательная потеря с доминирующим звеном; а вот «нейроны мозга ≈ нейроны сети» — ложная аналогия (сходство имени, не механизма). (3) Найди, где инвариант ломается: у любого паттерна есть область неприменимости — «ограниченная случайность > ML» верно для структурного контента с жёсткими инвариантами, но не для богатых распределений без правил (текстуры, натуральные изображения — там ML). Хороший перенос всегда идёт с оговоркой «работает, пока …». Тест на ложную аналогию: если не можешь назвать общую причину и точку слома, это, вероятно, сходство поверхности, а не инвариант. Дисциплина «какой инвариант и где граница» отличает мощный кросс-доменный перенос от красивой, но пустой метафоры.
Что почитать