This book is about data structures and algorithms, intermediate
programming in Python, complexity science and the philosophy of
science:
- Data structures and algorithms:
- A data structure is
a collection that contains data elements organized in a way
that supports particular operations. For example, a dictionary
organizes key-value pairs in a way that provides fast
mapping from keys to values, but mapping from values to
keys is generally slower.
An algorithm is an mechanical process for performing a computation.
Designing efficient programs often involves the co-evolution of data
structures and the algorithms that use them. For example, the first
few chapters are about graphs, a data structure (nested dictionaries)
that is a good implementation of a graph, and several graph algorithms
that use this data structure.
- Python programming:
- This book picks up where Think
Python leaves off. I assume that you have read that book
or have equivalent knowledge of Python. As always, I will try
to emphasize fundmental ideas that apply to programming in many
languages, but along the way you will learn some useful features
that are specific to Python.
- Computational modeling:
- A model is a simplified description
of a system that is useful for simulation or analysis. Computational
models are designed to take advantage of cheap, fast computation.
- Philosophy of science:
- The models and results I will present
raise a number of questions relevant to the philosophy of science,
including the nature of scientific laws, theory choice,
realism and instrumentalism, holism and reductionism, and Bayesian
epistemology.
There are two kinds of computational models:
- Continuous:
- Many computational models compute
discrete approximations of equations that are continuous in
space and time. For example, to compute the trajectory of
a planet, you could describe planetary motion using differential
equations and then compute a numerical approximation of the
position of the planet at discrete points in time.
The fields of numerical methods and scientific computing
tend to focus on these kinds of models.
- Discrete:
- Discrete models include graphs, cellular
automata, and agent-based models. They are often characterized
by structure, rules and transitions rather than by equations.
They tend to be more abstract than continuous models; in some
cases there is no direct correspondence between the model and
a physical system.
Complexity science is an interdiscipinary field—at the
intersection of mathematics, computer science and physics—that
focuses on these kinds of models.
And that’s what this book is about.
Allen B. Downey
Needham MA
Allen Downey is an Associate Professor of Computer Science at
the Franklin W. Olin College of Engineering.
Acknowledgements
Contributor List
If you have a suggestion or correction, please send email to
compmod@greenteapress.com. If I make a change based on your
feedback, I will add you to the contributor list
(unless you ask to be omitted).
If you include at least part of the sentence the
error appears in, that makes it easy for me to search. Page and
section numbers are fine, too, but not quite as easy to work with.
Thanks!