If like me you think this book will explain you the complexity theory of algorithms and teach you how to write faster code you are out of the road.
Instead, this book shows various models that allows to simulate experimentally the behavious of real complex system.
Another aspect who the author try to explain through all the book, is the validity and the robustness of explanations of complex system behaviours given with computational models compared to the "old science" approach, based on formulas and mathematically explainable relations .
In the preface the author indicates three major topics the book will cover: Python programming, Computational Modeling and Philosophy of science. While the last two topics are covered deeply, trough the book and in the references, the Python programming (one of the reasons i choose this book) is very basic and the references to other libraries doesn't makes the code more complex. So, this book is not for pure practical programmers who want to learn advanced features of python, which are covered better in books like "Dive into Python" and "Think Python".
Computational modeling is explained widely thanks to exercises, references and case studies. Starting from systems describable through graphs, the book continues explaining systems that present a specific distribution of events and how to model these distributions and extract the relations between the parameter of the model. Cellular automata is explained and used to generate some behaviors like randomness or other models as fractals, percolation. Other models are described to show the behaviors of some critical systems, systems in transition between to states, as freezing waters and pink noise. The last models described are the Agent-based models and examples as traffic jams and bird flocks are used to explain them.
For what concern the Philosophy of Science, the author tries to induce into the reader what "Thomas Kuhn" introduced as "Paradigm shift", a shift from old science to complexity science, where complex models gives the same satisfaction of equations.
To better explain this concept, I report an example of the book:
"The development of complexity science is not the replacement of an older model, but (in my opinion) a gradual shift in the criteria by which models are judged and in the kinds of models that are considered acceptable.For example, classical models tend to be law-based, expressed in the form of equations, and solved by mathematical derivation.Instead, models that fall under the umbrella of complexity are often rule-based, expressed as computations, and simulated rather than analyzed. Not everyone finds these models satisfactory. For example, in Sync, Steven Strogatz writes about his model of spontaneous synchronization in some species of fireflies. He presents a simulation that demonstrates the phenomenon, but then writes:Pros of the book are the exercises and the presence of case studies at the end of the it with which the reader can practice. Also, each chapter contains both sections where models and implementations are explained and sections where papers shows real-system with their derived model.
I repeated the simulation dozens of times, for other random initial conditions and for
other numbers of oscillators. Sync every time. The challenge now was to prove it. Only
an ironclad proof would demonstrate, in a way that no computer ever could, that sync
was inevitable; and the best kind of proof would clarify why it was inevitable."
One of the cons of this book is the huge presence of external references to papers and wiki pages. Of course is practically impossible fill a single book with all the topics related to the models explained but, the continuous "goto" and come back impact on the readability.
This book is a good reading for Computer scientist who wants to learn about complex systems and the data-structures related. For who is interested on the philosophy aspect of complexity, the book proposes in each chapter the validity of this method and how can be applied to study complex system where a clear definition of laws and equations is impossible. The author stimulate the curiosity of the reader through the book, asking to implement and critically analyze models looking for analogies and differences. Even if I consider myself a pure practical programmer, this book interested me because describes the behavior of real-system through models that I can reassemble to apply them to other problems, providing also methods and tools to analyze the results of the tests compared to the real system behavior.