I am a professional Java developer, I don't love Scala, but I do find Clojure very interesting, let me tell you why.
My first experience of Scala was back in 2008, I took a university course on the subject. It felt syntactically quite odd, the IDE support was bad and I didn't understand functional programming at all. I still managed to finish the course work by coding Java in Scala.
9 months later I had a course on functional programming in which we used Haskell. It was a bit of an eye opener and I thought I must try Scala out again. Haskell I dismissed as being a bit too academic.
Last spring I had some extra time and I decided to give Scala a new chance. Many of the annoying niggles that I suffered from the last time around were still there. Big API changes between releases, guessing when the compiler/parser requires parenthesis or spaces, IDE support still sucked, odd syntactic constructs that forced you to think really hard what the hell is going on, and compared to something like Haskell it was very verbose. As an example of my last point I'd like to give the map
function signature from Scala.
def map[B, That](f: A => B)(implicit bf: CanBuildFrom[Repr, B, That]): That
I really really tried, but I just didn't feel I was getting my money's worth. I felt, and still do, that Scala is just a better Java. Lots of neat concepts like traits, type inference etc. but the ecosystem around the language is still too fragile. This ruled it out for work usage. The fact that coding Scala didn't feel even close to as much fun as Lua or Ruby basically made it a complete dud from my perspective.
And then we have Clojure. Being a Lisp its code examples such as #(* %1 %2)
makes you think it telling you to go f*** yourself. I dismissed it early on as being not a real world language, too hard, basically the same as Haskell.
This summer for some reason I decided to watch a few video presentations of Clojure by Rich Hickey. I got interested. The language still looked odd, even basic concepts seemed very difficult and confusing, but a lot of things just made sense. The strong focus on immutability was one of them, a very strong focus on Java interoperability was another. Scala is in many ways closer to Java, but does it honestly make coding Java any easier? The most vocal Scala enthusiasts want Java to go '{ :fu "ck" }
itself.
I am still a total Clojure noob. Not coming from a Lisp background I find the language scary powerful. But besides finding a lot of the key concepts very sensible, I also think it is fun, something Scala just wasn't, no matter how hard I wanted it to be.