Here I go, congratulating myself for finishing Functional Programming Principles in Scala, an online class taught by Martin Odersky, creator of the Scala programming language, professor at EPFL in Lausanne, Switzerland and co-founder of Typesafe.
Scala is a well engineered modern successor to Java. It's a statically-typed functional/OO language with curly-brace syntax, pattern matching and type inference that runs on the JVM. Scala's libraries are well-thought-out and consistent. And, it's type system is some serious rocket-science.
The course took some material and examples from the classic Structure and Interpretation of Computer Programs (SICP), which is a great way to learn functional concepts in a new language. Topics included:
- higher-order functions
- pattern matching
- immutability and immutable collections
- laziness
- touched on inductive proofs of correctness
Boatload of Scala resources
Class staff and students compiled a great list of resources for learning Scala.
- Scala API Docs
- Scalacheat
- Twitter's Scala school and Effective Scala
- About Scala on StackOverflow
- Learning Scala in small bites
- CheatSheet
While we're on the topic, Twitter has invested big in Scala, open-sourcing some of the results. The presentation Systems Programming at Twitter gives a peek into how Twitter uses Scala for "programming the datacenter". Kestrel is a distributed message queue.
Books
Principles for Good Design
The class was a great introduction to the language and some ideas that will come in handy in any language. I had a lot of fun with it. Odersky wrapped up the course with some principles for good program design.
- Name everything you can
- Put operations into natural scopes
- Keep degrees of freedom for future refinements