I'm fast approaching the end of the first semester of my CS course at college and it seems to me that the whole "everyone should learn programming" has gotten out of control. Nearly every course has to have a programming class - even the ones that don't seem to benefit from it whatsoever.
10 PRINT "I have no clue why I need programming" 20 GOTO 10
Fortunately, the odds of something like that happening - even in jest are near-zero for good reason. Designers and creators will hopefully spend their time doing real work instead. To those who argue programming is an essential skill that everyone should learn, right up there with reading, writing and math: can you explain to me how an aerospace engineer would be better at his day to day job of designing better airplanes if he woke up one morning as a crack Java coder? It's obvious to me (and you) how being a skilled reader, writer and basic high-school math are fundamental to the job of an engineer. Or any job for that matter. But understanding variables, functions, pointers and recursion? I can't see it.
Look, I love programming. I believe it is important...in the right context, for some people - probably a computer person. But so are a lot of skills. CS students aren't forced to learn how to analyze structural stresses. In fact, I would no more urge everyone to learn programming than I would urge everyone to learn plumbing. That'd be ridiculous, right?
"If we don't learn to plumb, we risk being plumbed ourselves...plumb, or be plumbed."
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.
- It assumes that more code in the world is an inherently desirable thing. In my experience, I have found this...not to be the case. Should you learn to code? No, I can't answer that for you. You should be learning to write as little code as possible. Ideally none.
- It assumes that coding is the goal. "Non-programmers" like to think that software developers and programmers are addicts who just write code. But it's not. Their job is to solve problems. Don't celebrate the creation of code, celebrate the creation of solutions.
- It puts the method before the problem. Don't get me wrong. I love computers - they are the single most powerful tool in solving problems. But that's exactly what they are - a tool. Before you go rushing out to learn to code, figure out what exactly you're going to solve. Do you even have a problem? Have you researched it and it's possible solutions? Does coding solve that problem? Are you sure?
- It assumes that adding naive, novice, not-even-sure-if-they-like-this programmers to the workforce is a net positive for the world. I guess that's true if you consider that one bad programmer can easily create two new jobs a year. The truth is, there are few great programmers out there.
- It implies that there's a thin, easily permeable membrane between learning to program and getting paid to program. While programming is an egalitarian field where degrees and certifications are irrelevant in the face of experience, you still gotta put a lot of hours behind honing your skill before even thinking about getting paid to program.
I can support everyone learning a tiny bit about programming just so you can recognize when code might be the most appropriate way to solve a problem. But then again, I can recognize a plumbing problem without any prior training in the area. The average Joe could benefit a lot more from a basic understanding of how computers and the internet work; being able to navigate on the internet is becoming a basic life skill and we should be worried about fixing that first.
The tech around us has achieved Clarkian levels of magic for the vast majority of people, and most of us still don't understand how it all works. You don't learn to build a car to get your driving license; you learn to drive it.
Please don't advocate learning to code just for the sake of learning how to code. Or worse, for the promises of fat paychecks. Instead, I humbly suggest that we spend our spare time learning how to...
- Try and understand the fundamentals of how things around us work.
- Communicate with other human beings.
- Other skills that extend far beyond coding and will help you in every aspect of your life.