Instructor: Allen Downey
Meetings: Tuesday & Friday 10:50 am to 12:30 pm, AC417.
Textbook: Think Complexity 2nd edition (link to the book)
Link to the calendar spreadsheet
This class is primarily about complexity science, but it is also about data structures and algorithms, intermediate programming in Python, computational modeling, and the philosophy of science.
Complexity is an interdisciplinary field—at the intersection of mathematics, computer science and natural science—that focuses on discrete models of physical and social systems. In particular, it focuses on complex systems, which include networks and graphs, cellular automatons, agent-based models and swarms, fractals and self-organizing systems, chaotic systems and cybernetic systems. This class surveys topics in Complexity Science; students will get an overview of the major areas that make up the field and read original papers that present fundamental results.
A data structure is a collection of data elements organized in a way that supports particular operations. For example, a Python dictionary organizes key-value pairs in a way that provides fast mapping from keys to values.
An algorithm is a process for performing a computation. Designing efficient programs often involves the co-evolution of data structures and the algorithms that use them. This class picks up where Software Design leaves off; students have a chance to learn about analysis of algorithms, especially graph algorithms, and the efficient implementation of matrix-based algorithms.
A model is a simplified description of a system, used for simulation or analysis. Computational models are designed to take advantage of cheap, fast computation. This class picks up where Modeling and Simulation leaves of; students have a chance to implement models of complex systems and run experiments that predict and explain system behavior and help design systems.
The experiments and results in this class raise questions relevant to the philosophy of science, including the nature of scientific laws, theory choice, realism and instrumentalism, holism and reductionism, and epistemology. Students will have a chance to read about and discuss the basic questions in the philosophy of science.
Learning goals
Survey the major areas of Complexity Science, reading both primary and secondary literature.
Replicate previous experiments in this area and extend them in useful ways.
Use and critique models of physical and social systems.
Continue to develop programming skills in Python.
Design data structures and algorithms and implement them in code; analyze time and space requirements.
Understand central questions in philosophy of science, historical responses to them, and the impact complexity science has on our understanding of models.
As students, you share responsibility for creating and maintaining a classroom atmosphere that is conducive to everyone's learning and enjoyment. I hope you will think about how your participation contributes to the learning environment.
Some things you can do to help:
0) Come to class.
1) Come to class on time! I will do my best to use class time effectively. If you arrive late, you will be out of sync, and you impose a cost on other students.
2) Come to class prepared. Make sure you have always at least skimmed the reading.
3) Try not to fall behind. If we are all working on the same stuff at the same time, everything works better.
4) Take care of your brain. Eat well, sleep well, get some exercises. Come to class ready to work.
5) Be professional. If you have to miss a class, or need to submit work late, communicate with the instructor.
6) Be respectful toward the instructor and your fellow students.
7) Be generous with your ideas and your time. Help each other.
8) Be reflective. Think about what's working and what's not, and take responsibility for making the class work for you.
9) Be honest.
10) Have fun!
Your final grade will depend on a weighted sum of your scores for homeworks, quizzes, and reports. I will deduct some credit for late homeworks and reports, and for failures of professionalism.
I understand that students occasionally have to miss a class. For that reason, the first missed quiz is excused (that is, the missed quiz is dropped). If you have to miss a second quiz, please contact me as early as possible so we can schedule a makeup quiz. If you don't contact me before the quiz, I cannot offer a makeup quiz. If you miss a third quiz, I cannot offer a makeup quiz. In those cases, I use a default grade of 4 out of 10, to limit the impact of missed quizzes. If a student does not miss any quizzes, they get an "attendance bonus": their lowest quiz score is dropped.