Is Learning To Code Really Essential?

The “Don’t Learn To Code” movement continues to chug along in the background, attempting to counter the “Learn To Code” folks. A recent post, along with a seminal piece on Coding Horror, all express opinions on to why learning to code really isn’t that important, or in some cases may be either inappropriate or even dangerous. A lot of these “don’t learn to code” pieces tend to focus on the technical elements of why coding is harder than you think, why it takes more than a quick weekend course, and lament the state of development tools. But few address a more fundamental question, one posed as a popular argument for learning to code.

Learning Is Good

First, I will get something out of the way: I have no issue with people learning to code. Learning anything new is worthwhile. It is what people do with it afterward, or what they assume can happen next, that can be a concern. Just because you took a weekend course in Javascript, or spend the last 6 weeks learning to build web applications, doesn’t mean you are ready to tackle the world of professional software development. I know plenty of people that can knock together a wooden box or build a set of shelves, but that doesn’t mean they are able to build a house or an office building.

I do agree that part of the challenge in becoming a “real” software developer is mastering the tools and the intricacies, and while tools have improved since I first started with computers (back in 1982), the underlying fundamentals really haven’t changed all that much. I still find myself looking at a lot of the same, or similar, man pages I did when I first started. A lot of the basic workflow in coding hasn’t changed much. Don’t get me wrong, it’s not like we’re writing code with hammers, chisels and stone tablets (or dealing with punchcards). But if you compare the advancement of our development tools to something like the progression in computer drawing tools, the tools we use to create pictures have come a long, long way. I can do quite a bit in tools like Illustrator or Photoshop that would have been impossible when the first GUI-driven systems appeared.

Spending time learning to code is worthwhile for anyone. So is learning how to make pottery, attending classes in creative writing or take a course in basic autobody metal work. It won’t make you a master craftsman, the next Stephen King or qualified to do a frame-off restoration of a 1950’s Ferrari. But new skills, and learning, are always a good thing.

A More Fundamental Question

Where the learn to code movement becomes a bit “over the top” in my mind is when some proponents liken learning to code as being as essential as learning to write or do basic math. This argument doesn’t hold water. There are more skills that I would see as important than learning to code, but even so, none of them are needed to lead a rich and fulfilling life.

It is hard to get by in this world without a basic ability to read, write and do simple arithmetic. These skills are essential for a person to be able to find and hold a job, interact with the various governments and businesses that we have to deal with every day, and just get by in the world. Sure, there are a tiny number of functional illiterates that thrive and succeed. Yes, a calculator can do a lot for you. But you still have to grasp some basic rudiments of math to even use a calculator, otherwise you’re just randomly pressing keys and hoping for a useful outcome.

I would say that First Aid is a more important skill to obtain. Even skills that can help around the house (like basic carpentry, plumbing and such) are more useful for the average person than knowing how to code. A very basic understanding of radios, given the proliferation of WiFi, might be helpful, if only to help people choose a location for their Internet base stations and such. A high-level grasp of the Internet, and just how many pieces their are between you and a website, go a long way for people understanding why things “slow down” or why other problems occur, because they see them on a regular basis. I’m not saying everyone has to have a deep understanding of RF or TCP/IP. But even a very, very basic understanding (some things block radio waves more than others; you are still competing for “space” on the Information Superhighway) would at least explain things, even if they don’t completely understand the details.

But coding as an essential skill for modern humans? Sorry, I don’t buy it. I put it in the same category as other skills like advanced carpentry, plumbing, electrical, gardening and automotive skills. Sure, it’s nice to have. Being able to perform my own repairs and modifications around my house is nice, but even I’m wise enough to know when something is over my head and above my pay grade. Knowing how and why cars work as they do means I have a more meaningful discussion with the guys at the shop when I bring my car in for service. But my wife gets as much out of her vehicle without knowing what goes on under the hood.

Essential Skills Change Over Time

That isn’t to say that some understanding of computers and software won’t be necessary in time. It might, but I doubt it, though, because technologies tend to trend toward “easier to use” even as they get more complex under the hood. Today’s cars are far more “average person” friendly than cars from the past, but they are also considerably more complex underneath.

Consider being a car owner back around 1920. Could you get by without knowing how your car works? Possibly, but even some basic understanding was necessary, even if only to start the thing. It wasn’t like many modern cars, where you “get in and push a button”. You had to adjust your fuel mixture and spark advance, set the choke and then engage the starter (either handcrank or electric). The engine could flood if you get some parts wrong, and that meant taking steps to clear out the excess fuel, resetting the mixture, spark and choke, and trying again. If anyone reading this doesn’t understand what a flooded engine means, but still manages to start their car without incident on a daily basis, that simply reinforces my point. With fuel injection and computerized control of the engine, the average person doesn’t have to deal with this in modern cars anymore.

This sort of progression has been around for a long time. We no longer need to know how to hunt or identify safe vs. dangerous plants to survive. We no longer have to be able to construct our own shelter or make our own clothing. We don’t have to be able to grow our own food. It wasn’t that long ago that being illiterate wasn’t an impediment (seriously, we only need to go back a small number of generations to find a time where you could easily succeed and thrive while not knowing how to read or write). Some of he skills we have today that are needed for success didn’t even exist a generation or so earlier.

Learning and Expectations

There are plenty of good reasons why any random person should learn to code. It is interesting. It presents some intellectual challenges. Continual learning may help delay or prevent the onset of some kinds of neurological disorders (like Alzheimer’s). You want to become a professional software developer and you have to start somewhere.

But don’t assume that just because you can bash our some Javascript, Objective-C, Ruby or Visual Basic after a 2-day, 5-day or 30-day course that you are now a master programmer ready to write anything. As with any skill, it takes time, effort and study to get good at it. The possibly-apocryphal “10,000 hours” benchmark to acquire a high level of skill isn’t far off the mark, at least in terms of magnitude. It can take years to truly get any good at designing and writing software. It means going beyond 2 data structures (linked lists and arrays), 1 sorting algorithm (bubblesort) and a modest understanding of loops, conditionals and a coarse understanding of breaking things into functions/methods/procedures.

I don’t need to be a master carpenter, with decades of experience and training, to do a passable job finishing my basement or building some furniture. I know that my work product probably isn’t necessarily as “good” as someone with an order of magnitude or more in experience. I know I will have made some mistakes that a real pro would have corrected. Again, just because I can knock together a wooden box doesn’t make me a master at the trade. But it also doesn’t diminish any enjoyment or satisfaction I may get out of it, or the cost savings that I may have gained by doing it myself.

So, by all means, learn to code. For some, it is fun and challenging. But do it with sensible expectations.