Several good ideas in this thread.
You're still at school
You should learn more languages, but don't focus on job offers. Learning Java will make you good at being a Java programmers. There are other languages that will teach you how to be a good programmer, in any language.
You're still at school means you still have the luxury of time to learn these languages. Once you start working, finding this time is going to be difficult (albeit not impossible).
PHP or C# (and yes, FORTRAN, but please don't do this) are excellent examples of languages you should learn according to current job offers. But given you already know Java, they're not going to teach you much in terms of programming features.
Don't think in terms of languages
You should think in terms of
concepts. What are you interested in? Although all (not really) languages are equivalent in terms of computing power (anything you can do in one, you can do in the other), try to pick a language based on your interst.
Certain languages are more suited for the web, other languages will teach you a lot about how computers work, while others can teach you a ton about algorithms. It all depends on what you're interested in.
Finally, try to be as language-independent as you can. I always do my best to avoid being labeled as a "Python programmer". I'm a programmer, I just happen to know Python better than other languages.
My suggestions
- C: Learn C (not C++) if you're interested in understanding how your computer works, or if you want to manipulate hardware and robots. To learn it, get this book. Period. Keep in mind that C is more tedious than what you know in Java. Doing anything will take a lot of efforts (at first) but it will give you a great sense of accomplishment when you succeed.
- Scheme: Scheme is a minimal language that will teach you, among other things, how to build programming languages. If you want to understand advanced concepts of progarmming this is for you. This is the book you want to get. There's a common saying that you should learn Lisp/Scheme because it will make you a better programmer even if you never end up using it professionally in your life.
- JavaScript: JavaScript is not a toy language. It packs several features that will seem unintuitive to you coming from Java. It will force you to bend your mind in ways you're not used to, and it will introduce you to the wonderful world of the Web.
- Python: Python is amazing. It's a language that is very easy to pick up, very powerful, beginner-and-expert-friendly alike. It will make you highly productive, it has a lot of great tools available, have production-ready libs for anything you can imagine.
- Ruby: It's only fair to mention Ruby. It's very similar to Python and shares many of its benefits. It doesn't matter if you pick Ruby or Python, just pick at least one of them.
Don't learn C++
Disclaimer: I hate C++.
Trying to be objective, I feel C++ is not made for beginners. It packs such complex concepts at all time, you're probably better off not touching it for the next few years. After you've played with several languages, give C++ a try. Maybe you'll like it. Some great programmers have built their whole carreers around this one language. You might be one of them.
If you want to maximize the benefits you take from C++, wait till you
become a better programmer. After all, C++ is notoriously "expert-friendly".
Other things
While these aren't exactly programming languages, these things will make you a better programmer:
- Learn Unix: Get your hands on a Linux distro and start playing with it. Now.
- Use a good editor: A text editor is a programmer's best friend. You should learn to use a powerful one. The classics are vi or emacs. Pick one.
- Master English: Rolf is spot on! Mastery of English will make you a better programmer. Our job is about communication. Keep this in mind.
EWD once wrote:
Besides a mathematical inclination, an exceptionally good mastery of one's native tongue is the most vital asset of a competent programmer.