This book is filled with pompous statements and philosophical discussions. Who cares? No one. Instead of teaching really useful things, such as algorithms, or tecnhiques, the text spends huge amounts of space on pointless philosophical discussions. For example, when assignments are introduced...(e.g. x = x + 1), the authors take up a boring discussion about the conceptual difficulties and implications this introduces into the language. Again, who cares? Millions of lines of code are written in C every year and everything works just fine. You can tell from the book's preface that the aim isn't to teach you programming, but instead to philosophise about conceptual issues...whatever that means. In other words, this text belongs more in a philosophy course than in a computer science course. There's more talk here, and less real action. It supposedly teaches you how to think about programming, but that is already accomplished by C courses, which teach objects and functions. Aside from that, it does a decent job of introducing Scheme. But here again, that language is strongly tied to the book's philosophy. It is nearly impossible to write anything useful in the language, as it's designed to demonstrate some finer points of reasoning about computer science, and is not designed as a practical programming language. If you are looking to learn practical skills, don't get this book, it'll only waste your time. If you are interested in "philosophy of programming" mumbo jumbo, you might like this book. Although, I should warn you, the text pretends to teach both things, but does neither well. This is pure "programming for its own sake" type of text. If you like that, fine, but if you want to program for the sake of accomplishing something useful, there are only a handful of sections in this book that discuss anything of relevance and you'll just waste your money.