Charming Scala

Scala is one of the frontrunners of the JVM languages (though it has Javascript and .NET backend too). Everyone is talking about Scala (and FP in general) and we all hear the usual stuff about lots of heavy things like functional programming and how it helps in the world of parallelism/concurrency and its conciseness. Yes, FP is great and there are tons of books and articles which will talk about referential transparency, side effects minimization, immutable approach to programming, combinators, etc. but I am going to talk about the charming Scala.Well, I did programming in many languages (and keep learning new ones) but till recently programmed in Clojure and Python. They are great languages but I found something missing when we embarked on building a massive system with large code base. First, static languages give you the peace of mind  – that contracts will not be violated at runtime. Compiler works hard to ensure people do not change contracts at will. Then there is performance that the compiler gives you by producing optimized code by virtue of type knowledge. Then there is comfort in using that knowledge of types to write code faster (and be really productive) with IDE features like context aware code assist, refactoring, etc. Testing effort can focus on domain level functionality. Any problems are immediately highlighted. As humans, we always tend to overlook issues and it is nice and reassuring that my IDE is preventing me from using any API inappropriately or writing wrong code. For big teams, writing and maintaining large code bases, static language definitely helps. BTW, I use IntelliJ Scala Plugin which is awesome . The REPL has all facilities that you get in the main editor. For example, using a class which has not been imported into REPL is automatically done so on its usage. I use IDEAVim being a Vim guy (best of both worlds).