In a forum I'm on, someone asked what to study to be a programmer. Here's what I replied in a sort of off-the-cuff manner, but I should like some feedback into forming a better reply for future use.
From a practical "I want a job in programming" sense:
briefly cover assembly language, and then learn C. not because you'll get a job programming in it, but because the best programmers of other languages understand the Heart of the machine.
then learn Java and/or C#, because those are where the jobs lie. if you like, you can read some chapters on how C++ is related to Java and C#, but that's an afterthought, unless you want to develop in C++ (which means almost exclusively game programming these days) - but you won't understand C++ without knowing C thoroughly and knowing the OO principles learned in studying one of the other two languages.
then go back and learn Lisp, because there's so much theory of programming to be learned from understandng The Lisp Way.
next, study some SQL. It's not really a "programming" language (unless you write a lot of stored procedures), but knowing how databases work is important to real development. Similarly, at least in today's environment, some knowledge of XML parsing is handy to pick up, even though it isn't real programming.
learn to use well the *n*x command-line utilities "find" and "grep" (and several others those imply such as xargs and cut). Even if you're going to be a Windows programmer, learning about how operating and file systems are practically used by users will leverage well for many tasks.
Finally, if you have time, study a little Prolog. Just to break your brain. But it will also help you read Makefiles better.
If you've got a basic understanding of assembly language; a thorough understanding of C, plus one of Java or C# or C++; an acquaintance with
I have interviewed many people who knew Java Very Well, but had no f-ing clue how anything else worked, and frankly, such people were useless to me. I work daily with both low and high levels of the system. While I'm never called upon to use any assembly language knowledge, all the rest comes up at least once a week. And the assembly language knowledge still informs some decisions here and there.
(And I mostly program in Perl. but Perl is just a mishmash of C, C++, shell, and Lisp (Lisp may seem counter intuitive to list here, but the best use of Perl's dynamic arrays and the "map" and "grep" operators comes from a good Lisp background)).
you may not like this answer, but based on practical field experience, it takes years to even be a vaguely useful programmer. and time spent on visual basic doesn't count towards those years.