Many thanks to all who came to my Spring in Scala talk. The video is now available at Skills Matters website, I am adding the slides in PDF the source code on Github and links to the other posts that explain in more detail the topics I mentioned in the talk.
What is Scala?
Scala is object-functional, strongly typed language. This means you can easily adopt it: from the familiar patterns of object-oriented programming, through applying the functional programming principles and completing the journey by implementing complex type systems.
There are many more details at What can Scala do for you?
The Cake Pattern
When you’re in the Scala world, you will no doubt come across the Cake pattern. (The name has nothing to do with Cake Solutions, we started the company many years before Scala was born.) The Cake pattern is a kind of dependency system, but not a dependency injection of instances as implemented by the Spring Framework. Instead, it allows us to express functional dependencies and these dependencies must be satisfied at compile time by the programmers; the Scala compiler does not perform dependency injection of any kind.
Down the rabbit hole
So. Once you are comfortable with Scala’s functional and type programming patterns, it is time to start looking at some of the some of the more complex patterns of functional and strongly typed programming. A perfect starting place is the Scalaz library, which implements constructs from the purely functional programming and category theoretic worlds. After Scalaz, it will be time to take a look at Shapeless, which implements poly-type programming.
To close, I think you need to be aware of the FUD that many spread about Scala. The gist of it is that Scala–the language, that is–is simply far too complicated for anyone to understand well. This makes Scala unsuitable for any serious use, because any code that you write in Scala is doomed to be far too difficult for anyone to understand.
We have been using Scala code in production for a long time; we have seen massive improvements in the tooling (both Scala IDE and the IntelliJ IDEA Scala plugin). The Scala compiler has also reached maturity; exceptions at compile-time are now [mostly] a thing of the past. So, don’t be afraid, jump in!