It seems like everybody needs software engineers. Demand is much higher than supply. This translates to jobs with good pay and lots of options to choose from. Want a full-time job? Startup job with equity? Remote contract work with 3 months off every year? No problem!
When I was just beginning to learn about programming, I wondered whether there would always be a need for millions and millions of programmers.
After my 15 years in the industry, it looks like the demand is going nowhere. Some stats from the US Department of Labor:
Here are my observations on why that is:
1. The whole world runs on software
This is probably obvious because it's a transition that's been ongoing for a few generations. However, it cannot be understated. Every single business and organization in the world needs an app or a website plus lots of software, often custom if the company is large. Every person with internet access (which eventually will be the whole world) uses lots of apps and websites every day.
2. Most things get built many times
Why is there Bing when there is Google? Why are there a thousand competing e-commerce platforms? Why are there a million messaging apps, each built from scratch by a different team? This seems like the duplicated effort but it's normal. It's just how competition works and it's not unique to software. For example, there are many car companies, each with tens of thousands of employees designing and building very similar cars.
Part of the reason is software is still local. There is the "X of Asia" for almost any X you can think of.
3. The code has a limited lifetime
It might seem that once an app is built it is "done". When I worked at Facebook people asked me "Is there still anything to do?" However, most code is being changed constantly and most companies are constantly hiring. Each line of code has a lifetime of only a few years. Sometimes as a product gets old it's easier to throw it away and rebuild using modern technologies. I've seen this happen to custom in-house systems and public-facing websites. This is again similar to car companies constantly innovating and designing new cars.
From the 3 points above you can already see a clear pattern:
Everybody needs more and more software
There are more and more software solutions to do anything
Each solution requires software engineers constantly
But what if programming becomes easier over time? Surely we would need fewer programmers then? Read on...
4. Code sharing didn't happen
In the 90s there was a dream of code sharing, where we design software components with business logic inside them and anyone will be able to reuse them like lego bricks. This didn't work out, not even reusing business logic across projects written in Java. Across technology stacks, the story is even worse. There was COM but it was Windows-only. Yes, you can call Rust from Python but it's not become the standard way of building software. There are many programming languages and new ones are coming out. At my last company, we rewrote an existing codebase from Ruby to Rust.
Code reuse did improve over the years thanks to package managers, GitHub and an explosion of open source libraries. Systems like npm are a huge step forward. However, we came nowhere near the dream of true code sharing. Open source libraries help a lot but not enough to significantly slow the demand for engineers.
5. Tools are improving but projects are getting more complex
Using a language with a garbage collector in a modern IDE with lots of libraries and going "serverless" is more productive than writing C++ in 1995. Can you now hire five times fewer engineers than in 1995 for the same project? Probably. But instead, it's more likely you hire the same number of engineers and the project will be more ambitious because customers came to expect more.
6. New platforms come out
Ten years ago it was enough to hire web developers. Now you need to hire web, Android and iOS developers. Depending on your product, you may also build Messenger bots and WeChat apps.
7. Extra (for fun): AI to replace software engineers?
Imagine someone designs software that can replace most engineers. For example, instead of a team of ten engineers, there's one human "tech lead" who gives very high-level commands and the program translates them into bug-free code.
No-one has a good idea when this could happen. If it happens the demand for engineers would drop immensely. But with such technology, the demand for humans in other professions would likely drop too, so relative to other professions programming might still be in demand.