My recommendation: learn something cool like Python or Ruby. They're nice, but it really doesn't matter what languages you learn as long as you don't get stuck in one mode of thinking or get over-comitted to something really crappy. If you do any significant amount of programming, you'll eventually be picking up C/C++ eventually anyway, so no rush there. Java is bloated and annoying, but passable and was the beneficiary of some really outsanding marketing, so there'll probably always be jobs in that (I imagine the hype will wear off when the next hot thing comes along though - probably C# for a while, then something else).
I'll just rant about programming languages in general and hope nobody notices...My first language was BASICA then Apple II basic and I eventually learned how to write quality procedural code in Pascal and C (with no GOTOs). Then there's more GOTO stuff in x86 assembly (and a little Apple II and 680x0 asm too). Then I think there was some stuff with Visual Basic which I've repressed. Later, there was object oriented stuff in C++ and Java and functional code in Scheme. Then more GOTO stuff in Fortran and COBOL (again, repressing.) Then there was Perl and PHP and Cold Fusion (yes, pity me), and Tcl and all these lovely scripty things playing host to SQL queries. Nowadays it's Python (ooooh... sweet... delicious Python...) and I just do What Works Best for the job at hand.
Imperitive, procedural, functional, logical, object oriented, aspect oriented... Bah, whatever. I don't think it matters as much as people think. I suppose if you really want to learn a new paradigm properly, it's probably best to go about it from the point of view of "learning to program again for the first time". But it's actually not that hard. Most concepts carry over to all paradigms (boolean logic, variables, assignment, collections of data, etc.) Class/object methods are really just glorified functions/procedures. Query/logical languages are definately a hard switch (most people write profoundly terrible SQL and design horrifying database schemas), but the others aren't.
The fundamental difference between every programming paradigm is the way the language hides the GOTOs from the programmer. That's about it.
QUOTE(rohangc)
Gabriel, I spent 2 years teaching myself C so that I could learn C++ properly one day. Is there no hope for me? Can I never write proper C++ code?
Nah, don't worry about it. Well, you might never write proper OO C++ code, but you'll be able to blame it on the fact C++ sucks. C++ is to OO as VB is to dynamic typing. Crummy examples of their breed.
QUOTE(tangent)
I agree that algoritimns is more important, and the language doesn't really matter. A good programmer should be able to handle any new language really quickly.
Agreed, but I see algorithms becoming less significant. Most people don't have a need to learn how to write a quicksort or a hash table, because those things are built into modern very-high-level-languages. More complex things (i.e. data compression) are usually used via some popular library. Most commonly used time-consuming algorithms are "solved problems." Sure, somebody's gotta write the languages and libraries, but most code these days seems to be devoted to two primary tasks:
1. Interacting with users
2. Moving data around
VHLLs are great at #2, especially query languages like SQL which are devoted entirely to that task. No languages are very good at #1, but some are useable (the one thing VB works decently for). It seems like there should be three things... Oh yeah,
these three. Anyhow, I see the future of software development moving towards having those two or three layers which will be almost completely separate from each other and written by different people in very different languages.