Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Is it true that "not everyone can be a programmer"? (arstechnica.com)
22 points by vilgax on Sept 16, 2012 | hide | past | favorite | 55 comments


If the people like Atwood who argue that some people just can't learn programming are to be taken seriously, then by the same argument and same types of evidence, there are some people who can't learn science, or math, or reading, or how to speak or write. Because what the evidence is showing is that some people have difficulties learning some topics or take longer to learn them, and in many cases have misconceptions that make it more difficult to teach the topic to them effectively. And the evidence shows that traditionally taught courses (lecture/memorization based - taught by people not trained in more effective teaching methods like active learning) often do not significantly impact conceptual change of such students.

The Bornat & Dehnadi Goats & Sheep paper is interesting in showing that we can diagnose students who have significant misconceptions or lack of knowledge needed to learn programming (see similar research on concept inventories showing the same thing in a wealth of other subject areas). Beyond that the strongest interpretation would be that students with misconceptions are less likely to succeed in traditionally taught CS courses. Not that such students can NEVER learn the topic and NEVER be a programmer. I wasn't surprised to see their research wasn't published (although it is so easy to get such research published - especially when the peer reviewers aren't trained in educational research and learning theory, either). But a line like this would never stand up to peer review by people who are even remotely familiar with research in computer science education: "change the language, change the application area, use an IDE and work on motivation. None of it works, and the double hump persists." There are decades of studies showing various strategies that DO help more students learn and better understand programming and computer science concepts. Just because Atwood and others are unfamiliar and ignorant of such research doesn't make their opinions more right.


> Beyond that the strongest interpretation would be that students with misconceptions are less likely to succeed in traditionally taught CS courses

You don't even have to go that far. When I tutored people in programming (years ago at university I tutored fellow business studies students for 2 years), I found that if I could identify their misconceptions and work through the misconceptions with them that they could indeed resolve their challenges with programming.

At best all these papers can say is that these people were unable to build an adequate mental model of programming by themselves (yes they presumably had access to tutors but that doesn't mean the tutors were sufficiently skilled, or that they used the tutors). There is nothing to suggest that spending some time working on their misconceptions with them couldn't have changed that result.


> If the people like Atwood who argue that some people just can't learn programming are to be taken seriously, then by the same argument and same types of evidence, there are some people who can't learn science, or math, or reading, or how to speak or write.

The fact that there exists some Person who cannot learn X, an element of learn-able things, does not imply that for all X_i in the set of learn-able things there exists some Person who cannot learn X_i.

I agree it's easy to give up on people who just need to see from another perspective to "get it". But I'll donate $20 to a charity of your choice if you can find me someone with a measured IQ of <= 80 who's also a decent programmer. ($10 for <= 90.)


Let's operationalize programming, of course. I will take your bet that I can teach someone at IQ 85 how to do hello world, and I can probably bring them through for loops and basic flow. I don't know about them being able to solve real problems, though.


Ah, that's a different bet than what I had in mind. I don't want to take that one. Though I'm curious to know what test you're going to apply to make sure they know what you intend to teach. If it's just a prompt "write hello world", I bet someone could teach a chimpanzee (or, if he was still alive, Alex the parrot) to do that on prompting and it doesn't seem very remarkable. (Now solving FizzBuzz when prompted, without them having ever seen the complete solution before, would be remarkable.)

My bet is finding a "decent programmer" with such an IQ, whether you teach someone with such an IQ to be a decent programmer or find one at some company doesn't matter, so long as they're decent. I'll charitably define a "decent programmer" as one who in principle could get hired (or has been hired) at any company doing programming and related tasks and not get (or have been) fired for incompetence at programming. So solving "real problems" is kind of a requirement, which I'll cop-out and define them as "problems the manager asks to be solved". They shouldn't be complicated but the most mediocre of currently employed junior or intern programmers across the world should be able to accomplish them. Also charitably, gluing code blocks written by other people shall count as programming and solving a real problem. I think there's someone out there with an IQ of 97 doing such a job, but 85? I really need to see it to believe it...


How would you explain the double-hump distribution of grades then?


I don't know if I agree about "never being able to learn programming," maybe with the right intense tutoring those people could.

But double-humping is easy to explain: some people embrace the mindset and problem solving approach of programming naturally, or with minor counsel; while some people simply approach their programming assignments as a bunch of solutions they have to memorize so they can replicate them on the exam. It's quite similar to the approach I've seen most engineering students take to Calculus and Physics when I was doing Engineering.

Obviously, wanting and liking to learn programming also plays a major role here, and I'd say that even within computer-related degrees many people end up avoiding programming courses, on the grounds they can still work in the field by going the IT route.


The parent isn't denying that currently there are groups of people who don't learn CS very well, it is merely saying that CS is just like every other field, in that most people can learn it, but more slowly, or need some more help to do so properly.


This seems to be a recurring topic on HN. The "goats vs sheep" study cited in the link's "highest-voted answer" has appeared on the front page at least once before, recently.

I am more interested in the meta-question: what are the implications of this question? I.E. if we knew for certain that the answer is "yes," how would this change our behavior (and likewise if the answer is "no").

I would think: if we knew for certain that some people can program and some people just can't, we would focus more energy on sorting people early on, to avoid wasting everyone's time trying to teach the unteachable. By contrast, if we knew for certain that everyone could program given the right circumstances, we would focus more energy on devising better teaching methods, etc.

Because of this, I am inclined to maintain a deliberate bias toward "no" (I.e. I am inclined to behave as if anyone could learn to program). Even if the answer really is yes, there are sure to be some cases where a "programming-capable" individual struggles at first for some reason, and an "anyone can program" general attitude is more likely to save them from mis-categorization as a non-programming "goat."


This statement from one of the cited studies caught my eye:

"All teachers of programming find that their results display a 'double hump'. It is as if there are two populations: those who can [program], and those who cannot [program], each with its own independent bell curve."

It's making an unwarranted generalization to say that this is evidence of people being unable to learn to program. It's more likely that each teacher has a methodology that can succeed with students having some set of characteristics, and the teacher assumes that because he or she can't teach a particular student to program, then nobody can.

In a college environment, the teacher probably has an inflexible, non-individualized methodology that is expected to work with everyone in a 100-person introductory class -- it's impossible for one teacher to give individual instruction to that many students. Our teaching system also implicitly assumes that everybody in the same class has the same background knowledge and can learn at the same pace.

Also, at the college level, many intro-level CS courses are taught by grad students. When I was a grad student teaching intro CS at an Ivy League school many years ago, we had absolutely no training in how to teach, so we pretty much had to teach our students the same way we ourselves were taught as undergrads. The same old methods get passed down and reused with little thought as to whether they work well or not. Better methods might have succeeded with more students, but the university didn't seem to give a shit about how undergrads were taught as long as some fraction of them did OK.

I think it's likely that a lot of people who can't learn programming from a college class could learn it if they were taught one-on-one. And I think this is true for many other topics taught in school: math, physics, writing, etc.


Sure, it is true. It is like not everyone could become a poet or even a fiction writer.

There are keyboard with all characters, notepad.exe and a reference of English language - go on, write a novel and become a new Selinger or Pamuk.

Almost everyone could become a coder - a translator from a language of specification to a programming language.

http://karma-engineering.com/lab/wiki/Programming


There exist enough definitions of "everyone" and enough definitions of "programmer" to make the answer to this question almost worthless without context.

I'll leave this here: http://en.wikipedia.org/wiki/No_true_Scotsman


My experience was of spending about ten years writing terrible code, and slowly building up ability. I think I am quite good at it now, but am probably just kidding myself. A lot of people just give up at the first hurdle. I doubt they lack the ability, just the drive. And if someone starts a CS course and has never tried to code they probably don't have the desire to learn.


My grandfather used to be an art teacher in his younger years and he found people would sometime claim they couldn't draw. He always responded that this was nonsense .. drawing involves making a mark on paper, and absolutely anyone can do that.

I think its the same with most things, anyone can program if they're given half a chance .. but only those with an aptitude are likely to excel.


Sure anyone can program. But that doesn't make them a programmer.

Just like me slicing you with a knife doesn't make me a doctor.


I think it's a bit like learning written language. Written language is quite abstract too.

There are of course people with severe learning difficulties who are unable to learn written language (at least within any realistic timeframe). There are also people with more minor learning difficulties such as dyslexia who can learn but do so at a much slower rate compared with their ability to learn in other areas.

The difference is that written language is almost universally required in society. It's going to be very difficult to get almost any job at all if you can't read. Therefor the incentive to push through the pain barrier is very high.

So it depends on what your incentive to learning programming is. People who approach it because they simply see it as a way to make some $ will quickly realise that there must be an easier way to make $ that doesn't involve learning this stuff and they are probably right.

When I was younger me and a few friends were obsessed with video games. We thought that the coolest thing that we could possibly do was to make video games, people who made video games to us were like rockstars or pro athletes were to other people.

So we learnt to do some simple BASIC programming to the point where we could make text adventures with bleepy soundtracks and draw static sprites to the screen. First on BBC computers (which were popular with UK schools at the time) and later on DOS via QBasic.

In fact we even released a game as shareware, which gave us a hard lesson in conversion rates. Something like 10 shareware versions were ordered from the shareware library that distributed. Unfortunately nobody registered the full version (probably because it sucked).

I'm fairly confident that none of us had any real aptitude for programming. We had simply decided it was something that we wanted to be able to do at all costs.


Relevant to this thread, since the goats-vs-sheep study is brought up so often to add authority to the claim, Caspersen et al. were not able to repeat Bornat & Dehnadi's results. They discuss their findings here: http://dl.acm.org/citation.cfm?id=1268845


No, it's not true

programming computers is like writing stories, except the compiler for programming is a dumb CPU not a living human brain

every human who has been appropriately taught has learnt to read and write.  They can also learn to code.  And pretty much the same proportion will make a living coding as do make a living writing stories.

But the future of humanity will be immeasurbly enriched by all it's people able to express them selves in code, just as it has been enriched by it's people able to read and write.

It will be a good future.

Now stop wondering if we are special, and start worrying how we can make a world that is so rich, so peaceful that the worst horror it's children face is curly brackets.


Programming involves the ability to deal with abstraction, a lot of it. Just like most kids hit a wall in calculus (which is really their first exposure to abstraction), most kids hit a wall in programming. Those that can deal with abstraction well get programming.

Programming benefits from the ability to tell stories, but many programmers are not great story tellers (i.e. communicators), its a skill that you have to learn separately, then your programming improves because of it.

I'm sure many more people make a living programming than telling stories (journalism, authors, etc...), but if you have evidence otherwise, would like to see that. Anyways, that has more to do with demand (for programmers vs. authors) than supply (those able to program or write).


Programming is applied algebra. Some can't grasp "x=3"; that's a non-starter.


I think that this is confusing domain applications of concepts (algebra, abstraction in mathematics) and the same concepts in everyday speech. Everyone gets Proper nouns as variables and understands stories where the two people get their brains swapped. (Identity of objects as behaviour, memory addressing or duck typing)

so, I think most people get writing and symbols involved and that stories carry most of the functions needed for even reasonably complex programming

and that's without teaching children lisp from an early age


There are a class of programming models that exploit that, and they aren't very expressive. At best, they are suitable for casual programs who need to write some code to solve very specific problems, say writing something in Excel. However, serious programming (done by full time programmers) really requires the ability to create new functions.


What's a new function if not "have a bath" or "bathe quickly in the river" - apart from math specific definitions ?


I don't think you can compare it to stories. The only things programming has in common with stories is words and typing. What's different?

A story can't be 'wrong' as long as the grammar is used correctly. There (usually) are no hard requirements on the outcome or even the resource use of a story.

I'd rather compare programming to writing (classic) poems. Poems have a fixed structure, so the author needs to be economical and plan ahead with the syllables he uses and the story elements he introduces. While the outcome is still more or less open, we have to count in the artistic element (which is somewhat missing in programming), so this might introduce enough cognitive workload on the author to compare.


As a matter of fact, doing both, i think you can.

But in my opinion, the question is more : does every single people on earth like programming enough to get into it, instead of getting into something they enjoy more ?

Reading is easy, using an Iphone is easy. Bladesmithing, or repairing engines all day long is difficult, as is programming, as is writing for a living, or any other activity you don't enjoy doing on a daily basis for about 40 years.

It all boils down to (minimum) enjoyment of one's job.


Probably not. However I think there might be more of us if more children got to play with something like lego mindstorms or MIT's scratch or some other sort of fun programming games. I'm actually looking forward to Notch's new game a lot (programmable spaceships with a simulated CPU, ram and stuff). Sounds fun (maybe not for children though).


And i do agree with that. (and Notch's new game too by the way!)


I think I agree, but that Every single person does not write for a living - although writing will at some point be an irreduciable part of their job, because widespread literacy is fantastically useful and value generating

p


A story can't be 'wrong' as long as the grammar is used correctly.

Sure it can, have a murder mystery where Joe kills bob in the library with the revolver. Only problem is Joe was in Monte Carlo, and bob was Austin at the time of the murder, and there is no twist remote tele-presence robot. Stories must have internal logical consistency for them to work well. Something like Oceans 11 wouldn't have worked if there had been concurrency issues.


"Unreliable narrator" stories can be "wrong" in the way you describe. cf. American Psycho.

There are plenty of stories where unrealistic things happen, eg. JP Donleavy's scene transitions where people melt from one place to another (which are stylistic devices, not sci-fi).

This is a whole rabbit-hole (pun intended ...)


Even then I would argue that everyone can learn the basic structure of a poem and start writing one.


Nope. It is like writing poetry. It is hard and only very few could master the set of skills.


I say it's more like writing cartoon music


That's interesting, we had the same thought, see my other comment.


Most people can't write stories with any degree of competence, though. Certainly not well enough to do it professionally.


There are a lot of things that people learn to do for themselves that no one would pay them to do professionally (cooking, minor home improvements, taking family photographs).

That doesn't mean those skills aren't useful. That picture of your kid might not make the cover of a major magazine, but Grandma is still going to like it just fine. That pot of homemade vegetable soup might not rate five stars in a restaurant guide, but your family is still going to enjoy it when they come inside on a cold day.

Most people are reasonably good at telling stories that are important to them -- telling your kid about what Great-Grandpa did in WWII, telling your buddies about the giant fish that got away...


Most people can't write well because they don't have the hours of practice underneath them.

Sounds familiar...


It depends on what you call programming. If you call Excel work programming then yes, anyone can do it.

But if you mean writing great (usually more complex) software then no ; we evaluate/interview plenty of people, even with CS degrees who cannot program at all. And they had plenty of practice; still they cannot write anything which works over a few lines themselves and they don't have a real understanding of what they are doing (just learned stuff by heart). The end result might 'work' but it's never solid; it will have really strange bugs and no-one understands the code upon reading.


What, how's programming like writing stories? Writing multithreaded database access is exactly like writing a story about a school of wizards, right. The only thing these have in common is that you use a keyboard to type them.

Like with many other professions, some people are just more cut out for it then others. Yeah I know we're all equal.. but the truth is we're not. Programming certainly seems like one of these professions.


In order to make the connection between the two you have to apply a bit of abstraction.


I firmly believe that the human brain is incapable of basic mathematics.

When I add two numbers, say 145 and 394, I have memorized a few rules and tricks that let me break that down to something like 1+4 (hundreds), 4+9 (tens), add one to the hundreds, etc.

Or, I might figure out that this can be decomposed to 150+400 - (5+6) or something similar.

At any rate, I decompose the problem to sub-problems I have memorized the answer to: adding single-digit numbers.

This is basically the same process as programming. Are we asking whether people are "incapable" of mathematics? No. But we know that some people are way better at language than math. And that is all there is to it.


Everyone can count, it is necessity, but you need a certain kind of attraction to mathematical operations to be a mathematician, even an average one. The same holds for programming. Someone who lacks the quasi OCD interest in solving problems with computer language cannot and shouldn't be a programmer. And there is nothing wrong with it.


I'm not sure about the answer.

I am sure that not everyone should be a programmer.


I have the impression that some programmers would like this discipline to be exclusive to a few people, like if it was only for the elite. I don't really like this kind of spirit, I simply think some people don't see enough interest in programming.


Not everyone has the will to become a programmer, but I refuse to believe that anyone with an average IQ can not. It's not like being a concert pianist where there's some sort of cut :)


There are many different levels of intellectual intelligence.

As a result of this not everyone can be a programmer, just as everyone can't be a rocket scientist or a microbiologist either.


But can't they really? You just replaced the problem with an unsupported (supposedly self-evident?) assertion.


Unsupported and self evident assertion?

What about people with mild mental difficulties?

What about people who suffers from extreme mental difficulties?

What about someone who no longer has a concentration span due to past substance abuse?

What about someone who is still using drugs heavily?

Hows about a 5 year old kid who's brain has not yet fully developed?

Or perhaps a 15 year old kid who is in the middle of puberty and has little concentration as a result?

Or a 90 year old suffering from dementia?

Or someone suffering any level of depression?

Do all these different groups of people in society (and the many others I have not mentioned) have the same capability to learn programming (or anything else for that matter) as any other group in society?

Didn't think so.


Then there would be no activity at all that everyone could do, and the question would be senseless. I think you're reading it too literally and missing the point.


Name one skill that everyone can do regardless of the number of neurons in their brain and the capacity to use them, and ignoring any other underlying conditions that may impact ones ability to learn or retain knowledge?

This can't even be said for the basics like language, maths and science, why would computer programming be any different?

The 7 billion plus human brains on this planet are not created equally to each other (nor do they remain equal over time)! So how come everyone apparently has the ability to learn programming?

This is all scientific fact, so I really can't agree with your viewpoint on things that we all somehow have equal capacity to learn, it sounds a little out of touch with reality to me.


Any can be taught to use windev or microsoft lightswitch and build "serious" business applications in weeks ... and be called a programmer

you need to raise the bar a little


It's only true if you work/learn/pair program with people that think this is true.


At least three essays by Paul Graham ("pg," the founder of this site)

http://www.paulgraham.com/hs.html

http://www.paulgraham.com/love.html

http://paulgraham.com/determination.html

have referred to people making excuses for being lazy. I really like his expression of this idea in his essay "What You'll Wish You'd Known," the essay that drew me into reading his essays regularly, which eventually led me here to Hacker News:

"If they were just like us, then they had to work very hard to do what they did. And that's one reason we like to believe in genius. It gives us an excuse for being lazy. If these guys were able to do what they did only because of some magic Shakespeareness or Einsteinness, then it's not our fault if we can't do something as good.

"I'm not saying there's no such thing as genius. But if you're trying to choose between two theories and one gives you an excuse for being lazy, the other one is probably right."

It seems undeniably true that any teacher of any subject will encounter some students who, as the teacher finds them, seem to "get" the subject right away, and other students who struggle to understand even the most basic principles of the subject. But if the teacher gives up on the struggling students, the teacher is just being lazy. Israel M. Gelfand, a mathematician who was a great mathematics teacher, once wrote, "Students have no shortcomings, they have only peculiarities. The job of a teacher is to turn these peculiarities into advantages."

The submitted article on arstechnica includes near the end a promoted reader comment that is very good:

"They were supposed to be learning Java, but there were always at least three students who didn't 'get it.'

"My solution was simple; get them as far away from the computer as possible (since programing is not dependent of computers), and have them "program" a group of people by giving one instruction at a time to do things like pace a room, or throw a ball. I'd teach them loops and the like by doing this for about fifteen minutes. It was fun and simple.

"After that, they'd be ready to Pseudocode, which meant they were ready to use Python. I'd have them write a working version of their homework in Python, THEN I would have them translate it to Java. Java was just too much as a first step (I will never understand the reasoning of teachers who introduce students to programming on anything other than Python). The problem was always that the class needed to be broken into smaller pieces that could be conquered, which in turn encouraged the once failing students. Victory is addictive."

That's what an effective teacher does--change the context of instruction, and draw in students with connections to what they already know. Some students entering a programming class would be ready to move beyond the approach suggested in the comment, and those students should be allowed to plunge right in to actual programming in a high-level language, but so far no one has developed a rigorous demonstration based on careful experiment that students smart enough to be admitted to an undergraduate degree program have some kind of invariant lack of ability to learn programming if at first they don't "get" the basic beginning steps in a typical programming class. Try a new approach and see what happens. Don't accept an excuse for being lazy as a teacher.


It is not about `can`, it is about `wish`.


No but it is true that not everyone can do it well.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: