How can we effectively use functional programming techniques to build real-world software? This course will focus on using the OCaml programming language for this purpose. Topics covered include OCaml basics, modules, standard libraries, build tools, testing, idiomatic functional programming, specifying program properties, efficiency analysis, monads and monad programming, algebraic effects, and parallelism. Students will practice what they learn in lecture via functional programming assignments and a final project utilizing functional programming to solve a complex problem.