This book presents programming as a mathematical discipline, specifically focusing on abstract ion as the key to secure, reliable, and high-performance software. It is based on a series of lectures given by the lead author, with extraordinary success, to ordinary programmers at Adobe and elsewhere in Silicon Valley. The book is not a handbook, but instead shows programmers how to use mathematics to compose algorithms from components and to design interfaces between algorithms and data structures. It may sound like heady material, but with a decidedly practical purpose.