Think Complexity by Allen Downey is written for someone in an intermediate college level class. It has examples of Python code and talks about algorithms a lot. Personally, I think it would probably be suitable as a 300 level class or higher just because of all the math and science related stuff.

The author goes all over the place and references Wikipedia often. Chapter 1 is about Complexity Science, which seems to lean towards the idea of “question everything” and “ask questions” without

really caring about the answers. Chapter 2 is about graphs, but not graphing in the regular sense. Instead, the author is referring to a “system that contains discrete, interconnected elements”, such as a map. Chapter 3 is about the analysis of algorithms and has some interesting mini-studies about search algorithms and hash tables.

Chapter 4 is all about Small World Graphs and contains lots of references to scientists like Watts, Strogatz and Dijkstra. Chapter 5 deals with Scale-Free Networks and various types of distributions thereof. Chapter 6 introduces the concepts of Cellular Automata and the various levels that Stephen Wolfram came up with. This topic is continued in Chapter 7 with the Game of Life idea. As you can see, the chapters vary wildly in content both from chapter to chapter and within the chapters themselves. They are also very short as most clock in at around 10 pages. Chapters 8-10 talk about such heady topics as Fractals, Fourier transforms, and Agent-Based Models. The last 4 chapters are case studies.

There isn’t a lot of Python code in this book. It’s mostly an “ideas” book that’s designed to make the reader think. Some of the code examples are interesting though. For example, the author teaches the reader how to construct an abstract class in Python very clearly and how to design it so that it cannot be instantiated but must be sub-classed and overridden instead. The author also has a couple of examples where he uses SciPy or NumPy to illustrate some of his ideas, so this book will probably appeal the most to scientific Python programmers. One nice plus is that the author does have some interesting exercises for students to try, although he doesn’t provide the solutions in the book. I think some of the solutions can be found on the book’s website though.

If you’re looking for a rather random book on science with a smattering of code (or you just want to learn a little bit about Complexity Science), then this book might be for you. On the other hand, if you’re hoping to learn about actual Python code in the scientific world, then you’re not going to learn much from this work. I know this is a little contradictory to the previous paragraph, but while there are some small examples of equations using NumPy and SciPy, the vast majority of the book is prose. In the end, the book is interesting to read, but probably won’t add a lot to your programming toolkit.

**Note: I received this book free of charge from the publisher**