I am a late convert to the idea of computer science education for everyone. Or pretty close to everyone. A lot of people still don’t see it as valuable for more than a few people with some sort of natural predisposition for programming. I think there are many reasons for this. One is that they equate computer science with programming. And that’s not quite right. Second is that they see the only reason to learn computer science is to do it professionally. Inspired by Jeff Atwood’s Please Don’t Learn to Code I did a search on Bing for “don’t learn to code.” Bing came back with 224,000,000 hits. That seems like a lot. I can’t address all of what showed up but I would like to address some of what I read in the post by Jeff. He basically uses a bit of a straw man argument comparing coding to plumbing. This is largely the idea of coding as a trade skill.
I would argue that a more realistic comparison would be to compare computer science to math or reading. Computer science, of which coding is but a part, is part of the liberal arts of the twenty first century. You wouldn’t say “don’t learn math because you are not going to be a professional mathematician” now would you? Of course not!
But it gets worse with still more straw men about the move to teach CS and programming to more people.
- It assumes that more code in the world is an inherently desirable thing.
Actually it assumes no such thing. Rather it assumes that having a better understanding of what the computer can and cannot do will lead to better decision making and a greater openness to new algorithms and to software is a desirable thing. It assumes that people can benefit from a better understanding of computer science, algorithmic (or computational if you will) thinking. It’s not about “more code” at all. I would also suggest that a better understanding of
- It assumes that coding is the goal.
Again, no, the assumption is that there will be better understanding of what code is all about. The idea is not to turn everyone into a programmer but to give more people knowledge and understanding. Being able to produce code is a tool toward understanding with understanding being the goal.
- It puts the method before the problem. Before you go rushing out to learn to code, figure out what your problem actually is.
Backwards here. I believe most people pushing for more computer science and programming see it as a means to teach the tools for understanding problems. It’s a tool for understanding problems far more so than solving them. Will some people code their own problem solutions? Of course they will but the goal is to help them understand problems first.
- It assumes that adding naive, novice, not-even-sure-they-like-this-whole-programming-thing coders to the workforce is a net positive for the world.
No, not really. Again the people who are promoting more computer science see it not as a vocational training but as a liberal art that helps people understand the world around them. Coding is the language of computers which has in a real way a culture of its own. By learning the language of a culture we gain understanding of that culture. This is the main reason we teach “world languages” is school. Not to turn out professional translator but to give people a greater understanding of a people’s culture and the way they think.
- It implies that there's a thin, easily permeable membrane between learning to program and getting paid to program professionally.
I don’t think too many people, except for self absorbed teenagers, who really believes that. The line is more permeable than it has been in years but still not an easy path. But since vocational training is not the goal so what?
I would say that learning computer science is for everyone. Coding is just a tool to help you get there. It is about concepts, ideas, ways of looking at and solving problems, and much more than just coding to make a living. Don’t fall into the trap of seeing the field too narrowly.