tags:

views:

270

answers:

11

What is best language to learn next to Java?

Criteria for this secondary language are:

  1. High potential of being the "next big thing". e.g. If the market for Java open positions hypothetically dies/dwindles, what is the next programming language that will have a bigger market for open positions? Another way to frame this question is: If I own a small company that implements solutions in Java, what is the other language that I should use?

  2. Can produce web applications.

  3. Can produce desktop applications.

  4. Easy and fun to learn.

  5. Wide range of available libraries and frameworks (free or open source) that enhance and speed up your solutions.

+3  A: 

How about Scala or JavaScript? Functional paradigms will stretch your thinking further and will be of benefit whether they are "the next big thing", or not.

Software Monkey
+4  A: 

Python almost meets all of them, but I don't know about being "the next big thing", but hey, Google uses it, and I think its popularity is raising.

It's a scripting language, btw.

I use it for web applications (using django), and you can definitely create desktop applications with it (although I haven't done that myself).

It is easy and fun! (although this is quite subjective, but it's tons easier and "funner" than Java)

hasen j
While "easy and fun" is indeed subjective, this opinion of Python seems to be very widely accepted.
Joachim Sauer
+3  A: 

For employability: Any of the .Net languages, probably C#. Then you're well set for most potential customers.

For stretching yourself: something functional (F# to cover .Net too?), or something Lisp, or Smalltalk - was once the next big thing but it probably never will be again, but still a language that changed signficantly my approach to programming in other languages.

Paul
In better times I'd go with specialisation but I think this is an extremely strong answer right now - if you know Java and C# you're going to be able to work at 95% of webshops.
annakata
A: 

If you don't have any religious issues with Microsoft, I would argue for C#. The only downside I can see is that it's not cross-platform. Otherwise it fits your requirements as far as I can see

Charlie boy
I'd say C# is somewhat cross-platform if you use Mono.
Joachim Sauer
And I would agree.
Adeel Ansari
A: 

Your criteria fairly closely matches Python and Ruby, they both have a growing market base in Web development, and are fully capable of producing desktop applications as well. Whilst they are fairly closely matched, Python has a slightly larger library of re-usable code modules, whilst Ruby's strength leans more to it's well-established frameworks.

As a side-note, You should ensure that you don't stop at 2 languages. Start learning a second one, then pick up a third and even fourth as you progress. Learning new programming languages becomes a more trivial task as the general learning curve evens out.

seanhodges
+4  A: 

If you are expert in java, you will probably really enjoy groovy.

It is backwards compatible with java and has a lot of the nice features of ruby and similar dynamic languages. It also has what is shaping up to be a nice rails-a-like in grails, and a good object-relational mapping framework in GORM.

What is really nice about it is you can mix and match groovy classes and java classes. So if you find yourself forgetting the groovy syntax, you can just drop into Java. And of course you can get at any Java library from it. At the same time you can benefit from groovy's really concise idioms for things like Beans properties.

(By the way it meets all your criteria listed above, too)

frankodwyer
+4  A: 

Learn a language that will probably not be the Next Big Thing™. Learning a new language usually means learning new concepts (unless you learn one that's very similar to another one you already know).

Learning new concepts has great advantages, no matter which language you program in, so it's a pretty good thing to do.

If you limit yourself to a language that's going to be the Next Big Thing™, then chances are that you'll find a lot of familiar concepts and only relatively few new ones (the IT world is conservative like that).

Learn something that looks interesting to you. Not only will you be able to learn faster, if it's interesting, but you'll also have more fun doing so!

Joachim Sauer
+3  A: 

Go for a different paradigm : functionnal, lisp, haskell, ocaml, erlang, scala, etc.

Gilles
A: 

I must second Gilles here; to learn a different paradigm is very rewarding, and functional programming is [not unlikely to be] the Next Thing.
Erlang is great both in flexibility, ease of use (once you grasp the basic ideas) and - the best of all - it it very well suited for the high parallelism of future and current hardware. It also covers all your five criteria, though it might be more of a "server" language than a "desktop" language.

If you are interested, I suggest the book Programming Erlang by Joe Armstrong.

E Dominique
A: 

Personally, I'd go with Ruby and focus on running your Ruby scripts under JRuby. this way you get the expressiveness of Ruby with the JVM running your code. I've seen Rails and Merb running under Glassfish. Might seem odd, but you get all the nice instrumentation of Glassfish with your Ruby code. Things like JMX, RMI, etc. work well with JRuby.

Justin Rudd
A: 

Squeak by Example

Adrian