I've been a programmer for 8 years. I always recommend that people start learning programming with C. I started out with Pascal, then moved on the C, then Java, then C++, and I picked up Perl, PHP, and Python along the way. For me, I think starting out with C++ would have been overwhelming, and Java doesn't teach you basic memory management fundamentals.
I completely agree about visualization and managing complexity. I find it very difficult on work on a system when I don't have a general "map" of it in my head. To this list of skills, I would also add "patience" and "attention to detail". On a bad day, programming is a PITA. On a good day, it's like doing a puzzle. I like puzzles.
I agree with jsw:
cubist said:Programming calls for two skills IMO, visualization and memory. Visualization means to be able to picture in your mind an abstract thing which is doing things, the program or module. Memory simply means being able to remember thousands of nitnoidal facts - managing complexity, in other words.
I completely agree about visualization and managing complexity. I find it very difficult on work on a system when I don't have a general "map" of it in my head. To this list of skills, I would also add "patience" and "attention to detail". On a bad day, programming is a PITA. On a good day, it's like doing a puzzle. I like puzzles.
I agree with jsw:
jsw said:Ultimately, I think almost anyone can program, especially if they are taught, at least initially, by someone good - just like anyone can learn to talk. But some people are just better at it than others.