Is there a programming gene?

My post from last week that asked "Is programming easy to learn?" has generated a bit of discussion both in the comments and offline. I've had some discussions with a number of college computer science faculty recently in face to face meetings where the subject came up. OK I brought it up. But I am really interested in hearing what people who teach programming really think about natural programming ability. 

The thing is that I really want to think that everyone can learn how to program. Others I have talked to think that programming is a gift, a talent, something that one either has the natural ability to learn programming or they don't. One manager I worked for many years ago claimed that he could teach "any monkey" how to program. Perhaps the truth lies somewhere in the middle.

One professor I talked to said that she believes that some people have a natural ability to learn programming. Some people have something in their makeup that makes it almost impossible to learn programming. The great majority, she believes, are teachable and can learn how to program. She may be on to something there.

Some people really do take to programming. One explanation and they "have it." They quickly grasp the most complicated aspects of programming and soar past even their instructors. A natural mental gift? Perhaps. Some people really struggle with the concepts. They may be very smart and knowledgeable (or not) in other areas but somehow they really struggle with the concepts. And then there is the great majority in the middle.

I want to believe that everyone is teachable. I guess it must be the teacher in me. I think that if we just find the right way to explain things people will "get it." If someone doesn't get it I want to ask "what did we do wrong in the teaching?" Of course students have to do their part. You can't make people learn something if they don't want to learn it. Incentive and motivation are something teachers can't always control. Well not as much as we'd like.

On the other hand I have run into more than a few programmers who like the exclusive "I'm special" feeling that they get by believing that programming requires a special talent - an ability that most people don't have and only a few people are gifted with. This is a pretty elitist attitude that brings back memories of the early days when computers lived in closed in raised floor environmentally controlled "temples" and were served by "high priests" of technology whose behavior was uncontrolled and unquestioned. Some people call those the good old days and wish for a return to that era.

I think that the days when the naturally gifted programming elite were enough to get us by are long gone. These days we have to train as many people are possible and help them progress as far as possible. Programming is a lot of fun, it is a great way to make a difference in the world. Working on different and better ways to train the majority of people who can learn is something we really need to do.