Are programmers born or made?

I’ve touched on this topic before, but I’m curious about whether great programmers are born (ie, their brains are hardwired for programming) or made (anyone can learn). Today, I read a research paper called ‘The camel has two humps’ (PDF), by Saeed Dehnadi and Richard Bornat at Middlesex University. The paper’s a few years old now and is labelled as a draft with a working title, but I can’t find any later version. The data in it does appear to be complete, though, and it’s well worth a read.

The researchers set students simple questions about programming to try to work out what kind of mental model they used when shown unfamiliar programming problems. The conclusion of the research is that the good programmers turned out to be those who had a consistent mental model and were able to ascribe consistent meaning to the code they saw. Those who used inconsistent mental models found it much harder to learn to program. The difference is marked: 52% of course participants failed, but out of those with a consistent mental model, only 22% failed. The study was conducted among groups of students on the same introductory programming courses, so it’s reasonable to assume that a key factor for success is whether or not the students were able to think in a programming-friendly way, and maintain consistent mental models.

The paper identifies three main semantic hurdles that trip up new programmers: assignment and sequence, recursion and iteration, and concurrency. Of course, few programmers reach the concurrency hurdle, but it’s surprising how many are tripped up by the concept of assignment. The paper suggests that teachers have long accepted that there will always be students who just can’t understand programming, no matter how they are taught.

What do you think? Can anyone learn to program, or do you need a particular aptitude?

4 Responses

  1. I think probably anyone can learn — although I’m sure those with a greater natural aptitude are more likely to succeed. Still, I think it’s good to start young, so you have plenty of time to get into the “programming mindset”. Things like the Raspberry Pi should help with that somewhat.

  2. From me personal experience I belive that you need some kind of talent and passion to become a programmer. You got to feel it and actually like to write code. I tried couple times to learn PHP, and I failed miserably. I guess I lacked motivation and self discipline but I also felt like I lack skills and knowledge :/.

  3. Thanks for your comments. I think there probably are some people who are better suited to programming and find it easy to slip into that coding mindset, but I think most people can apply themselves and pick it up if they try. There’s a gap between people who are really talented and can really innovate, and those who can apply themselves and learn the basic skills. It’s a bit like music: anyone can strum a guitar, but not everyone can be Prince.

  4. I still remembered how I learned OO (Object Oriented)
    I’ve read some basic concept about OO from book.
    And played with Flash & ActionScript.
    I can only write simple logic function to let the sharp move.
    I understood OO just after I read someone’s code.
    “Oh, This is OO!” I said, then I got it.
    The Chinese character, 悟 (read Wu), means understand by heart.
    I agree with Kostka: “you need some kind of talent and passion to become a (good) programmer”

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: