Table of contents
- General Programming, Design
- Computer Architecture
- General/Engine design
- Game Design
- Post mortems / books about development of games
General Programming, Design
If I had to name a book that every programmer needs to read, I’d name this one. It has lots of useful advice on almost every aspect of programming: architecture, style, naming, performance, debugging etc. It teaches you how to write clean and maintainable code, fix performance issues, debug efficiently and many more. I believe that I’ve greatly improved as a programmer when I read it and I think everyone will learn something important from it as well.
From Mathematics to Generic Programming
This is a book about how generic programming and mathematics resemble each other in sometimes unexpected ways. The book has a lot of interesting information on abstract algebra, templates and concepts (in generic programming sense). It also shows very interesting ways of solving different algorithmic problems with templates while explaining it in mathematical terms along the way.
Design Patterns: Elements of Reusable Object-Oriented Software (GOF)
This book is a bit outdated (it was written in 1994!) and sometimes you can see it by the way the code is written in it, but it still shows you a lot of useful design patterns which will definitely become your tools to solve different kinds of problems. This book showed me some interesting problems with code architecture which I’ve never encountered before, but when I will, I’ll be prepared, thanks to great explanations and general approach to problem solving this book teaches.
Other notable books
- The Practice of Programming
- Clean Code: A Handbook of Agile Software Craftsmanship
- Refactoring: Improving the Design of Existing Code
- Working Effectively with Legacy Code
Code: The Hidden Language of Computer Hardware
This is a book you should read if you want to learn how computers were invented, how they evolved over the years and how they work now. The book tells a history of computers from the beginnings (Analytical Engine, Boolean Algebra) and simplest principles of relays, but along the way it shows you more complex mechanisms explaining almost every bit of how computers work. It is very technical, but it tells you a lot of interesting facts and stories, which is just amazing and makes it one of the best books about computers ever. You can read it if you didn’t have any experience with low level systems of computers, which makes it even greater.
Computer Systems: A Programmer’s Perspective
I found this book while I was looking for resources on learning assembly. And it was just what I needed. The book is presented from a programmer’s perspective: not just teaching assembly, but also showing how C code translates into assembly. It has a lot of exercises which are interesting to solve and help the reader understand the material better. If you ever wanted to learn assembly, low level programming and principles of translating source code into assembly, this is a perfect book for it.
C++ Primer (5th Edition)
This is the best starter C++ book I’ve found to date. What is even better is that it has been updated to C++11 and this is very important, because I believe that newcomers to C++ should learn the modern ways of programming in C++ to make overall learning experience easier and pleasant. I didn’t learn C++ by this book, but I wish I did back then!
Effective C++, More Effective C++, Effective Modern C++
Some people may think that this books are for professionals with tons of experience and C++ skill, but that’s not true! Yes, even an experienced programmer may get a lot of useful information from it, but these books are very important for novice C++ programmers too. They contain a lot of useful advice and tips and will certainly save you from headaches, if you encounter some of the problems described in the book.
Some of the code and advice from the first two books is a bit outdated (for example, you shouldn’t ever use
auto_ptr now), but most of it is still true today.
I especially like Effective Modern C++ because it taught me a lot of modern C++ (when I first read it, I wasn’t really experienced in C++11). It also contains a lot of humor which isn’t something you usually encounter in a book about C++. There are some very complex issues discussed in the book (especially about lambda captures and move/rvalues), so feel free to skip them if you brain starts to hurt, these are edge cases and one of the most complex things in C++.
A Tour of C++ / The C++ Programming Language
A Tour of C++ is the first chapter of The C++ Programming Language by B. Stroustrup and it displays what makes modern C++ great. Other chapters become much more detailed and show you different things about C++ and standard library. You probably won’t want to start learning C++ from this book, but it is great as a reference if you want to learn something in particular.
C++ Coding Standards: 101 Rules, Guidelines, and Best Practices
This book provides a lot of info about making your code better, readable and efficient. Some of the things (thankfully!) don’t apply to modern C++ anymore, but there’s still a lot of useful insights that you can get from reading this book.
Other notable books
- The C++ Standard Library: A Tutorial and Reference
- API Design for C++
- Discovering Modern C++: An Intensive Course for Scientists, Engineers, and programmers
- C++ super FAQ
- Sutter’s Mill - Herb Sutter’s blog full of amazing articles about C++
- Visual C++ Team Blog - C++ related stuff in Visual Studio, standard library improvements and more!
- Scott Meyer’s blog
- /r/cpp - great subreddit full of awesome discussion and posts about C++
Programming in Lua
This book is one of the best programming books I’ve read. It starts simple and quickly starts explaining more difficult areas of Lua while highlighting what makes it such a great language. It covers a lot of areas, so it’s not only a great book to learn Lua, but also a great reference.
- Lua performance tips
- lua-users wiki
- Lua gotchas
- kiki.to - great blog with lots of useful articles. Lots of useful libraries on author’s github.
Game Engine Architecture
This book is one of my favorite books ever. I can’t praise it enough: it’s the book that helped me become much greater programmer and structure my engine in great way. It’s huge and it covers a very wide range of topics. I learn something new each time I re-read it: and I’ve already did it a couple of times. If I had to recommend one book about game dev to everyone it’ll be this one. Go read it!
Game Programming Patterns
While Game Engine Architecture covers more topics, this one gets more specific in various details and has some really amazing code examples. By the way, you can read it for free here! It’s written very nicely, contains a lot of useful stuff and will definitely teach you how to make things more structured and sane. If you find yourself trapped by your code and want to make it much better, read this book, it will teach you a lot.
SFML Game Development
This book is a fantastic start for beginner programmers. I wish I had read it when I was one, it would have certainly saved months of my life! But I read it after 6 years of doing C++ and game dev. And it still taught me a lot and helped me rebuild some parts of my engine. What I like about this book is that it covers a lot and stays very in-depth and explains every piece of code in a nice way. After reading and following this book, you’ll have a pretty nice structured game! Check out source code of examples: it’s written very well.
Programming Game AI By Example
This books is amazing introduction to Game AI: it starts with state machines, proceeds to steering algorithms and then covers some pretty difficult topics! And it does everything just perfectly. The code is well structured and explained quite well: it’s easy to follow along and implement your own stuff based on it.
More awesome books:
- Game engine architecture club - some great talks about engine design
- Fix Your Time Step - great article about fixed delta, great blog in general, mostly about networking and multiplayer
- Games from Within - a blog about data-oriented design and other game dev stuff
- Entity systems are future of MMOG development
- Guide to implementing 2D platformers
- IT Hare - great blog about various aspects of programming and game development
- Game Mechanic Explorer - great souce code examples of common algorithms (walking and jumping, basic AI, lighting, etc.)
The Art of Game Design: A Book of Lenses
This book is the greatest book about game design I’ve ever read. It talks about a lot of different aspects of it and gives you “lenses” - a set of questions that you can ask yourself about your game to figure out what you want to make and things you have to consider. This book makes you think deeper about game design that you’ve thought before.
Level Up! The Guide to Great Video Game Design
This book is less conventional and formal than Book of Lenses, but it’s amazing too! It is less theoretical and more practical, gives you lots of nice advice about world and level design, weapon and enemy creation and more. It’s full of hilarious humor and great examples from different games. It will definitely sparkle your creativity when you’ll read it.
Game Feel: A Game Designer’s Guide to Virtual Sensation
This is a book about controls and “feel” of the game. Some games feel fluid and responsive when some aren’t. The author explains what makes games feel good. Sometimes a book gets a bit repetitive and too low level, but if you want to learn a lot about the input, this book is a great reference.
Post mortems / books about development of games
Masters of Doom: How Two Guys Created an Empire and Transformed Pop Culture
This book tells us a story of ID Software starting from it’s early days. If you’re a Doom or Quake fan, you should definitely read it, but even if you aren’t: you’ll still be interested, as the author writes exciting story about ID’s rise in game industry and about development of Doom and Quake. Fantastic read.
Postmortems From Game Developer
This books features great collection of postmortems from people who directly worked on the games. There are some details about development and trivia about the games themselves. The games which are talked about are classics: Deus Ex, Diablo II, Thief, Unreal Tournament and more. And by the way, a great way to learn is by seeing mistakes of other people, so it’s not only interesting book about games, but a great way to learn about how things can go wrong and what can be done to avoid this.
Half-Life 2: Raising the Bar
This is a book about development of Half Life 2. Full of development screenshots, interesting facts about different aspects of its development, interviews with developers… it’s awesome!