Well, I learned VBasic when I was very young (around 12 I think), then I kept going at it. Along the way, I learned Assembly,C,C++ and Java (in college). I use Java at work so I had to learn many different things about the language that you don't get to learn in a java class in collegel. Once I took AI and Compiler Design in college I started learning new and more powerful languages. The past few years I have been learning functional languages for fun. CLISP, Python, Ruby, Haskell, Ocaml and Erlang. I am decent at CLISP, Ruby and Python now, but Haskell, Ocaml and Erlang can be challenging to learn. In order to really be good though, you need to practice what you have learned in college. Get an internship, work on an open source project, try out for the google summer of coding,etc. There are a million of things you can do.
Although GPA is important, I consider that the difficulty of your classes is more important if you really want to learn. AI kicked my ass, but I learned a lot. You can also be a computer science major, and, hopefully, your department would make you take those hard (and important) classes as a requirement for graduation.
Edit: Also, you need to love coding to be good at it - that means, spending 12 hours straight coding for a project, or 10 hours debugging Assembly code(like they used to do it back in the old days.