Game Programming Patterns by Robert Nystrom is an excellent way to acquaint oneself with the style and thought process of well crafted software code. I believe this book to be a very strong description of semantic style and organization relevant to computer code. The material may serve as a good guide book for improving the modular division of software code according to a object-oriented and component-based perspective.
The recommendations are clear and can be put into use immediately. The book is all about good thinking, good design in laying out and reshaping software. I found the book a short read. It did take me a while to put it in the context of other books of a similar kind, hence this review.
What the Book Is
I consider the book to be a broad overview about how to organize software code with greater awareness before or after it is written. Valid reasons exist to go another route, but I find the advice generally applicable. The book has 6 parts. I go into detail about parts 1 through 3 in two other blog posts, Considering Architecture in Game Programming Patterns as well as Patterns of Real World Code in Game Programming Patterns. Parts 1 – 5 gives you some of the best ideas about organizing software code. Part 6 balances the overall discussion with details intended to speed up well-organized software code.
What the Book Is Not
The material is not mechanical or deeply technical in nature. Quite the opposite. While technical terminology is used, it is held to a minimum. Moreover, it is the general description and the reasons supporting certain ideas of these quality ideas that provides value. It is definitely not a book about the computer machine model. Appropriately, across most of the book is a lack of detail on software performance except in part 6 and sprinkled in small doses throughout as needed.
Who Should Read the Book
Although the book has video game in the title, that is just the author’s chosen profession. Writing good code as a criterion can go beyond functional purpose and target audience in most cases. Rather, good code crosses industries, specializations and can be found in enterprise IT, accounting systems, and healthcare informatics to name just a few. I suspect many have used the techniques in this book often without an industry standard name attached. I found the material provided a useful clarification of high-level techniques. The reasons given for certain design decisions even serves to finally illuminate through insight why certain design approaches are so compelling. Certainly, some advice or reasons will conflict with long-held assumptions on the right design of software that could lead to a better, future formulation of software at a basic level. I think those who are curious about software code or write it and can appreciate a grounded, down-to-earth presentation about good code will be well-informed by this book.
Design Patterns Discussed
As I progressed through the first 3 sections, I got the impression that the author was excluding many of the original design patterns besides the ones he presented in part 2. Later, I saw how he weaves into the discussion some of the original design patterns during parts 3 – 6. Some of those patterns are put into contrast to the ones he advocates to better inform the reader of how and when a pattern is relevant. The approach is very useful in deepening the insights about the patterns in the book and why an alternative may sometimes be a better fit.
Excellent Introduction to Software Design
The book is very casual in tone compared to similar titles. The author’s computer science knowledge and heavy technical literacy bleeds through as he explains many things in a very general manner. At first, I wondered if the author’s approach hinted at a book that would just scratch the surface. After going through the entire work, I now know that he imparts a lot of information in a way that is easy to remember. The best aspect of this book is its practical utility concerning the design of software.
Video Game Coding is Integrative
A special aspect of video game software development is that it is broadly integrative. The book, considering the topics covered and the way they are expressed, shows a background, in terms of the book’s author that is broad in the techniques of software code writing. Networks, graphics, video, performance, modularity, functional trade-offs, data processing are but a few of the areas those proficient in the writing of games may have to contend. Those areas of concern have to work in unison sometimes dozens of times within the tick of a second of time. Under those time constraints, those elements have to work very well that the user’s experience of the software translates into not thinking about the software at all, but to have a fully engaged and productive experience with the software. The book gives a real glimpse into the top-level concerns that can help one discover the right balance among software elements.
A person curious about the topic of software writing or perhaps someone acquainted with writing it, will gain a gift of greater insight into high-level code design. The advice is practical but not excessively abstract (never will I suggest the converse of these criteria lack value). The advice is not appropriate for every situation. The author alludes to this in chapter 1. I would go further to say, there are certain kinds of compact designs, hardware, and computer environment operating conditions that requires a different kind of elegance or otherwise brutally direct expression of software mapped to the computer machine model. Those are topics well covered in numerous other books. When design of a more general, adaptable, and systematically broad nature is sought Robert Nystrom’s work can give anyone the tools necessary to design a software program others may understand well into the future.
Other Articles Related to Software Design
- Considering Architecture in Game Programming Patterns
- Patterns of Real World Code in Game Programming Patterns
- Review of Scott Meyers’ Effective Modern C++
- Exploring SFML Graphics in C++
- Raw System Security
- Raw Numerical Security
- Raw Code Security
- Raw Data Security