It will take your entire career, lifetime, afterlife, after-afterlife, next life, and beyond to become
proficient in ALL of the programming languages, because there are a lot of programming
languages out there, and the list just keeps on 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?”
Candidate: “Nothing.”
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.