Trying to decide what to learn next is something I hear discussed a lot between developers. Sooner or later the topic of conversation usually ends up talking about whatever technologies are most useful to employers based on whatever the latest job vacancies are listing as “essential skills”.

Whilst you should endeavour to keep your skills up to date, I prefer to just focus on learning for the sake of it as a regular activity. This is as opposed to being too concerned with needing to know a particular technology for whatever arbitrary reason.

I suppose I should probably justify that statement with some reasoning.

Firstly, I believe you learn a subject better when you have an interest in it. If it’s something you enjoy doing you’ll happily engross yourself in it to the point where you’ll lose track of time. If it is a chore to you, you’ll probably end up doing the minimum and not digging deeper into the subject in question.

I think developers can get hung up on languages and will often procrastinate on which language to learn over another. I’ve found that once you become proficient in a few languages you tend to easily be able to pick up and learn new languages on-demand as and when you need to.

As an example, I don’t know Java. But I do know other heavily object-orientated languages like C# and VB.NET which run on top of a managed runtime. So if I had to learn Java at short notice, I’m hoping I could give myself a crash-course and get the basics under my belt within a reasonable timeframe based on previous experience.

Languages are just syntax and, this may be a bold statement, but think it is probably fairly easy to learn a new language if you already know a couple which are based around similar programming paradigms. Although, to be honest, if I see a new language my initial thoughts are: What datatypes are available? How do I create and assign to variables? How do I write a basic if statement? Then I learn the rest as I go.

Bouncing between languages can bring benefits. I remember coding a lot of .NET without having much need of or giving much thought to asynchronous programming. Following that, I worked more in JavaScript and found to be effective I had to learn about and embrace thinking about code in asynchronous ways. The really cool part was when I hopped back over to .NET I understood Task<>, async and await as a bonus.

I’ve also flirted with C++ now and again, although I’ve never created anything meaningful beyond a basic Windows application with a Close button. My first experience was using cin, cout and raw pointers. A few years later I came back and modern C++ was a thing. Syntax looks friendlier (from my point of view) and smart pointers felt like something which should have been in there from the start.

Lately I’ve started playing with Rust: A compiled language which promises the same raw performance as C++ but designed with memory and thread safety as a primary concern. It’s a new language which may or may not go mainstream but I feel that learning it teaches me more about programming in general. So I’m gaining valuable experience either way.

Here’s another: Which JavaScript framework should you learn? Again, I say any! If you learn a couple you find there are plenty of shared concepts between them. One-way and two-way data binding between a JavaScript model and the DOM. Components and modularisation. Routing engines. Once you know a couple, you could probably learn another framework fairly easily. Also your general level of JavaScript experience is going up with each line of code you write.

To sum up: I believe that, as a developer, doing ANY programming-related activity increases your knowledge. Swapping between languages and programming paradigms gets you thinking about problems and their solutions in different ways.

I don’t think there is anything I’ve ever learnt about computers and technology that I would consider to be a waste of time.

My current obsession is the PICO-8 fantasy console. It’s an emulator for an 8-bit console that doesn’t exist! You code it in Lua and it contains a complete suite of embedded development tools. It’s a crazy amount of fun!