This book sparkles with ideas; it all revolves around the concepts of recursion and language.

Language is a system of forms arranged to express meaning. Mathematical logic, computer programming languages, but also the system of neuron signalling in the brain, or the patterns of ants moving inside and around an ant hill, all are designed to form complex combinations that express something meaningful.

What is more, they can be used to form a higher level language, with a meaning on a different level. For instance, assembly language can be used to implement higher level programming languages; patterns of neuron signals can be said to express a higher-level language of brain signals; the same can be said for patterns of ant movement.

Hofstadter tries very hard to convince us that meaning can be an emergent property: that it should not surprise us that the man in Searle's Chinese room doesn't speak Chinese, while the system as a whole can.

He also dwells on languages powerful enough to express their own meaning. This leads to paradoxes; Epimenides already knew that, and for mathematical logic, groundbreaking work in this area was done by Kurt Gödel.

The book has expositions and dialogues, in turn. The dialogues are very witty and a joy to read. The expositions are much harder, but they treat some stuff that is very fundamental to computer science, so at least computer science students should consider it a must read.