An old adage that many programmers stick to is "It takes a certain type of mind to learn programming, and not everyone can do it."
Now I'm sure that we all have our own trove of anecdotal evidence, but has this been studied scientifically?
|
An old adage that many programmers stick to is "It takes a certain type of mind to learn programming, and not everyone can do it." Now I'm sure that we all have our own trove of anecdotal evidence, but has this been studied scientifically? |
|||||||||||||||||||||
We're looking for long answers that provide some explanation and context. Don't just give a one-line answer; explain why your answer is right, ideally with citations. Answers that don't include explanations may be removed. |
|||||||||||||||||||||
|
|||||||||||||||||||||
|
Another study, Investigating the viability of mental models held by novice programmers:
Also, see later research from the same authors of the Sheep vs Goats study (which was never actually published, to be clear). Their last and most recent study on this topic from 2009 is Meta-analysis of the effect of consistency on success in early learning of programming (pdf).
|
|||||||||||||
|
|
Yes, there's a pretty famous paper online designed to more or less determine "Who is cut out to be a programmer." A cognitive study of early learning of programming - Prof Richard Bornat, Dr. Ray Adams
Here's a blog post by Jeff Atwood that interprets the results and puts some things into context.
|
|||||||||||||||||||||
|
|
Anyone can be a programmer. Consider how easily people grasp spreadsheets. Consider how readily Alan Kay introduces children to programming by means of experiment and exploration in a programmable environment. People may study success in college-level courses and conclude "some people aren't fit to learn programming". However, such a conclusion severely oversteps the bounds of the observed evidence. How much failure could instead be attributed to how the programming is taught (too abstract?), or which style of programming is taught (too imperative?), or the programming environment (compilation, no immediate feedback?). It is well understood that people grasp abstractions most readily after they've already worked with multiple concrete instances - i.e. that we cannot learn something until we almost already know it. Starting with the abstract, therefore, is an entirely foolish way to teach programming. Many people who stumble over premisconceived "mental models" would thrive if taught in a more concrete environment with real-time feedback (e.g. as in the Kahn Academy for CS) then encouraged to climb the ladder of abstraction when they are ready for it. Learnable Programming is a recent essay by Bret Victor draws attention to unnecessary environmental challenges programmers face in learning. In some cases, it is the students that fail their classes. Intellectual laziness and willful ignorance will exist in any large group of humans. Smart folk are no exception, as anyone who has argued with a brilliant crank can attest. But, especially for programming and maths, it is often the classes that are failing the students. |
|||||||||||||||||||||
|
|
Maybe this is anecdotal, but when I taught intro programming to a few hundred liberal arts students, I found no such "double hump". It seemed to me they were all quite capable, though some worked harder than others, and a very few tried to bluff their way through. A lot has to do with how it is taught. A lot also has to do with desire - some don't find programming the least bit interesting. But even so, they can learn it if they give it an honest effort. |
|||||||||||||||||||||
|
|
When I started out it was common to sit an "aptitude test" before you got a programming job. There were not so many computer science graduates, so it was common to recruit from other disciplines. The tests were similar to what you see on IQ tests (what's the next number in the sequence, etc.). The anecdotal evidence was that while not everyone who passed the test became a good programmer, no one who failed the test but was hired for other reasons ever became a good programmer. Sadly HR drones did not understand these tests (and failed when they took them!), so recruitment these days depends on things HR drones understand -- good college, communication and suit wearing skills. This is pretty much the reason large IT departments have lots of people who are great at PowerPoint shows and very few good programmers. |
|||||
|
|
One can make studies about abstraction capacities, or other useful knowledge, but the definition of programming is unclear, and I think the quote is irrelevant, because there are opposite ways to look at programming: The first kind: Programming languages are (or should be) some kind of human language made to describe a task for the computer to execute, so everyone who talks should be able to program. It's called scripting, BASIC, the typesetting system TeX, etc... The language or the system doesn't matter, it's the way their creators and people looked at it: "Dear program/computer, please print my name", rather than "Get me space the size of eleven chars, then give me the adress of this space, then let me store it, then enter eleven characters into this memory which you can take out of my keyboard buffer (but don't forget to clean it, etc." In this case it's clear that the study would rather be "Not every language can be assimilated quickly?". On the other hand, programming languages are just a way to describe how a computer works or how it should work, how it should be 'connected' if you think of 1950s computers. Therefore the programmer can't do anything, even if he 'speaks' the programming language perfectly, if his/her intelligence can't reach this abstraction level where you see bytes beeing stored in memory, strings as pointers, etc., and then go back to earth to link it to the problem. Therefore not every human can program (in assembly language...). Apart from this, you will need all qualities required to work and produce something: know very well what you want, make it easy for others to understand/complete/review, focus on your objectives, etc... But just like an architect, a writer, a musician, a prostit..aehh prothesist, etc. But most humans have good abstractions capacities, especially children. Some German schools are teaching Haskell to pre-teens (programming languages like Pascal or Delphi are beeing taught in every German school). So I would say the question is very hard to answer, and any answer (or study) is likely to be irrelevant. You will find a very brief analysis of how people learn programming in the article Teach Yourself Programming in Ten Years by Peter Norvig. He seems to think there is no born programmer. |
|||||||||||||||||
|
|
To those citing Dehnadi and Bornat's double-hump or goats-vs-sheep study, it's worthwhile to check out Mental Models and Programming Aptitude by Caspersen et al (2007) in which they attempt to replicate it:
|
|||
|
|
|
Many years ago I did several courses that included military leadership theory. Part of the theory was that there exists a leadership continuum, from those who are natural leaders to those who couldn't lead a dog on a leash. The idea was that people were distributed on this leadership continuum in a bell curve, with most people being somewhere between the two extremes. Apart from the few at the far extreme "couldn't lead a dog" end almost everyone could be taught the art of leadership. The amount of effort required to turn someone into a leader depended on where they sat on the continuum. I suspect programming has a similar continuum and a similar distribution. There'll be those that just get it effortlessly, and those that could never get it if their lives depended on it. But they're the few at the tail of the bell curve. Most people sit between those extremes on the continuum. They can learn to program but the effort required to teach them will depend on where on the continuum they sit. |
|||
|
|
|
I'm not sure it's just programming. I saw the same sort of phenomenon with people simply learning to use computers. Back in college I was a lab assistant in a lab that hosted a computer literacy for seniors class. Within two weeks I could identify those who would get it and those who wouldn't with basically 100% accuracy. You either accepted that this is the way the computer works or you beat your head against it for the whole class. There was no middle ground. (The fact that it was a seniors class meant we had a lot of head-beaters which made the pattern much more obvious.) |
|||
|
|
Thank you for your interest in this question.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).
Would you like to answer one of these unanswered questions instead?