

Is it true that "not everyone can be a programmer"? - vilgax
http://arstechnica.com/information-technology/2012/09/is-it-true-that-not-everyone-can-be-a-programmer/

======
edtechdev
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.

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

~~~
goldfeld
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.

------
yaliceme
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."

------
tokenadult
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.

------
greenyoda
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.

------
dschiptsov
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>

------
hermannj314
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>

------
jiggy2011
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.

------
lwhi
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.

~~~
taligent
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.

------
7952
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.

------
parkov
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>

------
Derbasti
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.

~~~
gbog
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.

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

------
urish
I'm not sure about the answer.

I am sure that not everyone _should_ be a programmer.

------
lifeisstillgood
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.

~~~
DeepDuh
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.

~~~
peterhost
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.

~~~
DeepDuh
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).

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

------
moystard
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.

------
dasil003
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 :)

------
se85
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.

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

~~~
se85
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.

~~~
icebraining
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.

~~~
se85
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.

------
systems
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

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

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

