Game programming is a huge interdisciplinary field. It is derived from fields such as mathematics, general-purpose programming, and artificial intelligence. Although you will learn much about these subjects during your journey, there are some materials with which you should already be comfortable.
To begin with, this book assumes you can code fluently in the C or C++ programming languages. You should be able to comfortably code using includes, pointers, classes, data structures, inheritance, and so on. This is not a book about programming, but a book about a specific use of programs. You will find a review of some popular data structures in Chapter 3, "Data Structures and Algorithms," but that is all you should expect. On the other hand, you don't need to know how to program a game at all: That's exactly what this book is all about.
Another prerequisite is some mathematical background that is equivalent to linear algebra and calculus as taught in many universities. You should be familiar with subjects such as vector math, derivatives and integrals, matrices, trigonometry, and so on. For those who have long forgotten this information, I have provided information on these subjects in Appendix D, "Some Math Involved." It includes most formulae and mathematical techniques used in this book. Be sure to give it a quick read.
Additionally, you will need time, and this is more important than you can imagine. Many people think that programming games is extremely difficult, and that the code is written in some arcane syntax understandable only by experts. Although some parts of the process are indeed complex, most of the source code for a game can be easily understood complexity lies in very specific and easy to spot areas. So, what makes games so hard to code? It's not the difficulty: It's the time required to achieve any decent result. Many games can be created with dedication and discipline. For the most part, it won't be incredibly difficult. But it does take time, so make sure you have plenty of it.