This page highlights some of the books I’ve read over the years that I’ve found particularly illuminating, helpful, or insightful.
I think that all these books have something to offer, whether you’re looking to grow as a programmer, refresh your memory, or be entertained (if reading textbooks is your idea of entertainment, that is).
Game Engine Architecture
Jason Gregory
Back in 2009, I was quite fortunate to have Jason Gregory as a professor. He was a wonderful teacher, and his textbook reflects that. This was originally assigned reading, but it became my go-to game architecture resource as I learned how to make video games and write game engines.
I think that you can extract a lot of value from this book whether you’re just starting out or have years under your belt. This book provides a ton of insight into the practices and considerations that go into writing game engine code at an industry-leading studio like Naughty Dog. It also explains plenty of complicated topics from first principles (such as C++ compilation, 3D math, and rendering) in an easy to understand style.
Code Complete
Steve McConnell
Especially when you’re a beginner, it can be difficult to understand what is or isn’t a good practice when writing code. What should be public or private? When should you use inheritance, composition, abstract classes, or interfaces? How should you name classes, functions, and variables? Code Complete is a comprehensive resource that systematically and thoroughly discusses the various decisions you make while designing, writing, and testing code.
If you are looking to grow as a programmer in general, I’d highly recommend this book. Programmers at Hidden Variable read this as part of their professional development, and I think it makes a difference.
Foundations of Game Engine Development
Eric Lengyel
Eric Lengyel has thus far released two volumes in his “Foundations of Game Engine Development” series, and both are quite good. I’m very much looking forward to the remaining volumes.
The first volume is a math book, and it is surprisingly short and succinct - but that’s not a bad thing! Lengyel does a great job clearly explaining complicated ideas. This book focuses primarily on 3D math, transformations, and geometric primitives - basically, the fundamental things you need to know to build a 3D game engine! For a beginner, this information is critical and presented in an easy-to-digest way. If you already know these concepts, it’s an enjoyable refresher, and you may gain a deeper understanding or appreciation of certain concepts that you had previously simply memorized.
The second volume is about rendering, and it dives deep on the theory before explaining a variety of methods to achieve rendering techniques you commonly see in video games today. As the name of the series implies, it’s very much meant to give you a foundational understanding of how all this stuff works. I think it’s a unique resource - it gave me a perspective on how to think about rendering that I hadn’t really considered before.
Essential Math for Games and Interactive Applications
James M. Van Verth, Lars M. Bishop
This book is a bit dense and hard to read, especially if mathematical notation is not your forte. That being said, it does contain a wealth of useful math knowledge that is useful in modern day 3D games. It’s a great crash course in the breadth of critical math topics you’ll encounter in games…just expect to re-read, draw diagrams, and think critically as you go!
During my own professional development, I found the first chapter on floating-point number representation to be quite enlightening. The following chapters on vectors, points, matrices, transformations, and orientations will help you learn how to build a 3D world. Further chapters on camera/projection, shading, lighting, rasterization, and intersection testing provide comprehensive resources on how the math required to power these systems works.
Game Programming Patterns
Robert Nystrom
If you’ve ever picked up the famous “Design Patterns” book, you may have been intrigued but found it to be quite dense. Furthermore, as a game developer, you might have liked something similar, but geared more towards your domain. Well, this book does just that, plus it’s quite easy to read and understand!
This book really helped me gain a better understanding of common patterns used in games and game engines. Nothing says you can’t come up with novel solutions to code architecture problems, but it’s valuable to know when there’s already a common or known way to solve something you are trying to do. This book covers a dozen-and-a-half patterns, explaining the problem the pattern solves, how to implement it, and any variations or pitfalls to consider.
The C++ Programming Language
Bjarne Stroustrup
This hefty tome straddles the line between textbook and reference. I can’t say it’s an exciting read, but if you’re looking to learn C++ and steep yourself in its syntax and standard library, this is a great resource.
I’m one of the weirdos who more or less read this thing cover-to-cover, and I found it to be quite informative and also provide nuggets of general programming advice and wisdom. Bjarne has strong opinions about certain programming topics, and those opinions informed the design of the language and the advice at the end of each chapter. For the most part, I found that advice quite useful.
Debugging the Development Process
Steve Maguire
This book focuses primarily on leadership advice for software development, but a lot of the topics discussed could be applied to project leadership outside of software development or to guiding your own personal projects.
Honestly, I wasn’t expecting a lot from this book when it was recommended to me, but it ended up surprising me with a ton of salient ideas about guiding projects and working with others.
Game Engine Black Book: DOOM
Fabien Sanglard
This is a fun read if you want to understand some of the technical context and challenges faced by the team at id Software when they set out to build DOOM. This book goes fairly in-depth into the technical challenges of the PC hardware at the time, the code and algorithms used by DOOM, and the challenges in porting the game to numerous game consoles.
I don’t know if you’ll learn a lot about programming from this book, but it’s undoubtedly interesting! Well, on second thought, the discussion of the code architecture and the methods used to achieve certain effects can still be practically applied in modern games, in my opinion.