I was invited to review Beginning C++ Game Programming, Second Edition which was published by Packt at the end of 2019. It was written by John Horton. I always appreciate the opportunity to review the technical work of my colleagues and peers. It is also inspiring to see how much can be achieved with a bit of effort and dedication.
I am not an expert game programmer, however I have good experience in C++. I am a good candidate to review this book precisely because I am a beginner at game programming. Also I enjoyed the idea of gaining some new fundamental skills which may eventually come in handy.
First of all, let me say this is a very good introduction and worthy of the attention of intermediate C++ programmers who might be interested in digging deeper in gaming. This might also be a good option for new hires or those joining the gaming industry without much previous gaming experience. The book is comprehensive and it takes a very practical approach to the subject. If you read this book and follow the instructions assiduously you should be able to build your own games.
Of course there are some things one should consider before purchasing the book. The book is comprehensive and covers a large number of useful topics in game programming, however the book primarily focuses on one framework, SFML. In fact, "Beginning Game Programming in SFML" might have been a better title. Also, while it does mention MacOS and Linux, Beginning C++ Game Programming seems typically tailored to the Windows environment. That may be a very reasonable choice for game programmers as that is the preeminent gaming platform. On the other hand, as an old school Linux and Mac user, I found myself feeling a bit like there would be a barrier to entry for me that others may not have.
I suspect that in a book of this length there is room to mention or show a few examples in another gaming framework. At the beginning level, it is reasonable to have a few different experiences to draw upon before heading in a particular direction with a particular framework. As I worked through some of the SFML examples I felt a bit of buyers remorse in the sense that I didn’t know what I might be missing in other environments.
The practicality of building real world game examples does have a downside. In order to introduce all of the code to make a game work there is a certain amount of redundancy and boilerplate that must be incorporated as necessitated by C++ itself. At times I felt some of the boilerplate was redundant but I understand what is required to introduce the code for a complete game. Obviously that was the authors stated goal and the boilerplate must be tolerated but it did seem to lengthen the book. Part of the advantage of SFML, that it takes you all the way there in terms of writing games, takes out some of the programming fun of learning how to move bits around.
Another criticism I have for the technical content relates the the C++ syntax and style of the book. As all C++ programmers are acutely aware the style and syntax of C++ has changed greatly over the years. Modern C++’17 and beyond implementations are almost unrecognizable from the early versions of C++. Most novitiates who intend to employ C++ in the workplace should be aware that they will be required to demonstrate this modern style and syntax in interviews and on the job. My gripe with this book is the C++ style is a bit dated. Obviously, there are some timeless approaches to programming, but there are sections of this book that could do with a bit of modernization. A modern coding style, coupled with some solid gaming fundamentals, could be a ticket to a job for enterprising readers.
Readers should keep in mind that while the book does detail the implementation of several great example games, there is a practical limit to the scope of these games. Modern games have extensive breadth and teams of dozens, if not hundreds, behind them, don’t lose sight of what an individual can accomplish in their spare time working on their own. Nevertheless, the examples are useful and fun and feel like a real accomplishment.
Overall, I found Beginning C++ Game Programming highly readable and approachable. One might consider a book like this in the ‘skip to the good parts’ category, and although that is a valid approach to technical reading, this book is very readable in its own right. Beginning C++ Game Programming can be digested by a qualified reader who puts in the time. Bear in mind that this book is not a ‘beginning c++’ manual. If you have no experience in C++ and you really want to get started in gaming, I would not start here.
Beginning C++ Game Programming is a good and worthy read and I enjoyed both reading and reviewing it. Thanks to John Horton and Packt for the opportunity.