I've given this a lot of thought over the last few months.
A good programmer has many languages at his fingertips, and he will use whichever is appropriate for the task at hand. But to get to that point, one must learn to think in 'programming', not just in a specific language. "Programming' is the language of problem-solving. "How do I make this work? What process is needed to do this job?" This ability is greatly colored by the first programming language you really learn.
C++ is probably the
worst language to use for an intro to programming. If you don't already have programming knowledge, it can send you screaming back to non-programming.
Java, while easier to learn, doesn't really teach "programming". It teaches how to hook together 'black boxes' to produce a result, but it doesn't teach you what really goes on, what programming is really about. It's a little like HTML in that respect.
BASIC, and its derivatives, can teach you poor habits. Visual Basic has the added problem in that it guides you to thinking that the MS API is the way to solve problems - again a 'black box' approach that has little bearing on real programming.
Pascal was an excellent teaching language. That's what it was designed for. Unfortunately, it has fallen out of favor, partly because it can't be used to write 'real' programs, partly because its 'real' programming superset, Ada, is considered too heavy, and just not as 'sexy' as C/C++.
There's a bunch of other languages out there (Perl, PHP, Ruby, etc.), but most of them are not really acceptable for a first language, even though they may be powerful and good tools in their own right.
Probably the best current first language is Python. It has a fairly simple syntax, yet is quite powerful. As you learn it, you also learn what is going on 'behind the scenes', which can help you when you learn a different language. Understanding what goes on at a lower level also helps in problem solving; you learn what
not to do, and
why.