Cambridge: Cambridge University Press (ISBN 978-0-521-42426-4/hbk). xxiv, 579 p. £ 32.50; $ 55.00 (2009).

A great number of deep and surprising results in computational complexity have been obtained in the past 20 years. It was the goal of the authors of this “modern approach” to the field to present these more recent developments along with classical results. The 23 chapters of the book are grouped into three parts. The first of these (“Basic complexity classes”, approximately the first half of the book) introduces the basic computation models (deterministic, nondeterministic, randomized, Boolean circuits, interactive proofs, quantum) and the most important complexity classes L, NL, P, NP, the polynomial hierarchy, BQP, IP, PSPACE, EXP, NEXP. It presents a great number of old and recent results with complete proofs (including the hierarchy theorems, many completeness results, Savitch’s Theorem, the Immerman-Szelepcsényi Theorem, the Karp-Lipton Theorem, the Sipers-Gács-Lautemann Theorem, $\text{IP}=\text{PSPACE}$, pseudorandom generators, Grover’s, Simon’s and Shor’s quantum algorithms) and devotes one chapter to an introduction to probabilistically checkable proofs (a full proof of the PCP-Theorem is deferred to a later chapter). Part II is devoted to lower bounds. It covers decision trees, communication complexity, Boolean circuit complexity, proof complexity, and algebraic circuits, and presents the most important lower bounds obtained in these models. In particular, the circuit chapter covers the results of Furst-Saxe-Sipser, Ajtai, and Smolensky on constant-depth circuits, and of Razborov on monotone circuits. The different chapters of Part III address further advanced topics, such as the complexity of counting (including Toda’s Theorem), average case complexity, pseudorandom construction and derandomization, and more on probabilistically checkable proofs (with a proof of the PCP Theorem). Each chapter ends with (bibliographic) chapter notes and a set of exercises. The book is suitable for self-study; in my opinion it is the perfect textbook for the beginning PhD student in computational complexity theory. As the authors finish their foreword: Onward to P versus NP!