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
Check out Basic Learning Scala Resources
ReplyDeleteGraham Lea’s Guide to Learning Scala
ReplyDeleteHey Chris, did you see that the "Statement of Accomplishment" is available as of today ? Just printed mine.
ReplyDeleteI put in exactly the right ratio of effort to slacking. I was over the "with distinction" boundary by .1%
Delete