“Should I learn to code?” Probably not.

Image courtesy of Toomore Chiang.

For years, I’ve been an advocate of the “everybody should learn to code” camp, insisting that computer literacy and programming in particular are crucial to functioning and succeeding in today’s society.

I’ve since come to reconsider my view on this.

The realization came as I was reevaluating what it means to be able to code in the first place. Taken at face value, the activity of coding is not unlike any other skill-based activity — the skill in itself is rarely useful outside its context.

Take sports, for instance. Say you’re great at basketball, good enough to hold your own and even get a couple of shots in every game you play. You’re a good team player and people love playing with you.

Does any of that skill translate to, say, an office job?

It all depends on how experienced you are with cross-pollination. Some skills transfer easily and subconsciously, like the social skills and capital you gain by socializing in group activities (one of the reasons why companies organize team-building events).

Image courtesy of OnlineBusinessDegree.org.

Some are not that obvious. Your stamina and athleticism will not help you with sitting around filling out forms and answering emails. The skill that may help, however, is how well tuned you are to your body’s physiological needs. Eating, drinking and taking breaks regularly are one of the most effective ways of restoring energy while working, which translates directly into productivity. Usually, our jobs force us to forego these things in lieu of “important tasks” (which rarely are) and we learn to suppress our body’s natural responses to the point where we don’t even recognize them anymore.

Same goes for coding.

Coding in itself draws upon a couple of fundamental skills required for effective programming:

  • long-term focus and concentration
  • modeling and abstraction
  • logical reasoning and deconstruction

Listing these fundamental skills makes it pretty obvious how they could be transferrable in many modern contexts — everything from dealing with automated and mechanical devices to navigating through the myriad of abstract rules and regulations. Interestingly, this skill transfer does not happen that often with causal coders as much as it happens with professional or long-time programmers. So where exactly does this conversion drop off and why?

Image courtesy of University of Iowa.

If you’re reading this and you’re not an STEM major yourself, you’re probably familiar with the compartmentalizing feeling you got when studying physics, chemistry and mathematics. Probably even other subjects, come to think of it. You could basically sum them up as “stuff you needed to learn to get a passing grade” in order to attain some level of education. And that’s where the story ended for you.

In every day life, it may never occur to you that you may need to use mass or dilution ratios, yet we still stumble our way through figuring out how much of an ingredient you need to follow a recipe or stick to your dietary restrictions (hint: you’re gonna be solving for x).

Or maybe you’re moving and you need to figure out if a certain piece of furniture will fit through a given doorway (hint: you’re going to need some Pythagorean elbow grease).

Or maybe you’re trying to funnel gas into a styrofoam cup (hint: NEVER EVER DO THAT).

This is a case of failed skill transferrence.

The problem is that the applicability of these skills is left to the readers to figure out themselves, which is not a trivial problem to solve. Usually the subject matter is presented in vitro, rarely within an actual context that applies anywhere remotely close to a real-world situation — the only notable exception to this would be physics where you get to carry out the physical experiments yourself, but unless you’re a luge competitor, you won’t be sliding blocks down a ramp anytime soon.

Just as our basketball player had to learn to isolate, abstract and apply the fundamental skills of playing basketball to other contexts successfully, so too must every individual learn to do the same for a myriad of different things we learn during our lifetime.

Back to programming.

Image courtesy of Joe Collins.

Just as with the STEM example above, programming is about a collection of fundamental skills. Coding as an activity in itself is not useful unless you’re reasonably good at it (to monetize the time spent doing it) or can apply the skills learned to other facets of your life.

Things like computer literacy come for free when learning to code. You understand software. You know that the computer doesn’t just “do things” or “things happen”. Reasoning about complex systems is also a useful side-effect, since coding is essentially modeling reality (or any formally describable system) in software. It also allows you to deduce the inner workings of a system based on its behaviour by constructing a mental model of it and tracing the logic.

So, should I learn to code?

The answer is almost identical to asking yourself that about any activity — learning the guitar, playing chess, writing fiction, skiing. Some activities are easier to monetize (and coding can be a very lucrative endeavour relative to other activities), but being good at something often lets you find avenues of income that support that activity, especially if that activity benefits someone else who can afford it.

Just as with competitive sports, coding professionally requires a level of commitment, as things tend to evolve rapidly, leaving behind programmers who have settled for a more languid pace to deal with legacy (and usually lower salaried) positions. If your only motivation is to learn things so you can do them yourself, you’re going to be sorely dissappointed when you will have to deal with a myriad of problems of different scales when you try to execute a real-world project.

Image courtesy of Matthew Bergman.

If that doesn’t scare you away from the prospect of DIY coding, then by all means, join the club. Most programmers I’ve worked with are more than happy to guide fellow learners if they show the determination. And there’s tons of resources and communities that can help guide the newcomer along different paths.

Opportunities are plentiful out there for people who are willing to put in the time, but it’s not something you can expect by just jumping into a coding boot camp for three months. It’s a competitive sport.

If your thirst for knowledge drives your energy, learn it. You won’t regret it.

If you feel like you’d have to drive yourself to study coding (e.g. to land a job) instead of being drawn into it, I’d recommend reevaluating your choices. What you chose will probably lead you down a path where you won’t really get much enjoyment out of the activity, and you’ll likely find yourself stagnating sooner or later. It takes a lot of discipline in order to keep your skills up to date if your heart’s not in it. It’s doable, but it takes active effort that can deplete your energy outside of work. There are plenty of more enjoyable and equally lucrative activities in life besides geeking out on algorithms, lambdas, closures and monads.

If you only need a little bit of coding to solve a specific problem (e.g. install a WordPress plugin, configure some Apache .htaccess files or add a social widget to a template), then you’ll usually just follow a recipe or set of instruction to achieve your goal after a bit of googling. You don’t need to learn about coding to complete those tasks.

There is one notable exception here.

If you are one of the rare few who have learned the art of skill transferrence despite years of compartmentalization within our classical eduation system, then any kind of exposure to anything new will probably result in a better understanding of the world around you.

For you, any new information is a piece of the puzzle you can fit into a broader model of the workings of the Universe.

To you, I say, learn it.

And don’t stop there.