Responding to the recent Jakob Nielsen piece on web developers as Potterian wizards, Mark Bernstein remarks:
Equating users and Muggles is a symptom of believing yourself to be a programmer. If you believe this, you are mistaken: Nobody is a programmer. There are people who know how to program, just as there are people who know how to write, or to read French. There are no non-programmers; there are only people who have gaps in their education.
This is contrary to the accepted wisdom that it takes a certain mindset to program. In fact my CS450 Software Engineering II professor, Dr Stephen Nemecek, now of Southern University and A&M College of Baton Rouge, Louisiana, said precisely that software engineers are lucky, special, etc because it takes a certain mindset to design and write software. He gave a rough, small percentage, in fact, and attributed management's loathing of computer folk to the combination of the rare ability to do such tasks and the audacity for it to be, these days, a necessary one.
Joel Spolsky says a related thing when he says some people don't grok pointers:
[U]nderstanding pointers in C is not a skill, it's an aptitude. In Freshman year CompSci, there are always about 200 kids at the beginning of the semester, all of whom wrote complex adventure games in BASIC for their Atari 800s when they were 4 years old. They are having a good ol' time learning Pascal in college, until one day their professor introduces pointers, and suddenly, they don't get it. They just don't understand anything any more. 90% of the class goes off and becomes PoliSci majors, then they tell their friends that there weren't enough good looking members of the appropriate sex in their CompSci classes, that's why they switched.
And his summation:
For some reason most people seem to be born without the part of the brain that understands pointers. This is an aptitude thing, not a skill thing--it requires a complex form of doubly-indirected thinking that some people just can't do.
That's fundamentally unsettling because it's so elitist (of a sort: most programmers will admit, at least when asked directly, that programming isn't the be-all/end-all, or the pinnacle of human thought, or any such thing--but will agree that, be that as it may, not everyone can do it). My experience as a computer science student bears it out, though: I've seen many, many more instances of people failing to program than trying. Sometimes you're trying to guide someone through writing a bit of code, and it feels like he just isn't thinking, that some necessary process to see this construct that doesn't yet exist isn't occurring inside his head.
I know it's not a new topic. Are there any actual studies on this sort of thing? Would a study even be possible?
Comments
comment
I’m well convinced that the issue isn’t that many aren’t born with the programming gene, so much as it is that we still don’t know the proper way to teach programming.
I’ve gotten more than one person started by patiently digging deeper and deeper through the fundamentals when somebody was struggling. When you make an effort to understand their perspective, and try to verbalize the first few steps in a way tailored to their mode of thought, something clicks.
comment
Yes, of course some people can’t be programmers. Some people can’t be good musicians, some people can’t be good accountants, some people can’t be good farmers, some people can’t be good politicians. Me, I fall into at least two of those categories.
The idea that we’re all equally skilled in every way is a just a myth… a persistent PC meme, but a myth nonetheless.
Now, it may well be true that it’s single-digit percentanges that *can’t* program, rather then *can*, or that better teaching might enable all but a handful. It’s hard to know; heck, the entire *school* system is so crappy it’s hard to get a real feel for the real intelligence of humanity. But even so, there will still be a group of people who are in the 99 percentile, and those who are in the 10th percentile. Who knows whereabouts “pointers” lie, but if I had to guess from experience, I’d guess around 60-75th percentiles… not even everybody who can do decent programming (mathematicians interested in numerical computations, physicists interested in simulations only) gets those.
It’s only difficult to understand if you insist on being PC.
comment
Having tried, over the years, to teach people rudimentary programming, I too am convinced that there’s a programming gene. It’s all well and good to buy into the idea that we all just need the proper teaching techniques to unlock our potential, but after the umpteenth time of trying to get someone to just record a macro and play it back, and being rebuffed, I’ve accepted that some people will “get” programming, dive into it quickly, and many just can’t grasp it.
That’s okay, there are lots of things I can’t grasp that other people can, but perpetrating that myth that we can all fit into the bed of Procrustes ends up with a lot of uncomfortable people with insecurities.
comment
Many more comments over on LiveJournal: http://www.livejournal.com/talkread.bml?journal=markpasc&itemid=60360
comment
From teaching C++ to grad students, I think pointers themselves are often comprehensible with the proper context (I often use a telephone book as an example .. the pointer is like remembering that a person’s address is on page 340, line 12.)
Its when people start dealing with pointers to pointers and passing functions around using pointers, etc. that people’s eyes start to glaze over. You have to fairly good at handling indirection and abstraction in your head to really understand that type of stuff which is why templates are so tough to teach and use effectively.