It will take your entire career/lifetime/afterlife/afterafterlife to become proficient in ALL of the programming languages, because there are a lot of programming languages out there, and the list keeps growing.
Setting a goal to become proficient in all the programming languages is misguided, and you will waste a lot of time and effort. That’s time you could be using by applying one or two or five languages to actually build cool stuff and/or contribute to cool projects.
Rather than trying to learn every programming language out there, try pursuing a more practical strategy:
- Learn a very small number (short-term: one or two, long term: as many as you need) really well.
- Build your skills in general problem-solving.
- Learn about algorithms and data structures and design patterns.
- Learn about computer architecture (what’s really going on in there).
- Strive to truly understand the different programming paradigms, and what they bring to the table.
- Work on real-world, non-trivial projects using language(s) you know.
- Then, just learn a new programming language only as the need arises for a project, or when your interest in a specific language is sparked. You’ll find that, as your general understanding grows, picking up a new language will become easier, as time goes on.
All of that will keep you very busy.
Over the course of your software development career, you will have lots of opportunities to learn new things, including new programming languages. Count on continuously learning—it never stops, even if you’re only dealing with a handful of programming languages.
Remember that programming languages are just tools. It wouldn’t make sense to learn about every table saw ever created since the dawn of table saws, if your goal was to be a carpenter who used a table saw as part of the creative process. It would make more sense to learn about one or two popular ones, and spend your time actually making things. Then, learn about a new table saw only as the need arises for a specific project. That way, you’ll actually be making things along the way. That’s how you learn and improve your craft. “Mastery of many table saws does not a carpenter make.”
Interviewer: “So, you’re here for the carpenter position. Great. What have you built?”
Interviewer: “But your resume says you have 20+ years of experience. What have you been doing all that time?”
Candidate: “I’ve become proficient in using 4,096 different makes/models of table saws, including several treadle-powered saws from the 1800s.”
Interviewer: “So, you know about all these tools, but you haven’t actually done any carpentry? You haven’t built a thing?!?”
Candidate: “Correct! Proficiency in the largest number of table saws has been my primary goal, as long as I can remember.”
Interviewer: “Well, we were really looking for a carpenter who has actually built things. But thanks anyway for coming in today.”
Too many people think that a long list of programming languages is impressive to a prospective employer. I actually used to think that way, when I was in still in school. But the truth is that employers are much more interested in your ability to solve problems, to be able to choose and use data structures and algorithms, to understand what’s actually happening in the system, to debug complex problems, and to pick up new things quickly—including new programming languages.
A long list of programming languages without the experience of building and debugging non-trivial projects, and without understanding the fundamentals, can actually be a huge red flag to an interviewer. I’ve been on the hiring manager side of the interview desk many times, and I would rather see a candidate who might know only one or two programming languages, but has a very strong foundation in problem solving and a strong track record of creating software with the tools they know. If the language(s) they know don’t match what they will need for my project, they can pick that up on the job. Being able to pick up a new language fairly quickly on the job, when necessary, is expected of any competent software developer.