Staying relevant as a programmer

You might notice that I’m wearing suit. At least on my upper body. This is because we are not talking code today, we are talking about your career as a programmer.

In this video, I’ll talk about how to stay relevant in the job market as a programmer. It’s *not* going to be about learning the framework that is currently in vogue, and not even about learning the up-and-coming one — I’m going to tell you to learn fundamentals.

Why am I making this video?

I recently made a video titled ”too many tools and frameworks”.

I posted it because I was so often asked the question ”what framework should I learn”. In the video my response was that there is no such thing as a best tool in general. If you try to find the ultimate tool to solve all problems, you’ll end up with a leatherman, which works, but it’s better to know a lot of specialized tools, like screwdrivers, hammers and saws, and pick from them when you are starting a new project.

The problem with my answer was that it was viewing the question from the viewpoint of ”how to make the best possible software” but what a lot of people were actually asking is ”what should I learn in order to be attractive on the job market”.

What skills are attractive on the job market?

The easy cop-out to that question is to just learn what is popular as hell. As of recording, that would be Angular. Angular is a bizarrely popular tool in organizations, and you’ll have work for years to come. You can also learn SAP or Sharepoint.

Problem: Tools of today will be obsolete.

The problem is that new tools are constantly being developed, so organizations constantly move on to new and better tools, and tools of yesterday becomes obsolete.

Solution: The next big thing

So, I could go one step further and tell you to learn a tool that is up-and-coming, like React and Flux, which is probably what is going to be in enormous demand in the coming years.

Problem: It will happen again

But, you know, things change. 7 years ago, apps on phones did not exist. React will go away too. And even if it doesn’t go away, it will at least be dethroned and more cutting edge tools will be in the lime light.

What to do? Fundamentals.

So what to do? Are we forever cursed to do this constant tooling rodeo, where we try to hold on in the job market for dear life, learning new tools as the plop up all over the place?

Instead of trying to predict the future, which we humans are really bad at — just look at sci-fi movies from the 60-ies — you should learn the stuff that doesn’t change around a lot.

Learn the fundamentals that we figured out in the 70s and that have been true since. Learn programming in *general*. Don’t be better Angular programmer, or even a better JavaScript programmer — just be a better programmer, period.

Learn the language that your tools are built with, and the principles behind it, so that you learn how to build your own tools. If you know Angular, learn how JavaScript really works. Learn about dependency injection, why some people think it’s a good pattern, and some people think it’s a bad pattern. Don’t get me wrong, I’m not saying you should not use tools. You definitely should — don’t re-invent the wheel. But should be picking a tool because you don’t *want* to write that tool yourself, not because you *can’t* write that tool.

Learn another language that is outside of your comfort zone. If you know C, learn Haskell. If you know Java, learn Rust. Hey, create your own programming language — it is a LOT easier than you’d think. Learn data structures, learn what a binary tree is, what a graph is. Learn design patterns, and more importantly, anti-patterns. Learn about how unicode actually works — that alone puts you in the top 10% of programmers. Learn about different kinds of garbage collection. Learn what a Turing Machine is. Learn how memory works.

Or you can learn even more stable skills, such as how humans work in software development projects. All the cognitive biases we have that makes us fail at software projects so often. There is an excellent book called the ”Mythical Man Month” that was published in 1975 about this, and it still holds just as true today, you should read that.

Summary

Learning a popular tool or the next big thing will get you a job, but in order to be relevant in the long term, you should learn programming, not tools. You should learn the underlying fundamentals of tools, so that you know what tools to use, or how to build them yourself when you cannot find one that fits.
If you practice *programming* well, not just individual tools or languages, you’ll be a very sought after programmer.