Responding to the article's first two paragraphs: I'm about to state a controversial opinion, in the sense that I can't verify it formally. But through my work, volunteering and social interactions, I am slowly believing in it more and more (and I'd love to hear counter-arguments to it).
I think the reason why the average citizen has no idea of what programming entails, by contrast to a doctor or a lawyer or a fireman etc., is that programming mainly involves abstract reasoning to a level which most adult people simply can't grasp. Not because of their intellectual capacities, but because it's never been properly fostered or developed through their education.
A fireman puts out fires and assists in emergencies, a teacher teaches a classroom of students, a salesman tries to sell whatever he's selling - all those professions have a fairly obvious mapping to the outcomes they produce.
But programmers are much harder to intuit: on one end of the chain you have guys wearing tee shirts and flip flops sitting in front of their computer all day wearing headphones; on the other end you get websites and iPhone apps and GPS software (and those are only the things with which the average citizen is familiar). Understanding the link between the workers and the outcomes they produce requires some familiarity with the symbolic manipulation that's involved. Given this, it's fairly understandable why if one weren't familiar with this process, it'd seem reasonable that a computer programmer could just as easily stop nuclear terrorists or put a curse on their enemies with 3 keystrokes.
Abstract and logical reasoning are crucially missing in the modern education we give to our kids (witness the way math is now taught in the US, in ways that make mathematics become some kind of weird automatisms, stripping them away from everything that makes mathematics, mathematics). Repeat this over years and years, permeate the culture with it, and you get citizens who not only don't get this entire world of symbolic reasoning, but also for whom bridging that gap has become near impossible.
I've actually gotten in great conversations with the non-scientific type at house parties, conveying basic computing and logical reasoning concepts. I once met a girl who was a textiles worker - we got in a great conversation about Jacquard looms, which she had studied in college - and from there I was able to get her to play with the ideas that lead to computation and all that fun stuff.
What would be cool is a TV show which would do to computing what Cosmos did/does to science (I have non-scientific friends who deeply resonated with the new Cosmos and loved it, and the ideas it presented, pushing them to seek more). I wonder who we should pick for our Carl Sagan/Neil deGrasse Tyson.
So how do we programmers acquire the abstract reasoning skills that you say most people don't have? It came naturally to me; I started programming when I was 8 years old (in BASIC on an Apple II), and I don't think there was anything exceptional about my education up to that point.
Through practice and repetition, like every other skill.
BASIC certainly didn't come "naturally" to you - I doubt you were born with an innate notion of for loops, variables and methods. Rather, you played with it, put it together, you enjoyed it so you kept at it, and you became better over the months and years.
It wouldn't have been any different if the skill had been playing an instrument, drawing, writing short stories, etc. - especially when you're 8.
There's nothing special about the skills involved with programming themselves - it's just that they're hard to develop outside of mathematics/programming, and schools aren't that preoccupied with conveying them, so in the end very few people get to develop them from a young age (and those who do tend to all fall in similar buckets: upper middle class with enough money to own a computer, initiated by a programmer parent or relative, etc).
I think getting exposed to things early is a big part of it. Young minds are very malleable. Of course you're not able to understand things completely at a young age (or any age), but those things you can understand and continue to be exposed to become very ingrained in your mental processes and how you understand the world.
This is both a response to GuiA and dpeck. GuiA's comment was right on from my perspective. When I was about 10-11, my class was in our school's computer lab full of new Apple II machines. We were supposed to be writing an essay on the computer so we could print it and turn it in. Computers were so new to us and our teachers that we were still taught to double space after end punctuation.
I noticed a classmate messing around in a totally different program, and asked what he was doing. He said, "Come here, check this out." He hit enter, and on the screen appeared the prompt, "What is your name?" He said, "Go ahead. Answer it." I typed in my name and hit enter. Almost immediately the computer responded with another question, but this time it addressed me by my name. My first thought was that, somehow, this machine consciously knew it was communicating with me.
I had to know how this kid made the computer act like that. He showed me the BASIC code he used to store my input in variables and reference it later. I understood what he taught right away, but it certainly didn't come naturally to me. I was fascinated by programming, and wanted to know what was possible with all of the stuff I hadn't learned yet. I was lucky to have been exposed to it so early. If we had been doing what we were supposed to, I wouldn't have had that opportunity.
dpeck, you mentioned that young minds are very malleable. I completely agree. I inferred (possibly inaccurately) from that statement that older minds are not as malleable. I would word it differently (and probably flawed). Minds that have not yet submitted to the authority of the status quo and thus accepted the limitations therein are still open to and actively seek discoveries which may influence their perspective. Many adults, hackers in particular, continue to explore even when they're explicitly told not to.
So, I would argue that all minds are very malleable. Some who desire control aggressively act to corral many minds into spaces that restrict curiosity and exploration. Until a mind has been corralled into one of those spaces, it remains very malleable. I believe that early exposure is certainly a great benefit, but there are many adults who could become great programmers who have not yet started.
Having a perspective that is likely foreign to HN, I can offer some insight from a beginner's point of view. I am fortunate that the projects I have been interested in until now have been profitable enough to support my family. While many of those projects required a strong understanding of what's going on behind the scenes of a program, I didn't really have to code very much. I did learn whatever programming ability I needed in order to make my programs meet their objectives without error.
During tough financial times and in between projects that interested me I'd curiously browse job listings for programmers. From a beginner's perspective, even a beginner who's willing to learn, they're daunting as hell; BS required, MS preferred, 10+ years experience in programming, 5+ years experience in a language that was released 3 years ago, etc.
All you seem to hear about are these self-proclaimed prodigies who taught themselves to code just after kindergarten.[1] Educational resources are taught by the types of programmers those jobs seem to be targeting. So programmers at your instructor's level will be your direct competition for employment. If you're an expert at anything, then you realize how much you still have to learn and the beginners are so much farther behind that. So a programmer with 10 years of experience who's still improving seems tough to compete with when you're getting started.
I understand that it's relatively simple for a beginner to become a good programmer in just a year or so. But from a beginner's perspective, jumping into it doesn't look as easy as it actually is.
I apologize for the long response. Thank you for your time.
[1] I'm not implying that everyone who learned to code young thinks they're a prodigy. I learned young, and I admit I'm still a novice.
Of course, Feynman was an amazing "explainer" of complex things. I can't think of a modern analog. I'm hoping other commenters will chime in and prove me wrong.
I think the reason why the average citizen has no idea of what programming entails, by contrast to a doctor or a lawyer or a fireman etc., is that programming mainly involves abstract reasoning to a level which most adult people simply can't grasp. Not because of their intellectual capacities, but because it's never been properly fostered or developed through their education.
A fireman puts out fires and assists in emergencies, a teacher teaches a classroom of students, a salesman tries to sell whatever he's selling - all those professions have a fairly obvious mapping to the outcomes they produce.
But programmers are much harder to intuit: on one end of the chain you have guys wearing tee shirts and flip flops sitting in front of their computer all day wearing headphones; on the other end you get websites and iPhone apps and GPS software (and those are only the things with which the average citizen is familiar). Understanding the link between the workers and the outcomes they produce requires some familiarity with the symbolic manipulation that's involved. Given this, it's fairly understandable why if one weren't familiar with this process, it'd seem reasonable that a computer programmer could just as easily stop nuclear terrorists or put a curse on their enemies with 3 keystrokes.
Abstract and logical reasoning are crucially missing in the modern education we give to our kids (witness the way math is now taught in the US, in ways that make mathematics become some kind of weird automatisms, stripping them away from everything that makes mathematics, mathematics). Repeat this over years and years, permeate the culture with it, and you get citizens who not only don't get this entire world of symbolic reasoning, but also for whom bridging that gap has become near impossible.
I've actually gotten in great conversations with the non-scientific type at house parties, conveying basic computing and logical reasoning concepts. I once met a girl who was a textiles worker - we got in a great conversation about Jacquard looms, which she had studied in college - and from there I was able to get her to play with the ideas that lead to computation and all that fun stuff.
What would be cool is a TV show which would do to computing what Cosmos did/does to science (I have non-scientific friends who deeply resonated with the new Cosmos and loved it, and the ideas it presented, pushing them to seek more). I wonder who we should pick for our Carl Sagan/Neil deGrasse Tyson.