We have written this book assuming that the reader comes to it with certain knowledge. Namely, we assume that the reader is at least vaguely familiar with a high-level programming language, such as C, C++, Pascal, or Java, and that he or she understands the main constructs from such a high-level language, including:

- Variables and expressions
- Methods (also known as functions or procedures)
- Decision structures (such as if-statements and switch-statements)
- Iteration structures (for-loops and while-loops).

In terms of mathematical background, we assume the reader is somewhat familiar with topics from high-school mathematics, including exponents, logarithms, and elementary probability. Even so, we review most of these facts in Chapter 3, including exponents, logarithms, and summations, and we give a summary of other useful mathematical facts, including elementary probability, in Appendix A.