"Game Programming Patterns" by Robert Nystrom

From the lovingly written humorous side notes on most pages, to the final sections of each chapter, you can clearly feel at the end of the book that this was the labour of love from someone deeply knowledgeable and passionate about sharing their knowledge in the best way possible.

"Game Programming Patterns" by Robert Nystrom

This post is part of my Book reviews series, where I share thoughts and impressions on the books I read.

"Game Programming Patterns", available in paper version here and also digitally (and free) here is written by Robert Nystrom and self published in 2014.

💡Topic
Independent ideas, architectural constructs and design patterns that you can apply when building your own game engine.

The book also covers applications of the famous Design Patterns popularized by the "Gang of Four" (Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides) but specific to game development.

📖Content
336 pages divided into 6 section with 20 Chapters, with hand-drawn schemas and code examples in very simplified C++.

👩‍💻🧑‍💻 Who is this book for?
Developers who have already tried building games in the past, either from scratch or using a game engine, and who are interested to know more about what goes on under the hood of a game engine.

Authors who want to learn how to write a great, educative and engaging technical book.

👍Likes
The thinking and advice present in the book is the distillation of thoughts coming from a person who is very much passionate about software design and architecture. The author is famous already for his other book ("Crafting Interpreters", book review coming soon!), and you can see that he is a consummate thinker and researcher in terms of software development theory, design, architecture and evolution of different approaches over time.

Even though the book is deceivingly about game development, there is much to be learned about design patterns in general, which is one of the parts I loved most about it.

The author does a great job at explaining the thinking behind each of the proposed design patterns, while also having two very good sections at the end of each chapter: "Design Decisions" - where key considerations and tradeoffs are discussed - and "See Also" - which showcases related or compatible concepts that the reader should look into. I felt that these final sections of each chapter really added the cherry on top so to say, ending each of them in a very thoughtful and connected way.

On the nitpicking side, I liked a lot also the paper thickness, as the writing on the opposite side of the page is almost not visible. In an age where the decrease in paper thickness of books is becoming really noticeable, to my utter annoyance, reading this book was a breath of fresh air for my eyes.

👎Dislikes
There are very frankly no dislikes from my side, neither on the content nor on the editing.

One can clearly see that extensive feedback was received from a community of readers while the book was being written, and that helped tremendously in ironing out all kinks.

🚧 Improvements I would suggest
It would be amazing if the author would consider an updated edition with more recent content and approaches.

Especially as in the past decade since the book was written most game engines evolved, with most of them actually adopting most of the advanced suggestions that the author made in the book. It would be very cool to see his take on this evolution, as well as his updated thoughts.

I would also love to see the book expanded with more content on the Optimization Patterns section, especially in terms of the different flavours of ECS now available for game devs.

🤔Final Thoughts
The fact that this book is self published is very, very visible, in all the right ways! From the lovingly written humorous side notes on most pages, to the final sections of each chapter, you can clearly feel at the end of the book that this was the labour of love from someone deeply knowledgeable and passionate about sharing their knowledge in the best way possible.

It saddens me though that, even though this book is now more than 10 years old and freely accessible, very few of its amazing features have managed to permeate the minds of either technical authors or technical book publishers. Most technical books I read still continue to be the churning out of boring content, from mediocre authors who are unable to engage the reader in any meaningful ways, edited by uninspired followers of cookie-cutter recipes.

I would highly recommend this book to any software developer, especially as it is free to read online. And I would recommend it even more so to any aspiring technical author, as this is an exemplary experience for a reader, and definitely one of the highest benchmarks I've seen so far.