If you want a broad range of useful programming skills, then C++ is a
must to learn, along with Java, Ruby, Lisp, Assembler, and D.
If you're going to be effective, you do have to learn several
languages; no one language does it all. But I'm not sure I
would agree with your list: I've seen no real demand for Ruby,
Lisp or D anywhere (although Lisp, at least, is useful, if only
to force you to think in a different way---and of course, if you
use emacs as your editor, you'll need it). On the other hand,
some sort of scripting language is a must, and as horrible as it
might be, you'll probably have to learn make at sometime.
A lot depends on the goals. If the goal is learning, a language
with a radically different idiom would probably be best: if you
already know Java, for example, you'll learn a lot more learning
Scheme or some other functional language that you will learning
C++. If the goal is to practically prepare for what you'll need
professionally, a lot depends on the type of work you want to do
professionally. In my work (server development), for example,
in addition to C++, I need Unix (and its shells)---I probably
get called on for my expertise in sh and awk as often as I do
for C++. Some knowledge of SQL is also expected. And of
course, no matter what you do, you should learn your basic
toolset: editor, etc. (For that matter, if you can't already
touch type, that should be your first priority. When you're
writing code, you want to be thinking about the code, and not
where the characters are on the keyboard.)
And don't forget about the techniques: things like design,
threading, etc. Independent of the language (more or less), but
if you don't know them, you're programs won't work.