Expand your Python skills by working with data structures and algorithms in a refreshing context―through an eye-opening exploration of complexity science. Whether you’re an intermediate-level Python programmer or a student of computational modeling, you’ll delve into examples of complex systems through a series of exercises, case studies, and easy-to-understand explanations. You’ll work with graphs, algorithm analysis, scale-free networks, and cellular automata, using advanced features that make Python such a powerful language. Ideal as a text for courses on Python programming and algorithms, Think Complexity will also help self-learners gain valuable experience with topics and ideas they might not encounter otherwise.
Allen Downey is a Professor Emeritus at Olin College and the author of a series of freetextbooks related to software and data science, including Think Python, Think Bayes, and Think Complexity, which are also published by O’Reilly Media. His blog, Probably Overthinking It, features articles on Bayesian probability and statistics. He holds a Ph.D. in computer science from U.C. Berkeley, and M.S. and B.S. degrees from MIT.
Philosophy of science when it meets computer algorithms and software. The book is very mind opening, telling the reader that there is a land in human knowledge and thinking and research and just points towards this land. The book aims at asking questions more than answering them.
The only negative point about this book is that it tires to explain to someone who almost knows nothing about algorithms and data structures, so it spends some time explaining some basics like graph, and then moves to some philosophical concepts regarding graph. I think that if you are a novice programmer you cannot get the full potential of those concepts, and if you have some experience in programming you will be skipping a lot of pages.
In operations research, among modelers it is a truism that models are for insights, not numbers. And the ability to provide insight is even more important than the ability to provide proofs that the model is correct or that the methodology is efficient or accurate. Think Complexity is an introduction to computational modeling for the purposes of finding this insight in areas that defy proof techniques.
Complexity science is an area that is easy to hype. I admit to being highly skeptical when a student and co-advisor wished to introduce these concepts into a thesis. What Downey does in Think Complexity is to introduce the concepts and give computational examples. And instead of being a promoter he provides the tools for someone to explore and ask the questions of the models and consider if the insights presented by the models are believable.
The beginning of the book is an overview of philosophy of science, to set the stage for thinking about this type of model. Next is an overview of Python data structures and analysis of algorithms. Once past this, then you get more in depth coverage of implementation of different types of models used to explore complex systems. And here the emphasis is teaching enough to follow the example, with links to Wikipedia given for more formal introductions to the topic (and the Wikipedia articles seem chosen for quality of the article and the references for the dedicated.)
To properly do the exercises, one would have to be a good Python programmer, and these would be serious exercises in the application of data structures. But even if the focus was on an introduction to complexity science, being able to run and modify the examples made this a more useful introduction to the field of complex systems and models for emergent behavior than other works that I have seen. Running and playing with the examples makes a greater impact than the text explanation, and in this Think Complexity is a success.
Disclaimer: I received a free copy of an electronic version of this book through the O'Reilly Blogger Program.
An empirical approach to understanding complexity, randomness, and "emergence" in general. Each chapter considers a different area of problems, providing clear hands-on examples that (in the second edition) are available in Jupyter notebooks plus a sprinkling of links out to more detailed discussions across the interwebs. Much of the focus here draws a distinction between classical models that tend to be based on laws and have analytic solutions (deterministic) versus the newer tooling for science that is often much more empirical based on simulations and lots of computation (stochastic).
The general notion that relatively simple, deterministic components at scale can lead to complex systems which are non-deterministic calls into question some of the normative positions which so many people take for granted. For instance, is there (for lack of a better term) an Abrahamic god up in the sky who sees everything and orchestrates everything? Is it reasonable to *not* believe in theories of evolution?
Highly recommended, especially in data science curriculums or people wanting to explore some of the more interesting foundations of AI, since this book brings into question the decision-making facilities of people who operate on "gut feel", "first principles", and other (IMO) aristotelian justifications -- without leveraging computable processes of investigation and verification.
A great read for anyone interested in Python or, more importantly, in how one might use Python or some other programming language to model such things as groups of agents exhibiting intelligent-seeming behaviour (my favourite), or fractals, or to use readily-available Python packages to easily construct competent graphs. Some not insignificant mathematical ability is required to fully appreciate some of what is discussed: manipulation of equations, logarithms and so on. However, I felt I still got something out of skimming through the parts with mathematics I was too rusty on to comprehend completely.
One thing I found off-putting at first was the use of Wikipedia links as further reading. However, whatever one's personal stance on the practice in general I think this is appropriate for the intended audience of the book: people who are capable of directing their own learning and wish mainly to be introduced to ideas so that they can seek out further information themselves. Wikipedia is indeed in many cases a very good place to at the very least gather a basic enough understanding of a topic to work out where to go to learn more. This book itself is designed with the purpose of introducing a great many ideas rather than delving too deeply into any of them, and provides books as well as Wikipedia links where further information might be found.
All in all this is something I feel I read at exactly the right time and I am sure many of the things I was introduced to by reading will prove useful to me in ways I cannot now know of.
It is almost 2 months for me to go through this book. Allen B Downey chooses 5 complex structures that we usually rely on third party libraries. These are: Graph, Scale-free Networks, Cellular Automata and fractals.
It is quite interesting to see complex algorithm explained using Python.
Allen started explaining what is Complex system with the example of how can you explain 'why planets are elliptical'. Interestingly he explained how people choose hard way with differential equation and another simple interesting way. :)
The interesting narration keep continuous on chapter for Graph. The third chapter explains the nature of algorithm and big O stuffs. This is quite normal.
The chapters for Scale Free Networks, Cellular Automata and fractals are the highlighted and main parts.
I appreciated that Allen allocates four full chapters on Case Studies to apply the concepts that he explained.
Whether you learned algorithm and data structures or not, I recommend to read this book that take you towards the new 'Complex' world.
I am disappointing by this book. I see it more like a study guide with a lot's of external resources to fetch and read (scientific publications or wikipedia articles) as well as programming exercises, and finally not much content. To give an example, the part about programming covering data structure and algorithm complexity is not related to complexity. Having already been programming, and having read a couple of books on the subjects such as Complex Adaptive Systems: An Introduction to Computational Models of Social Life, I did not get much new insight.
This one is not an easy one. Allen guides you through the various, complex, algorithms and data structures. This book is not for a beginners – you have to know Python already to solve exercises presented by author. The complexity of the book itself is also rather for slightly advanced developers. If you just start your journey with Python development it may be hard to follow.
What I liked, however, is the way Allen presents the material. He tries to show you different aspects of the development process and refers not only to computer science but to philosophy and mathematics as well. Even if you won’t be able to solve all the presented puzzles it is still worth getting through the book.
Few remarks regarding what I really liked in the book. First of all, Allen provides you with lots of references. So, if you are interested in particular topic, you have plenty of sources to start with. Secondly, Allen provides you with references to Wikipedia very often. This is not regarded usually as a good source among “university like people”, however I like this kind of approach a lot.
Fabulous book. The example code really gets driven home if you key it all in and struggle to understand the math. There is quite a bit of math here folks, remember that. All can be researched on-line though and the book extensively refers to Wikipedia which is fine for the likes of autodidacts like me.
If you are tired of the hand-wavy non-technical "Introduction to Complexity" books but also don't want to read a textbook on a single subtopic, this blog-like book will provide the right balance.
It still only provides a high-level introduction to concepts but does so in a "try it and see for yourself" manner.
There are links to code, inspiring practice exercises, and references to good quality Wiki vs. unreadable academic papers.
But, it helps to already know a little about Complexity (perhaps through some of the non technical books) to make most of this book.