Gas station without pumps

2013 January 1

Is coding for everyone?

Filed under: Uncategorized — gasstationwithoutpumps @ 07:41
Tags: , , , ,

One of the memes in computer education last year was “coding for everyone”.  For example, the year started with Mayor Bloomberg vowing to learn to code using Code Academy (how did that go for you, Mayor?), and there was Rip Empson’s post STEM Ed: CodeHS Wants To Teach Every American High Schooler How To Code, in which he reviewed the CodeHS online program to teach high schoolers how to program, and a host of other posts that I did not bother to bookmark all claiming the wonders of universal literacy in programming languages.

In May, there was a backlash: Jeff Atwood’s Coding Horror: Please don’t learn to code made the claim

The “everyone should learn to code” movement isn’t just wrong because it falsely equates coding with essential life skills like reading, writing, and math. I wish. It is wrong in so many other ways.

Atwood’s main points are that coding is not the goal, but just a tool in solving some types of problems, and that thinking about problems is more important than concentrating on this particular tool.  He’d rather have people like Bloomberg concentrate on doing the things they are good at rather than becoming half-assed programmers, and leave the programming to people who have the time and the inclination to do the job right.

I think that Atwood position, like Andrew Hacker’s claim that high algebra is pointless, is a deliberately extreme position taken to raise passionate responses and sell newspapers.  Hacker claims to want to lower the already low value of a high-school diploma by reducing the math required for it below the 8th-grade level currently required.  Atwood wants only professional programmers to learn to program.  Both appear to be protecting elite privileges by claiming that education is too much for the masses, and that they don’t really need it anyway.

Atwood makes an analogy to everyone learning to do plumbing, as if that were a ridiculous idea.  Personally, I think that everyone should learn a little plumbing: enough to clear a toilet or sink trap, or replace a faucet washer, and to know when to call in a professional plumber. So his analogy is an excellent one and completely undermines his conclusion.

Steve Myers, in Software developer revives debate about whether journalists should learn to code, makes the analogy to the “reporters vs. bloggers” war.  Unfortunately, that fight appears to have been settled by laying off most professional journalists and killing off a lot of newspapers, with the resultant degradation in the quality (though not the quantity) of news that people get.  As a blogger, I don’t think that discouraging blogging is the right way to support journalists, but if the analogy is a good one, then I can see why people like Atwood are attacking amateur programmers in fear for their jobs.

Myers quotes Andy in Don’t not learn to code

Even if someone who learned how to “code” never ends up as a “coder” professionally, they will be much better for having learned to think algorithmically and in the abstract. However, I bet that knowing how to write a quick script here and there will make them much more valuable in whatever profession they choose.

Andy makes the standard case for learning to program:

Do I always use software to solve problems? Definitely not. But do I often use the same problem solving techniques that learning to code taught me in order to solve other problems in my life and work situations? Definitely yes.

Can folks be taught to solve problems without using computer code? Definitely yes. But is learning how to “teach” a computer how to solve problems via code one of the best ways? I think yes as well.

In Definitions of “Code” and “Programmer”: Response to “Please Don’t Learn to Code”, Mark Guzdial points out

Most people who write code are not trying to create code solutions.  Most people who write code are trying to find solutions or create non-code solutions.  By “most people,” I do mean quantitatively and I do mean all people, not just professional programmers.  We know that there are many more people who write code to accomplish some task, as compared to professional programmers.

The point of the coding-for-all movement is that there are lots of times when a small amount of coding or scripting on a computer can solve an immediate problem without calling in a professional programmer.  Little snippets of throwaway code can be enormously useful for getting data into a form suitable for thinking about a problem, and the ability to create those snippets quickly is a very valuable skill.  I know I would feel very constrained if I had to wait for someone else to understand what I was trying to do and implement it for me every time I wanted to plot some data or model something.  I try to get the biologists and bioengineers that I teach to have some coding ability—enough to fit models to data, reformat data so that it is usable by other programs, and do simple analyses.  I don’t expect most of them to become professional coders (not even all the bioinformaticians need to be expert programmers, though most should be), but they all need enough skills to do the little tasks (the equivalent of clearing sink traps in plumbing) and to know when they need to call in the professionals.

Mark Guzdial takes particular exception to Atwood’s claim “You should be learning to write as little code as possible. Ideally none.”

And people who want to do interesting, novel things with computers should just wait until a software developer gets around to understanding what they want and coding it for them?  I could not disagree more.  That’s like saying that the problem with translating the Bible is that it made all that knowledge accessible to lay people, when they should have just waited for the Church to explain it to them.  Please don’t learn to code” can be interpreted as “Please leave the power of computing to us, and we’ll let you know when we’ll make some available to you.”

