# Category Theory for Programmers - Part I

Complexity science, also referred to as systems thinking or systems science, is increasingly recognised as relevant paradigms for studying the way in which large groups of individual components behave collectively by adapting to each other and the environment they create themselves. In these complex systems, cause and effect are often distant in time and space, delaying noticeable consequences of actions, such that they are different from and less salient than their proximate effects. Such complex systems that escape our intuition can be found in all parts of society and we still lack the principled foundations needed to formalise these problems and derive possible answers.

One novel avenue for addressing this concern is the emerging field of applied category theory (ACT), based on a mathematical language for defining and studying compositional systems, where complex entities are built up from smaller, simpler pieces. The earliest applications of category theory (CT) were in pure math, where it provided a common language for comparing algebraic and geometric structures. Later, in the 1970’s and 80’s, it became clear that the same mathematical structures devised to link algebra and geometry could be used to analyse physical, logical and computational systems as well. Today, CT is well-established across a broad range of pure mathematics, theoretical physics and computer science.

In the last ten years the work done in ACT has expanded rapidly, touching on topics in aviation, chemistry, epidemiology, machine learning to name but a few. This institutes driving this development are especially the following:

- Institute for Categorical Cybernetics
- Topos Institute
- Workshop on Applied Category Theory: Bridging Theory and Practice organised by the ‘National Institute of Standards and Technology’ (NIST)

Being aware of this development has led me to study and learning applied category theory, using programming language theory as an introductory lens. To reflect on categorical structures on programming language design I use Haskell and in the future Python. My notes and solutions to challenges in the ‘Category Theory for Programmers’ by Bartosz Milewski can be found in the linked document. They are still a work in progress.

Link to PDF here.