The aim of this textbook is to present an account of the theory of
computation. After introducing the concept of a model of computation and
presenting various examples, the author explores the limitations of
effective computation via basic recursion theory. Self-reference and
other methods are introduced as fundamental and basic tools for
constructing and manipulating algorithms. From there the book considers
the complexity of computations and the notion of a complexity measure is
introduced. Finally, the book culminates in considering time and space
measures and in classifying computable functions as being either
feasible or not. The author assumes only a basic familiarity with
discrete mathematics and computing, making this textbook ideal for a
graduate-level introductory course. It is based on many such courses
presented by the author and so numerous exercises are included. In
addition, the solutions to most of these exercises are provided.