Functional Programming Principles in Scala. Coursera. Taught by Martin Odersky. https://www.coursera.org/course/progfun