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).
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.
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 does make a difference.
For a math book, this one is surprisingly short and succinct - but that’s not a bad thing! Lengyel does a great job clearly explaining complicated concepts. 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.
This book and the one below cover similar topics, but from slightly different perspectives - I think both are worth checking out.
James M. Van Verth, Lars M. Bishop
This book is a bit dense and a little 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.
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.
This hefty tome straddles the line between a textbook and a reference manual. I can’t exactly 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’d say I agree with him.
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.
This is a fun read to understand some of the technical context and challenges faced by the team at id Software when they set out to build DOOM back in 1992/1993. Their goal was to build something not quite like anything people had yet seen, and they pushed the boundaries of what were possible with the hardware of the time. 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.