This course will introduce students to category theory, which though very abstract and general is readily applicable to many sciences, most notably computer science. We could vaguely define it as the study of the “algebra of composition of functions.” The change of perspective – study not the mathematical objects in isolation but the functions between them, is of profound importance. This change allows us to view the overall structure of mathematical theories and their interactions. We will concentrate on universal properties such as (co)limits and adjunctions. Examples will be drawn both from mathematics (e.g., linear algebra) and from the sciences (e.g., functional programming, automata theory, quantum mechanics, etc.). Exposure to Abstract Algebra or Real Analysis or Theory of Computation or Haskell will be helpful, but more important is enthusiasm and readiness to learn.