yeah, i think a lot of it is just figuring out yourself. In high school we had a pretty much independant study CS course. The teacher was just a geometry teacher so we got books from another high school in the city, and she just assigned excercises even though she didnt know how to program. So we learned on our own to problem solve. programming is a lot about solving puzzles, like brain teasers. If you like doing those, you are cut out for it. Its really hard to teach how to think like that, and i think that a lot of people wont learn, i mean learning syntax and stuff anyone can do, but the problem solving part is the most important, including how to break down a problem logically and analyze it so that you can handle it. Your real question is "how can i learn to problem solve better?" and i think the only way to do that is to make yourself do really hard problems. I've had a computer since i was 6, so that probably helps to start young. Classes are good since they make you learn, if i had to read a book a lot of the time i can learn it but i'm too lazy to actually go do it. If i take a class, then the fear of failure and pride of beating my classmates at making better programs keeps me going.