

Ask HN: Is it possible to be very good in multiple languages? - Walkman

Is it possible for someone to deeply understand all of the following languages?
Python, Ruby, C, C++, Objective-C, JavaScript, PHP, Go<p>In the last 6-7 months, I intensively learned Python, and I feel I pretty much know all the important basic principles, I can write idiomatic code in it, I can optimize, profile and know the important tools and libraries. I dig deep into Django, I know my way around it at a level where I&#x27;m comfortable with it. (Of course I&#x27;m not an expert at all and don&#x27;t even know the Standard Library deep enough yet.)
However Python is a pretty easy language.<p>What time would it take to learn the other languages at least this level, and is it possible at all to master 7-8 languages let&#x27;s say in 5 years? If not, 10, 15 years?
(By &quot;mastering a language&quot; I mean that you are pretty productive and can get a well paid job with any of the languages you know.)<p>I already know that I want to do programming for the rest of my life, so should I pick one language&#x2F;technology and stick to that and learn it very-very deeply, pick up one and two beside that, or should I go all-in and learn every language as much as possible?<p>I&#x27;m aware of that you should learn general applicable programming principles, theories, algorithms, math all the time which you can use in any languages, but I feel knowing the language itself is also very big part of the process.
======
sdrinf
All three of these are valid strategies. The larger question is, what
specifically do you wish to achieve?

Assuming you're aiming for "pretty productive and can get a well paid job with
any of the languages you know", note that skill in programming is, but one
dimension in the employability equation. A handful of others include: domain-
specific knowledge (both technical, and those specific to the employer's
industry), communication skills, ability to juggle tasks, and ability to sell.
Strength, or lack in any one, or combination of these skills can be an
overriding factor in your pursuit.

You'll often find on these boards, and in software circles people very noisy
about language of choice. This has historical, sunken-cost-fallacy, and mid-
carrier-crisis backgrounds; none of which are particularly productive to your
goal. You'll also find many posts claiming shiny features achieved in one
particular language. This has marketing background, and is also not conductive
to employment.

In conclusion, given your stated goals, your question is a red herring -it
serves to distract you from what you're trying to achieve. It is possible to
be very good in multiple languages. You might even aspire, and reach this goal
within 3-5 years. Whether the industry will need those skills, and whether
you'll be employable in any of these, are separate questions entirely.

~~~
Walkman
Interesting. I assumed that there is a linear relationship between the level
of technical skills and employability. Would you say that if somebody has a
lot of technical skills but lack of the others like communication skills would
find a job harder than somebody with less programming knowledge but more of
these 'other' skills?

~~~
cja23
There is not a linear relationship between technical skill level and "hire-
ability". I would describe it as first a step function, i.e. there is a
minimum level of technical skill to get an interview and be taken seriously.
Then the function is a linear rise, but it quickly levels off to a flat line.
Once hired, higher technical skill will correlate with higher job performance
and success, but again only up to a point where the curve will flatten out
again.

Once you are in the linear portion of the technical skill curve, your hire-
ability is much more strongly affected by the "softer skills": verbal &
written communication, ability to think critically and express that thought,
and the social skills to quickly assess your interviewers and establish a
rapport with them.

After you get hired, better technical skill certainly helps, but it does level
off. Also, it is not indepedent of the soft skills: I've known individuals
with ridiculously impressive technical knowledge and skills, but their utter
lack of communication/social skills not only hurt them career-wise, but
actually made their high technical skill a liability at times.

------
vijucat
In my experience, this is more about memory rather than intelligence / ability
to understand. I used to be quite good at C++ and Perl and then I was asked to
move to Java and these days I work with Scala + Java. In between, I also
learned quite a bit about my domain (financial industry / trading), and ended
up getting good at R in the process. Now, I will probably not pass a C++
interview! :-)

At the same time, if I had access to good notes (that I made), it will all
come back pretty fast. For example, I picked up the "C++ FAQs" book by Cline,
Lomow and Girou from my bookshelf as I was typing this and as I thumb through
it, I am experiencing a lot of, "Ah, right, I remember this now".

> I already know that I want to do programming for the rest of my life, so
> should I pick one language/technology and stick to that and learn it very-
> very deeply, pick up one and two beside that, or should I go all-in and
> learn every language as much as possible?

I would say learn one language VERY well AND make notes. Then the rest can
often be learned by comparison quickly. The problem is that many times, your
employer,a Lead Architect, etc; may decide the language for you, and you may
not have that much say...What's worse is being asked to move back and forth
between related languages, which can be quite confusing!

My conclusion is that both you and I should probably start using Anki or other
memory-aiding software to make notes as we learn! Here's a great article by
Derek Sivers on "Memorizing a programming language using spaced repetition
software" : [http://sivers.org/srs](http://sivers.org/srs). I've read that
article a month ago or so and have been meaning to finally start using Anki
along with my Functional Programming in Scala coursera course, but somehow
didn't.

However, note that some people make an entire career out of being a guru at
one thing. In this path, one key element (that took me too long to grok) is :
don't just learn, WRITE about it. Blog about what you learned. Even better,
write a book about it, attend conferences, etc; That is the way to extract the
maximum return for the effort you placed in learning one thing deep down to
the metal! When you meet people in person, it opens up opportunities that are
exponentially better than merely going to a job search engine!

That was quite rambling; I hope there is something of use to you in there!

~~~
Walkman
Great answer! I thought exactly what you describe; a lot of depends on lexical
knowledge about the specific language... I was using Anki to learn key
combinations of my IDE, editor, and terminal commands, but I did not thought
about to learn a language with it! I will definitely do it!

------
memracom
Going by your numbers, you mastered Python in 7 months. Therefore you should
be able to master all 7 other languages in no more than 49 months which is
about 4 years.

Of course, I don't believe your numbers. You may have been able to master some
commonly used bits of Python in 7 months, but it takes about 7 years to master
anything. Programming languages are a bit of a special case because there is a
lot of overlap so I think that Ruby would take an additional 2 years, but C
would likely take another 5 years. Then 5 more for C++, 2 years for
Objective-C, two for Javascript, two for PHP and another one year for GO.

Of course if you do it in a different order, the length of time would be
different because spending less than 7 years to master something requires that
you reuse a lot of existing knowledge.

In human language terms, for an English speaker to master French, Russian and
Mandarin would take no less than 21 years. But for that same person to master
French, Spanish and Italian would take about 12 years.

The best advice would be to not worry about any of this. Find a job that
requires programming and learn whatever tech you need to use in that job. Then
move on to another job that uses at least some different pieces. If you are
not actually using a language to build real things then you won't really learn
it.

------
zachlatta
In my opinion, if you're not good enough to adapt to any given language, you
have quite a ways to go before calling yourself a software engineer.

~~~
Walkman
I think anybody can, but the question is only in how much time?

