Students explore the idea that thinking is a form of computation by learning to write simple computer programs for tasks that require thought. This book guides students through an exploration of the idea that thinking might be understood as a form of computation. The book is based on a popular course at the University of Toronto and can be used in a variety of classroom contexts, by students ranging from first-year liberal arts undergraduates to more technically advanced computer science students.