This document summarizes a book on cryptography for programmers. It begins with simple cryptographic primitives and builds up to complete cryptosystems. The goal is to help readers understand how real-world cryptographic systems work at a high level and how to apply cryptography in software, rather than making them experts. The book takes an experiential approach, teaching cryptography through breaking insecure systems to demonstrate why various primitives and techniques are needed.