On their planet, being able to calculate the area of a rectangle reliably, the first time, makes you anomalously good with math. The notion of programs as long strings of instructions, followed sequentially, with predictable results is a fantasy: computers are observed to operate mostly randomly, all of the time. Some days I go to my Googles and it's the Googles with the box in the middle,a some days I go to my Googles and it's the Googles with the box at the top. Why does Microsoft keep changing the Googles? THIS IS SO FRUSTRATING.
You and I might think there is a distinction between programs and data, and we could describe how these exist in different places in a hierarchical file system on a computer, which is an abstraction over sectors on a hard disk. Every technical word in that sentence is scary juju to most of the population. There are many otherwise intelligent people who cannot open MS Word without a document emailed to them first. If you took away the document, they wouldn't know how to open Word and wouldn't know how to correct that.
In addition, many folks who are unemployed or underemployed in the United States either cannot read this post or cannot understand enough of it to answer simple questions like "Does Patrick think that programming is hard?"
You can certainly become a passable programmer in 3 years starting from being well-educated, intelligent, and reasonably skilled at knowledge work in the information economy. If you're 3 for 3 on those, you don't have a problem right now.
This is why I hate to get into small talk with someone I've just met. One of the first polite questions I get is "so, what do you do?" and to judge by reactions its as if I immediately start talking like the adults in a "Peanuts" cartoon. And even if I try to be as nontechnical as possible ("I do website work") you can see they just don't want to continue the conversation at that point.
"sound exciting"
"Yeah, it's almost exactly that exciting. So what do you do?"
So true. I work in an industrial environment, so I end up helping a lot of people out with math. High school geometry might as well be wizardry.
> You and I might think there is a distinction between programs and data
I know you're talking about the difference between word.exe and data.doc, but you're probably going to excite the Lisp programmers with a statement worded that way.
And yet does anyone doubt that they could learn highschool geometry if motivated to do so?
Not if you are a Lisper.
Here's a fact I learned that has stuck with me for years since: in China, everyone learns algebra in 4th grade, no exceptions[1].
Now the point of this isn't that the Chinese educational system is so awesome (I actually think that there are some really bad tradeoffs they make), but rather that the thing that we think is so difficult for highschoolers can actually be done 100% by every single person in 4th grade. It's an existence proof that for quantitative knowledge it's just a matter of training and context.
Anyone who is reasonably conversant with a computer (in the sense that they know how to type, they can use a mouse, etc.) can be taught to program. It's no harder than algebra. It's within their capacity. The problem I think is that it's just not conceivable. It's not really taught in schools, and it requires you to learn an entirely new set of skills and vocabulary.
I will grant that perhaps 3 years is an underestimate; it might take 6 years. I haven't run any actual experiments. But programming is not cutting edge research; you're not writing a PhD.
I agree with you that most of of the population really truly does not understand computers right now, I just disagree that if motivated they couldn't learn and quite quickly.
[1] Well of course there are a lot of exceptions: the mentally handicapped, children who live on the farm, children who have to work in factories all day. But for students pushed through the system, they all learn.
Most skills are not as difficult as people think they are with consistent effort over time. People are not born with a drawing module in their brain that makes them different than you, and that's true for programming and pretty much everything else as well.
Just think of what it really takes to create even a simple dynamic website.
EDIT: To clarify, I hardly ever use math at the level I was required to study in my comp. sci. degree curriculum. Of course I use basic arithmetic calculations often enough.
Do we not use many of the concepts?
* boolean algebra / simplification of terms?
* vectors, matrices, tensors (er, strings, arrays, objects)
* functions? functions of functions?
* set theory?
* graph theory?
* "closure" of operations (e.g. - what are the limits / bounds of this operation / function? Can I encode every character / code-point in this output representation? -- no? prepare to get hacked, then)
I've written a few times here about how I interview people. Most of the candidates have BS degrees in comp sci, most of them have 3 to 15 years of work experience. Most of them cannot write a (correct) function to reverse a string.
We accepted any correct solution.
It never gets to edge cases. Most people can't even write the simple version.
I'm pretty sure nobody can write the unicode-safe version during the interview, even the smartest developers I've worked with (I guess that depends on the language though).