Боб Найстром об архитектуре программ

Несколько идей из книги "Паттерны в программированни игр"

12 Jan 2015


“Хорошая архитектура дорога? Это вы плохую не пробовали.”

– народная мудрость

Во введении в книгу “Паттерны в программированни игр” (она же “Шаблоны программирования игр”, “Шаблоны игрового программирования”, “Game Programming Patterns”) Боб Найстром пишет интересное и полезное об архитектуре программ и об оптимизации.

Вот некоторые запомнившиеся моменты.

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

Архитектура – это не столько про то, как писать код, сколько про то, как его организовать.

Цена хорошей архитектуры: усилия по организации кода и поддержанию порядка при внесении каждого изменения.

Самая долгая стадия программирования – изучение программы перед внесением изменений. Это ужасно долгий и дорогой процесс, так что стратегии, упрощающие и ускоряющие изучение кода, очень выгодны.

Одна из способов упростить изучение кода – уменьшение связности (разъятие, расцепление, decoupling), т.е. деление кода на части таким образом, что можно изучать и менять каждую по отдельности.

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

Проектируя программу, балансируем несколько факторов:

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

Про “когда оптимизировать рантайм-скорость”: обычно проще забавную игру сделать быстрой, чем быструю игру – забавной.

Про быстрые и не очень аккуратные прототипы: полезны, чтобы быстро проверить много идей и выбрать дальнейшее направление. Главное, чтобы грязный временный код действительно потом выкинули или переписали, а не потащили в продакшен, потому что “ну ведь уже работает”. Чтобы такого соблазна даже возникнуть не могло, можно прототип писать на языке, отличном от языка продакшен-системы.

В общем, все сложно. Если и есть универсальный рецепт, облегчающий жизнь – это простота. Делать делать данные и код максимально ясными и прозрачными. Важно: чтобы написать более простой код, обычно требуется больше времени.

Вот так. Полная веб-версия книги здесь: http://gameprogrammingpatterns.com/contents.html, там же можно купить электронный или бумажный вариант издания.