The abstract branch of theoretical computer science known as Computation Theory typically appears in undergraduate academic curricula in a form that obscures both the mathematical concepts that are central to the various components of the theory and the relevance of the theory to the typical student. This regrettable situation is due largely to the thematic tension among three main competing principles for organizing the material in the course.
This book is motivated by the belief that a deep understanding of, and operational control over, the few "big" mathematical ideas that underlie Computation Theory is the best way to enable the typical student to assimilate the "big" ideas of Computation Theory into her daily computational life.