How is it possible that only a small number of genes can code for the shape of a tree? How can bees maintain a complex social structure and create beautifully and efficiently organized hives with such small brains? Why is it so that we still cannot forecast the weather for any significant amount of time despite the truly incredible computing power of modern super computers? Indeed, how is it conceivable that trillions of neurons create intelligent behavior?
Answers to such questions have proved hard to come by. Surely, it is remarkable that modern science could predict the emission spectra of atoms with stunning precision or understand the basic laws that govern the universe decades before any of these questions had even a hint of an answer.
Ultimately, the reason as to why these questions are so hard is that they pertain to complex systems. On the one hand, complex systems are so ubiquitous that it is easy to overlook them, on the other hand, when not overlooked, they seem to be so bewildering as to defy explanation forever. Fortunately, over the last few decades, enormous progress has been made. Especially so on the qualitative side, although there are very significant quantitative results as well.
This course will investigate the mechanisms and notions that underlie the complex behavior so common in the natural world and discuss fundamental answers. It will be argued how interaction and recursion are two essential mechanisms, and how complex systems can lead to emergent phenomena that defy an atomic explanation.
In order to get a good grip on this extraordinary topic, we will explore the world of complex systems and their fundamental mechanisms through lectures, seminars and programming. But why programming? Few would argue that a culture can readily be understood without learning its language. Similarly, a deep understanding of complex systems and emergent phenomena is virtually impossible to attain without a core knowledge one of its two complementary languages: Mathematics and Programming. Indeed, trying to avoid either is akin to an attempt to ‘understand’ driving by reading up on the rules of the road. Regrettably, the mathematics of complex systems can get very hard very quickly but the required programming skills needed are surprisingly accessible.
Now this is exciting since an understanding of how coding works is immensely useful in a huge number of fields while in the context of this course, it is the tool that enables one a hands-on experience and a means to explore systems in ways that is not otherwise possible. By actually engaging in coding oneself, it will become abundantly clear why the notions of computation play such a key role when trying to unravel the mysteries of complex phenomena. And … prior programming or coding experience is not required!
Toward the end of the course, we will discuss why, out of necessity, living systems may well need to be complex and how emergent behavior and computing go hand in hand. Indeed, I will argue that the emergence of life, given the existing laws of nature, is inevitable and that consequently life must be abundant in the universe! (But do feel free to disagree on this one, it’s the discussion that counts not the outcome).
After completing this course, you will have a deep understanding of complex systems, emergent phenomena and the workings of computational devices. It will be clear why the principles behind complex behavior need not be complicated, that we can understand why ant or bee colonies can perform their astonishing feats and that one of the great challenges of 21st century science is the discovery of universal laws of complexity.