This book is a one stop solution to your theoretical computer science needs (at least, as an introduction). If you're interested in language theory, deterministic / non deterministic finite state automata design, grammars and regular languages, computational complexity (temporal and spatial complexity), this the book for you. The formal notation used in the book is not the heaviest ever seen for this kind of subject, so it remains comprehensible (assumed it's not your first exposition to this discipline). I found it particularly interesting starting from chapter 8, when it covers turing machines, indecidibility in chapter 9 and intractability in chapter 10.
All in all, it's a good introduction to these concepts. I give it 4 stars because some proofs could have been easier, but this is not a big problem. The P and NP classes of problems are wonderfully explained. We are speaking about a book every computer scientist out there should have on his/her shelf. Those who consider this book extremely hard and difficult is because of their lack of fundamental knowledge in computer science. Of course, this is not the first book you should read on the subject. But be assured, this book will give you what it promises: a good knowledge about languages theory, indecidibility and intractability of problems.