As may be clear by now, I tend to side with those who would teach programming skills (and math) to everyone, even though not everyone will end up particularly good at programming or math.  I believe that I have enough skills and intelligence that I’m not threatened by an increase in the skills of others, so I don;t see any benefit in choking off education for others.

On the other hand, I don’t think that the coding-for-all movement will be any more successful than the math-for-all movement has been for the past century.  Math is taught to everyone and people are required to get through algebra and some geometry to get a high school diploma, but huge portions of the American adult population are still functionally innumerate. Even after ten years of learning math, many adults can’t add fractions or figure out that lottery tickets are a sucker bet.

The coding-for-all movement is starting from a much lower base—almost no elementary schools and very few high schools teach programming, and those that do generally have only one course in Java syntax, which will not get people very far in learning to solve problems.  So even if the coding-for-all movement is wildly successful and creates tens of thousands of teachers (coming from where, exactly?) teaching high-schoolers how to program, the fraction of people who are even marginally competent programmers will remain pretty small.  The online courses like CodeAcademy and CodeHS try to get around the shortage of teachers by having a computer do the work of teaching, but they are pretty miserable failures at teaching to even the low level of high school programming courses.  It’s nice that there are resources that will allow dedicated students to get around the curricular limitations of their high schools (current or past), but they are not going to lead to a world of universal coding competence.


  1. I think there is another argument for having everyone learn to code: coding forces people to think about problems in far greater depth and completeness than they are used to doing. I have students working on a reservation system for a nonprofit right now. My students tell me over and over that they had no idea that there were so many loose ends and complications in such a seemingly simple system. Students routinely come to college, and graduate from college, having never thought about any problem to that level of detail. Then, they get out into jobs where they make decisions without thinking through everything, with often disastrous consequences.

    Comment by Bonnie — 2013 January 2 @ 05:18 | Reply

    • Good point. Attention to detail has been lost in most of education (certainly evident when you look at writing instruction and the lack of detailed grammar and punctuation instruction).

      But I think that the attention to detail does not just come from learning a programming language—certainly I’ve seen a lot of very sloppy programming that shows that the programmer has not thought about the details.

      Working on recursive programs and dynamic programming does give one a language for talking about the edge conditions, but it is necessary to focus students’ attention on the importance of getting the details right—it does not come naturally to many of them, even after 2–4 programming classes.

      Fussing about the details comes from immersion in a big project in which the details matter. Programming just provides one venue in which details matter—many other engineering disciplines provide a similar context.

      Comment by gasstationwithoutpumps — 2013 January 2 @ 10:43 | Reply

    • I completely agree, Bonnie. One of the many reasons I’m teaching my kids to program is to give them experience with a style of thinking that they don’t get from their schoolwork: meticulous, objective analysis. It’s both maddening and hilarious when they tell me, “I can’t get it to work,” and I ask them to tell me the precise sequence of characters it needs to output to be “working” and, as they do so, to single step me (verbally, with a finger as “instruction pointer”) through their code showing me which line produces each character. They’re flabbergasted. They’re expecting to write something plausible, run it and see if the computer does roughly what they intended, and if it’s not quite right, to tweak (half deliberately, half stochastically) and re-run until the output looks right. That’s how “analysis” works at school. It’s a very foreign experience for them to be submitting work to a machine with no opinions, that can’t be charmed, that cares nothing for you, your age, your background, your level of effort, what you consider success, or anything other than the literal interpretation of the exact instructions you give it. It’s good experience.

      Comment by Glen — 2013 January 7 @ 14:13 | Reply

      • “Debugging programs into existence” seems to be a common strategy in beginning programming courses. Providing exercises simple enough that the strategy is even marginally effective is bad (but frequent) pedagogical design. Unfortunately, many programming courses do little or nothing to break some students of this bad habit—I’ve seen it even in students who have already passed 3 or 4 programming courses.

        Comment by gasstationwithoutpumps — 2013 January 7 @ 17:35 | Reply

  2. […] couple of days ago in Is coding for everyone?, I […]

    Pingback by Plumbing karma « Gas station without pumps — 2013 January 3 @ 18:42 | Reply

  3. […] figuring out the best actual solution), etc. Over the next days and months lots of people responded to […]

    Pingback by Programming for everyone! | Ambericity — 2013 February 22 @ 09:34 | Reply

RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: