If you're just starting off, C (or something equivalent to C like Pascal) is the way to go. If you can understand pointers and memory management then you're better then many so-called programmers.
After C, you should then learn an objected-oriented language (Java's a good choice, but you could try C++ if you're insane) and a functional language like Scheme or Clojure. A logical language like Prolog may also come in handy.
Once you have C, Java, Scheme and Prolog, you're pretty close to unstoppable and picking up anything new is just a matter of learning some syntax, libraries and a few gotchas for each language.
A lot of people will tell you "all of them", and it's true that every language you learn will (probably) teach you something about computing. But that ignores opportunity cost: learning your tenth programming language will probably teach you less than learning a new problem domain and a new set of algorithms.
There's so many different things you can purse with programming skills so the advice you get will be very diversified too. In the end it's all about reaching your goal, so identify that and look at how you can get there.
The definition of "learning" a language varies a lot too. I'd rather focus on particular functional areas. Generic knowledge of languages won't get you too far unless you want to be a teacher.
I've done this and that in many languages but if somebody asks me which I know I never know what to answer. I tend to say I know none and that I just know a little about programming.
Actually I don't find it that much different from learning spoken languages. When I know what I want to express/understand I find it very very easy to learn quickly. When I am in the "let's look for some new stuff I don't know mode" I tend to learn very little.
I guess I don't really set out to learn, I just sort of gather experience
Edit: What I'm trying to say is that I don't see much value in planning out what you're going to learn as those sort of plans almost never work out. Instead, just try stuff and see what you like; what you have an affinity for. As you gain experience in one area you'll find yourself branching out naturally. Let your curiosity and enjoyment guide you. The languages you derive the most joy from are those where you'll be most productive
The OP question is something I would've obsessed over when I was in my teens, wanted to start programming, but spent more time planning my eventual entry into programming.
Once I started programming and making real applications, I became really confident in my ability to pick up any other language as needed. I totally agree that learning new languages are part of a natural progression that's hard to avoid if you're truly enjoying your craft in whatever aspect of the territory interests you.
IMHO, these are the ones you should know and they cover most of the scenario.
1. A desktop programming language, compiled and robust like C.
2. A regex wizard like Perl.
3. A strong web based scripting language like Javascript.
4. An interpreted and readable language like Python.
If you like to fire up your own codes from time to time, these are the ones you should know. Though, if you are into specific development fields, this list does not matter. You have to learn something specific in that case.For every task, there are multiple programming languages suited for the task. You can get away with knowing one language (ie C) to do everything, but it's a pain for all but the most simple stuff.
Python and perl are nice languages in that they can do most things that you would use a compiled language for, and most things that you would use a higher level scripting language for.
Of course, I've only been programming for 4 years, so feel free to reach for the salt :)
* Python, Ruby, Javascript
* C#, Java
* Haskell, Ocaml, F#
* Forth, PostScript, Factor
* Lisp, Scheme, Dylan, Pliant
* C++
* C, Assembly
You'll need one of each, although you can do very well with just C + Python.