This course aims to make students proficient in the functional programming paradigm used by languages such as F#, Scala, SML, OCaml, or Haskell. All programs created in the course will be written in F#, developed by Microsoft and incorporated in Visual Studio and the .NET framework. We will relate the functional paradigm to its imperative and object-oriented counterparts, but focus on concepts predominantly found in functional programming languages such as higher-order functions, recursion and tail recursion, immutable data structures, and first-class functions.