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.