in reply to programming language
I think I'll be a heretic myself. For _most people_, I would think, the best way to learn their FIRST programming language is by taking a class. Learning further programming languages can be done from a book with more reasonable efficiency, I think.
In any event, if you ARE going to take programming classes of any sort, I would recommend the following:
If you want to take 1 class, take it in a language which does NOT explicitly support Object Oriented. Perhaps C.
If you are willing to take two classes, add a class in Object Oriented Programming of some flavor, Java or C++ perhaps.
If you are willing to take a third class, add a class in Data structures.
I happen to have taken only 3 CS classes while I was in high-school/undergrad: C Programming, Java Programming, and Data Structures. The only thing I feel I'm missing that I should have taken that would be useful to me now is a class in Algorithms, or specifically in combinatorial optimization.
Your mileage will vary. I do biophysics, and those are the bits of programming which are useful to me and sufficient to allow me to read up on any new programming element or language I need to.