Description: This book describes how to think about computer programs, and how to use mathematics as part of that thinking. Many books and on-line tutorials teach the basics of coding: the syntax of the language, and how to translate an algorithm into code. But how do you come up with that algorithm? And how can you be confident that the algorithm is correct?