As long as it's not too late to throw in my comments...
I think that article Doctor Q is pointing out is right.
I learned BASIC when I was 10. I came across my dad's old FutureBASIC books, and since I still had the floppies, I installed it on our Quadra 650. My dad quit learning to programming for some reason. I don't know why he picked it up in the first place either. He has tons of old C programming books on his bookshelf, but it seems like it was all a wasted effort.
Anyhow, I programmed a few simple text-based programs and was excited. So, I wrote some stupid text-based games and demos for fun. The FutureBASIC package came with a very thin book of examples and problems for you to solve. Through those examples, I learned simple things in BASIC.
Anyways, I struggled figuring out BASIC on my own. I wasn't able to move forward from those simple text-based programs. I aimed to make simple games (my goal was to make a Donkey Kong-clone. On the Mac, I have never seen a good Donkey Kong clone!), but I couldn't get graphics to draw or anything. So, I took a hiatus.
Come back to age 14, in high school, taking Computer Science 2 in my freshman year. I skipped CS1 because I was able to prove my computer skills. Anyways, my teacher... Well, he knows his stuff, but does not teach it to us. Our CS2 class was all about Java, when the county's curriculum was for C++. He wanted to teach us Java because it was new and the AP exams were going to be based on Java. He didn't know a lick of Java and was teaching himself at the same time. That did not help our cause because we were the guinea pigs.
Our first Java programs were all done in one class and in the main. What a breeze. It was like going back to the BASIC days... Then, we somehow jumped into OOP. He demanded we split up our programs into two classes. He didn't even tell us how! So, for a week, we struggled with a particular program. Then, he went over some code with us to work with since we had so much trouble (except for one kid, more on him later). He sorta explained the concept of OOP and all that jazz. Still didn't make sense to us.
I took the code home, read over it, and tried to figure it out. I did this for two weeks. A few kids managed to figure out how to do program, luckily. But, for the majority of the class, we didn't know sh*t still. So, came the midterm, I got a C. Two B's for the quarters so I was guaranteed a B for the year. I went back to my code. It still didn't make sense. Then, it finally hit me. All of the class declarations were like declaring variables. You type the class's name, a name for what I think of as a variable, equals, new, class name(). Of course, I later learned about parameters. But anyways, I taught myself that much. I figure out methods easily right after that. I finally had a basic understanding of Java.
After that, I got A's for the next two quarters, I taught my peers, we worked together, and figured out our programs. Programming became a cinch. We figured out we had to demand our teacher to sit with us and keep him still, in order to get help with our programs.
The next year, I took CS3. Aced that class. Most of my classmates from last year failed to join me. Only, I think 6 kids from my class joined me. The rest of the CS3 class was from a different CS2 class that actually learned C++, and learned OOP, and understood programming. Anyhow, I was near the top of my class in CS3. Programming was so easy because it seems like our CS2 class was based on a curriculum for the CS3 AP class. So, when the AP exam came, we were extra prepared. I got a 4. It's good, but most of my class got a 5 (we have so many over-achievers).
I moved up to my current CS4 class. Many more people dropped out of CS. But, now, for some reason, our teacher is a complete jerk. He used to be quite lenient with programs, but now he has really short due dates and makes us do ridiculously hard programs. It's like CS2 all over again. And my grades show it. He's moving to a new school next year, so some of us assume he's disgruntled. He does do more in-class teaching, but he's making us way too prepared for the Computer Science AB exam. And it's just become stressful again.
Oh, that kid I was talking about earlier. Well, he knew his stuff with computers. But, that first day we learned Java, he didn't know how to even type one line of code. We had our simple programs up and running, but this kid did and knew nothing! The screen was blank. I assume he got help from our teacher and learned Java during one afternoon. The next year he was in CS4, not CS3! It doesn't make sense...
Anyways, in summary, it helps to have a teacher that knows what they're doing. I found all books to be useless. I tried teaching myself C++ between my education of BASIC and Java, but books weren't the same as someone teaching you. Even if my teacher wasn't very good, he taught a few simple things that made quite a difference. It also helps to have friends learn with you. In CS2, I had only one friend in that class, but he was just a failure and ended up dropping out. CS3, everybody in the class was my friend. And CS4, I only have three friends with me. It relieves some stress when you code with friends. For Java in particular, java.sun.com is all you need. The forum often has useful examples and the API defines everything you need.
So, I suppose certain people are cut out to be programmers. But, let me say I'm either pursuing something I really shouldn't be (seeing my many failures), or I'm the low-end as far as programmers go (again, seeing my many failures).
Mav451, I'm a little disappointed that University of Maryland (College Park, I assume?) sounds like it doesn't have a good Computer Science department. My teacher always raves about them and things.