||New Reviews| |Software Methodologies| |Popular Science| |AI/Machine Learning| |Programming| |Java| |Linux/Open Source| |XML| |Software Tools| |Other| |Web| |Tutorials| |All By Date| |All By Title| |Resources| |About||
Keywords: Complexity, computer science, Python
Title: Think Complexity
Author: Allen B. Downey
Verdict: Works as a set of course notes, not so much as a standalone book
This is a difficult book to review. Not because the content is necessarily bad, or the quality of writing or the technical content inaccurate. No, it's hard to review a book when you don't quite get the point of it. The topic itself, complexity science, is one that I'm very familiar with, and as you can see from looking at the list of reviewed titles in Machine Learning on this site. And it's not just familiarity from reading books, my own PhD was in the field (focusing on association rules, Bayesian networks and genetic algorithms) and from current works in progress. So it's not that I'm unfamiliar with the territory.
No, the difficulty is that this book reads more like a set of lecture notes than anything else. Which is pretty much where the book started life - as a set of lecture notes. Unfortunately these notes haven't really been expanded much as they've made the transition to book form. So, what you get is some brief text on a given topic, and then some exercises, and then some more notes and some more exercises. And, just to be clear, it's in doing the exercises that you'll get the value from the book, not from the text itself, nor from the tiny snippets of code, nor even from the side-bars that look at specific topics in complexity (and normally point the reader to a wikipedia article).
The choice of topics is pretty odd to, for a book on complexity science. It includes basic computer science topics such as algorithmic analysis (including big O notation) and abstract graphs. In a bigger book having a couple of chapters on additional topics would be OK, but this is a small book. And there are lots of areas of complexity science that could have been covered and aren't, for example genetic algorithms or ant-colony optimisation. In fact the final section of the book includes a set of case studies provided by students of the class the author gave based on these notes. Interesting, but again that limits the range of material that is covered in the core part of the book.
It's true that the book uses Python code to explore complexity science, but the code snippets are short and sweet and if you want more then you have to do the exercises or download the author's code samples. It certainly doesn't do much to show you how to write solid Pythonic code in these areas. And it certainly doesn't compare to something like Programming Collective Intelligence, which covers topics that are core to complexity science but in a more practical and hands-on kind of way.
Finally, if the intention is to draw the reader into an exciting and intellectually stimulating area at the intersection of science, technology and statistics, then some of the more pop science books work much better at whetting the apetite. For example M. Mitchell Waldrop's 'Complexity: The Emerging Science at the Edge of Order and Chaos' or Steven Johnson's 'Emergence: The Connected Lives of Ants, Brains, Cities and Software' do a much better job. And for a more up to date and more technical treatment, Melanie Mitchell's 'Complexity : A Guided Tour' has a lot going for it.