Functional Programming Principles in Scala lessons from Coursera by Martin Odersky