I started college as a computer science student. I switched to the college of engineering because I knew "electrical engineers make all the money." One of the professors (actually, I think he was a department head) tried to convince me to stay in computers or "at least take one more class" to which I declined and he said, "you’ll be back." True to his word I returned, battered and bruised with a diminished gpa, to the college of liberal arts to study computer science. I asked why out of 500 students he tried to encourage me in such a way. He simply said, "you have a knack for computers." That remains on of the biggest compliments I have received.
I read more frequently articles that reference programmers and non-programmers. I read one that documented my case claiming that early in an intro to computer science course you can separate which students will succeed as programmers and the ones that will never understand.
But the dirty little secret of the software development industry is that this is also true even for people who can program: there’s a vast divide between good developers and mediocre developers. A mediocre developer can program his or her heart out for four years, but that won’t magically transform them into a good developer. And the good developers always seem to have a natural knack for the stuff from the very beginning. [Source]
I don’t have the ego to say I am a great programmer but my work frequently has me altering code done by lesser programmers and, although the teacher in me wants to reach out to them, I have to wonder if they wouldn’t be better served by a career change.