Курс молодого инженера: книга Роберта Нистрем

Приветствую, разработчики! Две недели назад я откопал книгу «Game Programming Patterns».

Внимание! Если вы разрабатываете cash-grab игры однодневки — этот топик не для вас.

Вообще мне не очень нравится читать техническую литературу. Объяснение сухое, примеры требуют долгой рефлексии. Авторам свойственно опускать какие-то темы. Так что, здесь, YouTube-контент, с моей точки зрения, выигрывает.

Но! Но, но. Я же не просто так пишу этот топик?) :grinning_face_with_smiling_eyes:

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

Коротко введу в содержание. Автор — программист с 20-летним стажем в gamedev индустрии. За жизнь он полностью прочувствовал до глубины души (и заднего клапана) боль непродуманной архитектуры. Как она медленно убивает разработку.

Поэтому книга — накопленные знания Роберта. Плюс автор опирается на известную в программистском сообществе “Банду четырёх”. В далёком прошлом, когда парадигма ООП (Объектно-ориентированное программирование) захватила умы айтишников, эти ребята написали культовый сборник паттернов проектирования.

В общем, у автора получилась солянка из базовых вещей и специфических для gamedev-сферы.

:white_check_mark: ПЛЮСЫ:

  1. Автор не скупился на юмор. В главах Роберт постоянно упоминает, что книга написана в юмористическом жанре. Поверьте, смеяться есть над чем.

    Однако есть и трагизм…Дальше спойлерить не буду :wink:

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

  3. К каждому примеру приложены картинки-рисунки. Это не только скучные UML-схемы. Правда, и этого добра хватает. Кхм…Роберт нарисовал и визуализации некоторых процессов. Работа с памятью, зависимости, эм…Деревья в лесу…Водичка…

  4. Материал подаётся на C++. На этом этапе Roblox-программистам грустить не стоит! Автор книги пишет код на базовом уровне без углубления в дебри языка. Единственно, с чем читателю придётся столкнуться, - понимание шаблонов. Тут уж, увы.

    А вот, что покажется приятным: упоминание функционального подхода. Тег JavaScript в моём топике не случаен. В некоторых главах Роберт транслирует пример с C++ на JavaScript. Половина главы про паттерн “Прототип” вообще отводится этому чудо языку. Автор книги прекрасно понимает: парадигма ООП — не единственный вариант**. *Функциональные методы — имеют место.


    По личному опыту скажу: переводить код с JavaScript в luau гораздо проще ;)*

  5. Роберт думает над оптимизацией и средой применения. Каждая глава даёт не просто рабочий код. В процессе решения переписываются в сторону наибольшей оптимизации. Дополнительно автор развенчивает мифы по некоторым шаблонам.

    И самое приятное: даёт ситуации, когда лучше всего применять паттерн.

:cross_mark: МИНУСЫ:

  1. Книга написана не вчера. Публикация состоялась аж в 2014 году. За 12 лет некоторые подходы в gamedev поменялись. Учитывайте этот фактор при чтении. Например, я нашёл мало информации про ECS (Entity-Component system).
  2. Уходы автора в сторону сбивают с толку. Например, вы читаете объяснение паттерна. Но вдруг. Вдруг. В следующем разделе Роберт начинает обсуждать другую тему. Это сбивает. Особенно, если вы мало читаете технической литературы.
  3. Не всё найдёт применение на конкретном движке. Например, часть описанных паттернов никогда не реализуется в полной мере при разработке Roblox-проектов. Мы ограничены :frowning:

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

Я крайне советую пользоваться паттернами проектирования при разработке крупных проектов. Делайте это с умом и в будущем они сохранят вам время, а главное — деньги.

2 лайка

Очень полезный пост и книга, спасибо!

Хотя я и изучаю в последнее время ECS вместо OOP :upside_down_face:

Подход ECS в основном решает именно проблему хранения и получения данных. Реализация систем может быть в разных парадигмах. Поэтому решения через ООП или функции вполне себе годятся.