Computational complexity, that is the study of the resources needed to solve problems by computer, is a central part of computer science. Unofortunately this area may seem difficult to understand, despite the fact that many people have a good working knowlegde of computers. The inclusion of the P v NP question as one of the Millennium problems in mathematics may draw attention to the subject, but doesn't make it look any easier. In this book David Harel provides a short account of the subject in a way that can be understood by the non-specialist reader. It's an enjoyable read, and I would recommend it to anyone who wants a better understanding of just what the limitations of computers are.
After a general introduction to the subject the book gets on to tthe impossibility of some tasks, such as writing a general program to predict whether or not other computer programs will run forever. This is followed gy a look at problems for which the best algorithms take a time exponential in the size of the input and so are impractical for realistic use. Harel then gets on to NP complete problems, explaining why the question of whether these might have a polynomial time solution is so important. The remainder of the book shows why things might not be as bad as they seem. There's a chapter on possible ways of approaching intractable problems, such as Monte Carlo algorithms followed by a look at how intractability can be used to our benefit by allowing secure methods of communication. The last chapter considers whether artificial intelligence will ever reach the level of human abilities. The one criticism I would have of the book is in the suggestions for further reading. These are given as footnotes in the text,mixed in with references to academic paper , making it hard to follow them up - I would rather see a list at the end of the book.