Learn Java first before learning other JVM languages: one of their strengths is interoperability with Java libraries.
If you want to learn functional programming _for its own sake_, learn Scheme (Little Schemer, SICP, Seasoned Schemer) , ML (either OCaml or SML would do), and optionally Haskell.
Common Lisp is worth learning, but majority of Common Lisp code is not very functional: idiomatic Common Lisp code readily takes advantage of cons cell mutability and uses do/loop macros; macros and CLOS are the salient feature of Common Lisp that are worth knowing about.
I'm looking to expand my knowledge range and open a few more doors to different areas. I currently am fairly proficient with python, php, mysql, dhtml. Java seemed like a natural progression especially since I'm interested in mobile phone development, but I'm also interested in the strengths of the JVM and Java's libraries.
If you're getting into mobile phone development (likely Android), then you should start with Java. I think some people have managed to compile/run clojure to run on Android, but there are still some performance hurdles that will need to be overcome (true for dynamic languages running on Dalvik) before it becomes a viable language for mobile.
If you want to learn for the sake of expanding your knowledge range, Java is a pretty bad choice; there's very little that's novel about Java. The two advantages it has over Clojure right now are are 0) it's much easier to find employment in and 1) Clojure isn't yet suitable for Android development.
I used Clojure and now I'm using a little bit of Java (and reading Effective Java) and I'm pretty glad I'm doing so: interfaces, generics, concurrency, data structures, mutable vs immutable objects, etc etc: most I just ignored when programming Clojure... and they are interesting to know IMO.
(I intend to return to Clojure/Python on the next project because Java really makes CRUD style web programming a PITA).
Comments
To someone who is about to learn Java, would you recommend Clojure instead?
Learn Java first before learning other JVM languages: one of their strengths is interoperability with Java libraries.
If you want to learn functional programming _for its own sake_, learn Scheme (Little Schemer, SICP, Seasoned Schemer) , ML (either OCaml or SML would do), and optionally Haskell.
Common Lisp is worth learning, but majority of Common Lisp code is not very functional: idiomatic Common Lisp code readily takes advantage of cons cell mutability and uses do/loop macros; macros and CLOS are the salient feature of Common Lisp that are worth knowing about.
Totally depends on why you want to learn Java.
I'm looking to expand my knowledge range and open a few more doors to different areas. I currently am fairly proficient with python, php, mysql, dhtml. Java seemed like a natural progression especially since I'm interested in mobile phone development, but I'm also interested in the strengths of the JVM and Java's libraries.
If you're getting into mobile phone development (likely Android), then you should start with Java. I think some people have managed to compile/run clojure to run on Android, but there are still some performance hurdles that will need to be overcome (true for dynamic languages running on Dalvik) before it becomes a viable language for mobile.
If you want to learn for the sake of expanding your knowledge range, Java is a pretty bad choice; there's very little that's novel about Java. The two advantages it has over Clojure right now are are 0) it's much easier to find employment in and 1) Clojure isn't yet suitable for Android development.
I used Clojure and now I'm using a little bit of Java (and reading Effective Java) and I'm pretty glad I'm doing so: interfaces, generics, concurrency, data structures, mutable vs immutable objects, etc etc: most I just ignored when programming Clojure... and they are interesting to know IMO.
(I intend to return to Clojure/Python on the next project because Java really makes CRUD style web programming a PITA).