This book is addressed to people eager to learn and practice the principles of functional programming, and the best way to do so is by using a popular functional programming language. To teach our material, we use Racket. It is the result of an ongoing development initiated in the 1990s by a research group called PLT, in the frame of a project for the creation of a pedagogic programming environment based on Scheme. Racket has outstanding functional programming features, but is also ideal for the study of program design principles in general.