A CS student here. My school is teaching only Java, and I figured I should pick up another language on my own. What would you say is the best programming language to learn right now in this market?
One of each kind, doesn't matter what it's called.
If you understand the concept of a language, you can learn a new syntax in a couple of weeks; i.e. if you already know Perl and Python, learning Ruby probably won't really expand your expertise even if Ruby devs might be the most sought after and highest paid (just, an example, I have no idea who actually is paid the most). Now if you'd instead learn Lisp, you can add 'functional programming' to your list of skills. It will make picking up Haskell much easier. Not that you'd need either of the two in real life (probably) but you now have a better understanding of programming as a whole and more skills to advertise.
If I were in charge of hiring, I'd be looking for a 'Web developer' not a Django or a Ruby-on-Rails dev. It's easier to teach a new framework than a concept.
So here is a list of things which I would suggest you are able to cover:
- something that is fast to write
- something that is fast to execute
- something for databases
- something that can be read by a shell
- something functional
- something for desktop GUIs
- something for the internet
- something that can render nice images or games
- something for microcontrollers
- something to create mobile apps
- something describing hardware
- something to show off to the nerds like brainfuck-2D ;)
This list is highly subjective, off the top of my head, and by no means complete (but a good starting point). However, there are a lot of people who get by perfectly fine with only one language. Also one language can cover more than one of the points of that list. If you really want, you can do all you shell-scripting with CSS.
But if your interest is more towards a complete understanding of computer science and, in particular, a deep understanding of languages, then you may want a language that is specifically quite different from what you already know. A member of the LISP family would be a good choice because it uses a different paradigm requiring different thought patterns. You can save niche languages for later (brainfuck). C is also quite different from Java, though the low level syntax is similar. But, it, too, requires a different way of thinking about how you conceptualize the solution of a complex problem. For this purpose, both Python and Ruby are a bit too close to Java to stretch your mental models sufficiently and you are likely to program either just like you would program Java. You can't do that with C or any LISP variant.
So, the requirements for the job market and for a deep education are quite different.
Any undergraduate program in CS is likely to require you to learn an assembly language at some point. A big step would be to teach yourself MIX from The Art of Computer Programming by Knuth. It is a fairly generalized assembly language that has simulators available.
My school is teaching only Java, and I figured I should pick up another language on my own.
What would you say is the best programming language to learn right now in this market?
That said, it does not matter. Any second language you learn will help your understanding and market value, and what is most sought-after now may not be so hot anymore when you graduate. What you should mostly be looking for at this point of your career is to broaden your horizon. If you already know Java, then learning C# is quick but also sort of useless, since you will mostly find similar concepts used via a similar syntax. What you should be looking for instead are languages that teach you something new - functional programming, logic-oriented programming, or programming close to the hardware are probably the highest-gain ones (for a more complete list see Max' answer). Which of those is "most important" again depends on where you see yourself going in your career.