Alvin Watkins wrote:If you know Java, why would you learn a language like Clojure? If you were wanting to expand your skills, would you learn something like Clojure or would you focus on some other language?
With Java / Flex as your primary development technologies, you're steeped in OO which is certainly the mainstream paradigm these days (and has been for most of the last two decades). Knowing more than one paradigm is useful, however, since it lets you examine a problem from several different points of view. I highly recommend Bruce Tate's "Seven Languages in Seven Weeks" which takes you on a whirlwind tour of Ruby, Io, Prolog, Scala, Clojure, Erlang and Haskell. Tate introduces each language as a character (e.g., Prolog is described as Dustin Hoffman's Rain Man) and teaches you just enough to show you why each language is unique and what it can teach you about problem solving and just thinking differently. You'll notice there's a heavy emphasis on languages with a function programming aspect.
So, why would you learn a language like Clojure? For the leverage that knowing a functional programming style can bring you.
I'm a long time OO developer: I started with C++ in '92 and picked up Java in '97. I'm working a lot with Clojure right now. Immutable data means easy concurrency and the pure functional nature means small, easily testable, highly reusable components. The Java interop is excellent - in fact I just blogged about writing a custom appender for log4j and the code was just a few lines. That's the other nice benefit of functional languages: they tend to produce much more concise code because of the much higher level of expressiveness. I'm seeing about a 10x reduction in code between Clojure and Java in general.
What about other languages that could offer similar benefits? If you're working on the JVM and need Java interop, your only other real choice is Scala in my opinion (there are certainly other great languages that you'd learn a lot from - but let's focus on functional programming on the JVM). I like Scala and took a project to production with it last year. Whilst I feel more productive in Scala than Java - due to type inference as well as the functional style - I find I'm still more productive in a dynamically typed language that I can treat like a scripting language, hence my choice of Clojure.
Try Tate's book - see what resonates with you. Even if you don't pick up any of those languages for projects, just reading the book (and doing the exercises - very important!) will teach you enough new things to improve the way you approach problems in Java.