What other fields should I pick up along the way? And, do I need to have significant knowledge of AI/ML/Cloud-computing/Data-Science, etc. to sustain myself in the long-run (long-run being defined as 15 years)
That said, if I had to choose a couple of languages for the rest of my career I would choose C, C++, and SQL. All of those have enjoyed huge success since they were introduced, with mountains of legacy code and plenty of new development.
Once you master C and C++ a lot of similar languages should be very easy to learn: Java, C#, Python, Go, Ruby, PHP, Swift... they are all more alike than not.
As a hiring manager I would not be very interested in someone who only worked in one or two languages, or only had language expertise to offer. A candidate stuck with two languages for years would send the wrong message for sure.
To build and sustain a long career you need to solve problems and add value. You need to get along with people and contribute positively to a team. You need to learn business domains, not just languages and tools. You need to be the person who says “I can figure it out,” not the person who says “Leave me alone, I only want to write C++ code.”
Companies would like to have people that are flexible and can jump on any language or technology while people have a natural need to sharpen their skills and build upon and enrich their existing knowledge.
Learning the Nth framework or language is neither of those. It's a grind, it's waste and it's always running only to stay in the same place. Programmers instinctually feel this, but the argument of flexibility is persuasive and market success does seem at least to correlate with breadth of skills.
To put it bluntly: many programmers don't give a crap about building successful products or producing value and instead want to become masters at what they do.
If we don’t constantly hone our skills and learn new things we risk getting left behind. I think programmers can imagine that as a bigger threat than it is, but it can happen if one chooses a dead end to specialize in. Not getting in on a trend early presents the risk of getting left behind, especially in today’s tech hiring process that often requires experience with relatively young languages and tools. That said I would still focus on the larger trends rather than specific languages or tools.
When I got into programming 40 years ago it was just barely possible to learn most of the major languages and tools used in business applications. Today that’s not even possible for niches like web development. I read an interview with Bill Gates a while back. We’re close to the same age. He said he just got lucky, born at the right time, and he got into programming as a teenager and grew up with the technology. He said it’s much harder now to get started because there are so many places to start, so much to learn, and the languages and tools continue to drop on us faster than we can keep up. That can lead to despair, or over-specialization.
I now specialize in web applications, but I can’t learn everything, so I don’t try. I wait until something gets traction, when I start seeing demand from customers (rather than HN buzz or a mention in the TIOBE rankings), before I pay attention to it. Once a language or tool gets significant traction it tends to have a long lifespan: Unix, C, COBOL, SQL and relational databases, PHP, etc. I work mainly on legacy software so I don’t have to stay bleeding edge. I know this seems like a boring “I give up” path, and I partly got here because of increasing age discrimination, but it let me relax a bit about keeping up with beta versions of Rust and React and focus more on what my customers actually want.
Mastering every intricacy of a language and its ecosystem has value but that’s not what most employers or customers care about or pay for. My customers almost never care about the language or tools I use, or quality of the code, or anything programmers obsess over. They care about spending their money to get more value through reduced costs or increased efficiency.
You can optimize to impress your peers, or to always have a job (or customers if you freelance). Depends on your priorities.
Programming expertise is largely cumulative because the basic concepts apply in every language. Someone with 5+ years experience with real C++ projects shouldn’t struggle too much with Java or Python.
While this is a plug, I genuinely believe joining the event and talking to them would help you. The networking / hallway effect, even virtually, shouldn't be underestimated either.
Good luck -- there's definitely lots of system software people needed, as someone else here pointed out.
On the Problem Domain front, Cloud Computing and Data Science are here to stay. They are fundamental shifts in the computing space and hence one needs to become knowledgeable in them. I am not too gung-ho on the AI/ML fad since there is too much hype around its supposed benefits but of course you can study it for its intellectual challenge and apply as need arises.
From a current industry/job pov, i think the following are the most important ones; C/C++, Python, Java, SQL, Javascript and C# (from MS ecosystem). They allow you to tackle different possible domains.
Also given the prevalence of distributed systems; Erlang/Elixir are good to learn.
In the first few lectures he lays out what he thinks it takes to be a great programmer. I’m pretty confident that there will be a job market for great programmers for at least the next 15 years.
Programmers who can solve problems, add value, and work with other people will always be in demand.
They are hard to replace, are tough problem solvers and deliver code in our toughest environments.
I think all this data/ai focus is nice, but I think hardware is the real deal breaker. Have an eye on Rust in all the regards.
- C as a workaround for a Docker problem.
- C++ with C# in Unity.
- C++ in Android with Kotlin
As you hinted in the question, it is good to combine C++ with other skills.
If you want to stay purely in C++, then the automotive and aeronautical industries are heavy C++ users.
But as @gregjor says its best not to stick to one language. To add to that, I would recommend not to define yourself by the language you program in and instead be prepared to stay flexible and keep learning.
It’s not just the limited skill set. I’ve run into too many programmers who only want to work with the tools they know and like, which limits their usefulness in a team and in the business. Most companies write and use software as a tool to solve business problems, they aren’t all that interested in catering to what programmers think is cool or fun.
I’m all for mastering language and tools, as many as you can, but if you want steady employment keep your eyes on what employers look for.
They were completely different domains.
Regardless of what I think about C, it is undoubtly the king of UNIX/POSIX platforms and embedded development. So that might be an area you feel at home with.
Although C++ has lost the full stack role it once enjoyed with the 90's OS stacks, it is the current king of GPGPU programming (CUDA, Metal Shaders, SYCL and HLSL), HFT, what game engines use at their core.
Finally as many are pointing out, don't silo yourself with one language, most of use many languages at once.
For example using C++ alongside either Java or .NET is quite common.
C is mostly used these days for embedded systems. C++ for high performance network services. Higher level and more sophisticated languages are coming for those domains, e.g. Rust. Lua is interesting for embedded systems, and the Erlang VM for network services.
FWIW, I am on year 16 of my own C/C++ only career.
EDIT: Huh I’m old