Is it true that "not everyone can be a programmer"?
arstechnica.com
arstechnica.com
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.
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.
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.)
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...
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.
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."
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.
"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.
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.
I'll leave this here: http://en.wikipedia.org/wiki/No_true_Scotsman
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.
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.
Just like me slicing you with a knife doesn't make me a doctor.
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.
I am sure that not everyone should be a programmer.
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.
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.
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.
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 ...)
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.
p
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).
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
Sounds familiar...
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...
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.
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.
As a result of this not everyone can be a programmer, just as everyone can't be a rocket scientist or a microbiologist either.
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.
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.
you need to raise the bar a little