Thoughts on JVM Languages – Java, Clojure, Scala

Recently lot of JVM languages has been introduced – Java, Scala, Groovy, Clojure to name a few.

Scala has gained a lot of traction and lot of people are using it. However for every language and use-case, fit is important. Scala is easy to get started with and it feels like a big improvement over Java, but over time you find that the type safety system is a much bigger pain and learning curve for any advanced feature is very steep (covariance/contravariance – you are comparatively the easy ones).
Statically typed languages are good for infrastructure pieces and Dynamically typed languages are a better fit for user interaction facing things. Scala with it super pain-in-the-*** type safety only makes senses for Banking or IT services which ship software. Statically typed languages have failed miserably in creating a good experience – e.g. Ebay, LinkedIn, Webaroo (my previous startup), if you compare them to successes like Facebook, Instagram, Pinterest etc.

If I had to choose, I would choose as follows:
Infrastructure – Hadoop/Cassandra/Distributed file system – Java
User facing – Facebook/Twitter/Pinterest/Instagram – PHP/Python/Clojure/Ruby

BTW I love Clojure. Its an awesome language. A bit steep learning curve because its functional. But once you are over the bump, it feels like you have super powers. Awesome dynamically typed language with the performance of statically typed languages. People should give it a try. Clojure is the only language I have ever loved.

PS: Based on 10 years of Java, 6 months of Scala and 8-10 months of Clojure experience.

Getting leiningen 2 working with heroku

Heroku is still on 1.7.1 by default. I am building an app and planned to start that with lein2. Had to do quite a bit of research to figure it out. Following are the steps:

heroku labs:enable user_env_compile -a yourapp
heroku config:add BUILDPACK_URL=http://github.com/timewarrior/heroku-buildpack-clojure.git#lein-2
git push heroku master