There’s a general ethic these days — that anyone can code — and like a lot of things, there’s some truth to it, but also some silliness. As usual, it really depends on what we mean by “anyone can code.”
If we mean it in the same way we might say, “anyone can drive,” I think it’s silly. But if we mean in the same way we might say, “anyone can doctor (or lawyer),” well, then I still think it’s silly.
The only way it’s not silly is if we mean it in the same sense we might say, “anyone can (and really should) learn a bit about math,” then I think it’s not silly. In fact, then I think it’s dead on.
There is an old question with regard to driving a car: How much does knowing all about how the car works matter?
It seems true that the more you know about a car, the more you’re able to deal with car situations outside normal driving. A canonical example might be knowing how to duct tape a leaking radiator hose. Or, really, even changing a tire.
Driving itself does seem a separate skill from designing or maintaining cars. It does seem you could be a very good driver without having any idea how it all works. (Obviously, I’m comparing this to using a computer.)
Flying a plane, however, is more complicated, and pilots need to know a lot about how their aircraft work. So is using a computer more like driving or more like flying an airplane?
It used to be more like flying an airplane, but today it’s explicitly designed to be more like driving. In fact, it’s designed to be so simple, “a child can use it.” (Which, like so much involving computers, has turned out to be a two-edged sword.)
As such, the old car question applies: How much does knowing all about how the computer works matter for using it?
There are two aspects to this: Firstly, there is understanding how the computer works, but secondly, there is knowing how to program one.
These are very separate tasks. The first is fairly easy, at least in getting the basics. The same is true with cars; the basics are pretty easy to understand. And everyone should have those basics.
But computer programming is hard. Infamously so.
Comparing the use of a computer to the use of a car or plane is misleading. Programming is more like designing the car or plane! Is that really a skill that everyone can and should pursue?
A better analogy to what software designers do is to compare them to architects (with a bit of author thrown in). There’s a lot more math in software than architecture, though, so programmers need to be comfortable with math.
The intellectual requirements can be high enough to make a case for comparing software design with practicing medicine or law. In all cases, years of hard study are required to be truly useful. Decades are generally required to be innovative.
One hallmark of designing cars, building, or planes, is the precision required, both in thinking and in doing. Architects, doctors, and lawyers, also require extreme precision.
In many cases in these professions, errors must be completely eliminated. We expect surgeons, airline pilots, and bridge designers to always get it right.
Software design often has these same requirements of precision, attention to detail, and lack of error. Sadly, the industry is a complete mess when it comes to these qualities.
Part of the problem, surely, is the attitude that anyone can learn to program (let alone design). Do we likewise believe that anyone can doctor or lawyer or design airplanes? Doesn’t it seem silly when put like that?
People have aptitudes; it’s silly to think one hat fits everyone. Even if it did, people have different taste in hats, and not everyone is interested in that hat.
Maybe a way to think about it is: Not everyone — by a long stretch — needs to learn to be a doctor, but everyone can benefit from learning some first aid.
Learning how a computer works is just like learning how a car works: It can only help you, and it’s not that hard, and everyone should definitely do it.
Learning how to program one is a little like learning math or law or medicine or airplane design. It’s a very deep, very wide subject, and you will only scratch the surface unless you’re prepared to invest serious time.
No, you can’t learn Java Programming In 30 Days (and certainly not in 24 Hours).
You can pick up some basics, but it takes years of practice to be a real programmer.
Just like being a real musician, a real doctor, a real lawyer, a real architect,…
But you can learn to drive fairly quickly (although it takes years to become a really good driver). And you can learn to fly small planes reasonably quickly (but, again, it takes years to learn to fly the big birds or jets).
Just keep in mind there’s a huge difference between a driver and a designer!