I talk to boatloads of students who are starting to learn to code, and invariably they are hyper-concerned about which programming languages and technologies they should be learning.
Now, first of all, I don't think it matters all that much. You don't fail to break into tech because you learned JavaScript instead of Python, or Go instead of Rust. You fail for a bunch of other reasons, chief among them being a lack of dedication, time, and focus.
That said, choosing good technologies to learn can certainly help. Unfortunately, almost everyone I talk to is only concerned with one metric: the total number of jobs for a given technology.
This is a mistake.
According to Stack Overflow's latest survey, JavaScript is the most popular programming language in the world, both for people learning to code as well as professional developers.
I also did a quick search on LinkedIn Jobs for "JavaScript" and "Golang" jobs. Here are the results:
If you look at those numbers and think "I should learn JavaScript because there are more jobs", you're not alone, but you're wrong.
It doesn't matter how many total jobs there are, because you only need to land one.
-- me
To dive deeper I went to Google Trends and looked at the number of people searching for the terms "Learn JavaScript" and "Learn Golang" over the last 12 months. Here was the ratio:
73/6 is the ratio of people searching for "Learn JavaScript" to people searching for "Learn Golang". Google Trends, like the Sith, doesn't deal in absolutes.
So, let's do some more math:
JavaScript jobs to Golang jobs: 477,512 / 61,673 = 7.7
7.7 JavaScript jobs for every 1 Golang job
JavaScript learners to Golang learners: 73 / 7 = 10.4
10.4 JavaScript learners for every 1 Golang learner
Next, the "competition ratio": 10.4 / 7.7 = 1.4
Based on these numbers, I'd estimate that your competition for JavaScript jobs is about 1.4x higher than your competition for Golang jobs. According to this completely scientific and in no-way fallible analysis, it looks like Go might be a better choice if you're trying to minimize your competition for jobs.
I don't know, probably not. My goal here isn't to convince you to learn Go, Python, Rust, JavaScript, or anything else for that matter. I just want you to think about the job market in a slightly different way.
This has been top-of-mind for me lately due to an anecdote from a couple of years ago. I was working as a hiring manager where I was looking for mid-level Go developers. My coworker was hiring mid-level JavaScript developers at the same company. When I opened a new position I would get 10-20 candidates within 2 weeks. He would get 100+ candidates within the same time frame. I felt bad for the JavaScript candidates.
Yes, but I prefer to think of it as a threshold. Like, if there are only 100 total jobs for a given technology, even if you're one of ten people in the world who knows it, you're going to be entering a very niche market that could dry up at any moment.
It's like, "is what I'm learning sufficiently popular that I can reasonably expect to find a job"? If it is, then I'd argue the next most important metric is the ratio of candidates to jobs.
The next thing to consider is your location. Remote work is great, but I'm a big fan of junior devs trying to work on-site for at least a year or two. You'll learn faster, and you'll actually have an easier time landing a job in the first place (assuming you're in a place with some jobs). When you compete for a local job, you're only competing against people who live in your city, not the entire world.
If Python has tons of jobs, and a fantastic ratio of candidates to jobs, but where you live the only developer openings are for Go and Java, then I'd recommend reconsidering your choice of technology.
Like I said at the outset, you won't fail to break into tech because you didn't choose the perfect stack to learn.
If you go about learning to code by going deep on the basics, you can always learn new technologies as you go. Fundamental concepts like problem-solving, imperative programming, data structures, algorithms, architecture, clean code, io, networking, HTTP, REST, databases, and caching are universal and language-agnostic. If you know how to build a REST API in Go, spinning one up in Express or Django is going to be a quick learning curve.
Syntax is the easy part. Best of luck out there.
Also published here.