
Ask HN: Switch career if I'm not a polyglot? - ijustlovego
In job posting I see polyglot thrown around a lot with pride - companies will have an infrastructure comprising of 6 or more languages and they want someone senior who knows all of them - and i&#x27;m only 1&#x2F;6th of that.<p>It took me a long time to get the nuances of my favorite language down (go). I&#x27;m OK with dabbling in others, but it takes me a decent amount of time (months&#x2F;years) to pickup and be actually fluent in a language - there&#x27;s almost no way i can juggle more than a few. There&#x27;s only so much room in my head. I can&#x27;t even get the nuances of English down.<p>Should I look into another career? I&#x27;m wondering if i&#x27;m not cut out for being a developer. Jobs seem to want polyglots (they&#x27;ll say: &quot;you are a polyglot&quot;) and that&#x27;s not an option (or even an interest) for me.
======
squirrelicus
There are three main aspects to learning a new language

\- syntax familiarity. This should come to fluency in a few weeks of daily
usage (or more for languages with very unique syntax in comparison to what
you're familiar with). You'll find yourself discovering new ways to use a
syntax expressively or leverage the syntax for correctness for the rest of
your career.

\- common libraries and idiomatic patterns. This will take years, but is more
linear than front-loaded like syntax. There's always a new pattern or library.
My guess is you're judging yourself on this aspect. Don't. Everyone goes at
the same pace on this metric.

\- infrastructure. How does it build, how to configure the runtime, when does
it blow up or exhaust threads or do random things like spin the CPU for no
damned reason or deoptimize a function. No person can be an expert at a
language without a solid grasp on these features of a language implementation.
You don't go "deep" on a language without it. You should have two or three of
these after ten years unless you're weird and like it. But if you're a 10 year
dev without one, quit.

More to your question: I expect senior backend/fullstack devs to be experts at
at least one language, at least one RDBMS, and at least one extra tech like
elasticsearch, mongo, redis, etc. Without that, you'll just get paid less. If
you're not expecting to be called a senior developer, then you shouldn't be
expected to be deep in any technology. If you're having trouble getting
shallow on new technologies, however, yeah you should probably quit.

~~~
solipsism
_I expect senior backend /fullstack devs to be experts at at least one
language, at least one RDBMS, and at least one extra tech like elasticsearch,
mongo, redis, etc._

OP, ignore stuff like this. "Expert" at a language is an extremely high bar,
and not very important. Workplaces that focus on language expertise (and other
narrow skills like "mongo") tend to not be great places to work. By definition
the leadership at such places clearly doesn't understand what's actually
important. These are the places where management obsesses over ludicrous
metrics and where the worst whiteboard interviews (with questions about
obscure language features) are conducted.

There are places where you're seen as a person rather than a bucket of
buzzwords. Such jobs value your general intelligence and emotional
intelligence a lot more than # years in language X. There's room for you to
bring all kinds of skills and expertise to the table and you don't have to
worry about fitting some mold.

The real measure of success at such places is getting stuff done, and that's
done at the team level. A team doesn't have to be N "experts" at language X
and trendy technology "Y".

~~~
nickthemagicman
I feel like experts 'get things done' with less tech debt though and are
therefore more beneficial to have on a project.

~~~
solipsism
I don't agree at all. Being a language "expert" doesn't mean you know when to
write tests and what kinds of tests to write (which is mostly a language
neutral skill). It doesn't mean you know how to choose between a quick hack
and a well thought out design (and again, language expertise is not the most
important ingredient to producing a good design).

This discussion reminds me of those about "intelligence" and IQ. Many people
believe intelligence is a single measurable metric, when in fact it's a
constellation of many kinds of aptitudes.

Being a senior coder is about _a lot_ more than language expertise.

~~~
nickthemagicman
Hm. I feel like there's a correlation between knowledge of a language and
being able to design well with the language.

I've noticed my design skills go up drastically the more I learn about a
language.

For example in most PHP frameworks there's a service container you bind your
services into. In RoR that does not exist.

Using asyc/await vs promises makes very different design decisions in js and
if you know only one you may not design something optimally.

I could go on. But my point is that lang expertise gives you the knowledge to
design things better, and reduces your chances of putting out a quick hack
because you know how to do things properly and rapidly due to you expertise.

~~~
solipsism
_Using asyc /await vs promises makes very different design decisions in js and
if you know only one you may not design something optimally_

Optimally? How would you even define that? Good developers make good use of
the tools that are laid out before them, and sure the available tools differ
in each language. But: 1\. These languages tend to have more in common than
they do different. 2\. These concepts aren't magic. They're relatively easily
understood, and you can make good use of them long before you can call
yourself an expert in the language. 3\. A good design doesn't _necessarily_
make use of any specific language feature. e.g. a Go library might be well
designed and make use of mutex (a very generic and ubiquitous concept). It's
not a "quick hack" just because the author didn't choose to use channels.

~~~
squirrelicus
An optimal design is one that addresses the most problem complexity while
introducing the least incidental complexity. It's objective, but difficult to
measure. If you use cron to implement a hello world program, the design is not
an optimal one, for example.

------
kstenerud
Polyglot is code for T shaped people: broad knowledge in general and deep
knowledge in 1 or 2 things.

They want someone who explores a bit, checking out what other languages offer,
so that he's not always reaching for the same thing to solve every problem,
regardless of how appropriate it is.

It's like a carpenter who has his go-to tools, but at least knows when a
scroll saw is more appropriate to the task than a circular saw.

------
scarface74
I'm going to answer (or not answer) the question from two separate angles....

1\. I spent nine years at a company where I did some VB, lots of C and C++,
Perl, Java, Object Rexx, Classic ASP, a little JavaScript, some C#, and worked
with MySQL and SQL Server. I had become a jack of all trades but a master of
none. I guess I was a "polyglot programmer". But while my skillset may have
been valuable to the company I was working for, it wasn't valuable to the
overall market. They wanted someone with a deep knowledge of either Java, C#,
or to a lesser C++. My suggestion is to avoid jobs where they want a "polyglot
programmer" especially early in your career and focus on working somewhere
where you can get experience in one or two related things.

2\. I have no opinion on the technical merits of Go, but if you want to tie
your horse to a language, why tie it to a language where there is not as much
demand? In my market, there are plenty of jobs for C#, Java, and Javascript
and the jobs that want PHP and Python developers pay much less. Guess which
languages I focused on after leaving the job I had for nine years.

I am not a polyglot developer (I don't think) but I do try to know at least
one language/framework/technology down the whole stack. For me that's
JavaScript, C#, most major RDMSs and Mongo, and AWS for netops and devops and
a dabble with Python for scripting.

------
sloaken
Doing a quick check of indeed, I see many refernces to Polyglot. Half of the
ones I checked did not use the term properly. One did list it as a 'Like to
have'.

In general what I am seeing is they are looking for people who are not tied to
one thing. I worked with a guy before, anything you asked the answer was 'Oh I
can do that in Cold Fusion'. Another guy 'SQL is the answer'. To be fair,
myself I favor C# as it is the most recent language I have done a lot of work
in. But I am skilled in SQL, and Cold Fusion, as sell as SharePoint, JS, HTML,
LISP and a few others. The important this is to be open to the other
possibilities. Sometimes C# is the answer, but usually something else will
work better, but you have to consider maintainability.

The other thing a polyglot shows is you are learning diversity. Not stuck in
what you learned 20 years ago at University.

For most jobs they have 3 maybe as many as 5 real needs, but usually it is 3.
You need to identify those and talk to how you match their NEEDS. Then look at
the others and see how you can talk around them.

<story> A number of years ago I was working for a company and we were going to
hire another devloper to work with me. My boss created a job posting, without
vetting it through me. I was surprised to see the list of langauages. C / C++
/ C# / JS / Java / Ada / Assembly (2 specific versions), I think there were a
couple more languages listed. These were all 'REQUIRED SKILLS'. I asked my
boss why she did this, since no one in the company knew all those languages (I
knew 5 of them, but I was an oddity, most only knew 2) and we only used 4 of
those (C, ada and the 2 assembly languages). Her answer was 'Would it not be
cool if we had someone who did?'. My answer was they either knew very little
about each or were a compulsive liar. Most likely the compulsive liar.
</story>

------
slaymaker1907
You should look into a new career if you are afraid to learn new languages.
However, something to keep in mind is that learning a new language is
generally not very difficult if you know a similar language in terms of
semantics (i.e. NOT syntax).

For instance, since you know Go, learning Java should be pretty easy since
they have very similar semantics since they are both garbage collected
languages used primarily for writing server side programs.

------
CyberFonic
I have programmed in lots of languages over a couple of decades long career,
including FORTRAN and COBOL, etc. But I wouldn't consider myself to be a
polyglot - I only consider myself reasonable with C, JS and Python. It is my
ability to fully comprehend requirements, design solutions, document
everything that is the core of my success. Whether I write much code or act as
a team leader is a project specific issue.

I hold very serious concerns about any project that requires the use of 6+
languages. Even in an enterprise setting with lots of legacy systems, I would
expect different people to be competent with subsets of all the languages in
use.

Go is an excellent language with a rapidly growing ecosystem. It might be a
good strategy for you to be known as the Go expert instead of a jack of all
languages who is not an expert in any of them. Besides it is not the language,
it is the libraries, the tools and the ecosystem that takes a lot of effort to
be competent with.

------
detaro
There's also tons of single-language/single-stack jobs out there, and tons of
developers in those jobs. Go might be a bit different, because it isn't as
mainstream yet?

b) in the vast majority of cases, I suspect companies using 6 languages don't
have everyone working regularly in all 6, but being able to read or do small
tweaks to code in all of them is useful. I don't recall really seeing job
postings requesting advanced knowledge in many languages, it's more typically
to have one or two and then "nice to have" of further ones.

------
elda534
people building "polyglot" software aren't necessarily "fluent" in all the
languages used in a software project, and it's way more important that you
know problem solving and programming and how computers work to make code as
efficient as you can than just knowing a bunch of programming languages, that
said, you should know at least one language very well, and should occasionally
see what makes others languages attractive or useful

so if you know go very well, you could read code written in something
different, I think you can learn a lot from reading code in an entirely
different paradigm, so for instance, you could read a program written in Lisp,
or Assembly, or Prolog, just as a learning exercise, you don't have to become
an expert

for example, why do people program physics engines in C/C++, but do GUI in
Java or Python? because each language has its strengths (in this example,
performance for the engine, simplicity and expressive power for GUI)

why do languages like Prolog exist? because they are useful for things like AI
or reasearch

now, because a lot of languages sort of inherit from the C language, learning
C is a good way to make it easier to get used to the syntax of those
languages, because it's going to be fairly similar to C, Go itself inherits a
lot from C as I understand it

------
dsalkhfldsahf
How about focusing on a domain rather than languages? Say you're interested in
Natural Language Processing. Pick a language and become an expert in NLP only.
You'll be valued for your domain knowledge even if you're not that good of a
programmer. That way you're not pressured to pick up a handful of languages,
which pretty much do the same thing anyway.

------
brightball
I’m technically “a polyglot” just because I’ve learned different languages
over the years. Trying to use them all at the same time would suck though.

I do a lot more Devops type work now and the knowledge of how different
languages run comes in handy. Realistically though, that much Go experience
should lend you to plenty of opportunities. At the same time, it never hurts
to branch out.

One of the great things about going deep with a single language before
learning others is that you know how to experiment and push things. You know
more about what to look for than a brand new programmer that decides to learn
1 language a month at a surface level. It’s a benefit, not a hindrance.

Don’t bite off 6 at a time, but definitely find something else and learn it
just to broaden yourself.

------
quickthrower2
I would guess that the person who gets the job isn't an expert in those 6
languages. Maybe 1 or 2 of them and the rest they have a basic knowledge of.
It could be doable to get to 3 though. One being JS and the other two being
for the same 'VM' e.g. Kotlin and Java (so you are learning the same
libraries). Or C#/F# as another example.

------
Millennium
Being a polyglot is like magic, but it's not the Harry Potter kind of magic:
it's the David Copperfield kind of magic. We look like we're doing one thing,
but we're really doing something else.

Most polyglots are only really strong in two or three languages at a time.
They may be passable in a few others, but they only remember bits and pieces
of most of the languages they've worked with. They only have so much space in
their head, just like you; the difference is in how they manage it. They
organize their headspace differently, and there are upsides and downsides to
that.

There are four main skills to being a polyglot. The first is knowing how to
separate programming from coding. Your first language is always the hardest,
because you're actually learning two things at once: you're learning the
mindset and methods to create programs, and you're learning how to write down
what you create in a particular language. When you go to relearn your second
language, you don't have to relearn programming: you already know how to do
that. This makes your second language, and later languages, easier than the
first.

The second skill is understanding when and how it's okay to forget. There is
only so much space in your head, and you forget things you aren't using. You
mention this as a problem, but polyglots are no different. The trick is that
almost every programming language was created because its author thought
something was too difficult in the lanuages of the time, and wanted to program
that thing in a way that flowed more naturally in the way they thought about
it. These are the areas where you want to focus your attention: learn them as
thoroughly as you can, and incorporate the concepts behind them into your
general knowledge of how to program. The rest can be forgotten unless you're
using the language often.

The third skill is how to draw connections between languages. As you learn new
languages, focus on figuring out how to do the things you already know how to
do in other languages. This will help you learn them faster, and relearn them
faster (because you're going to have to relearn things you've forgotten
sometimes). There's a book called "Seven Languages in Seven Weeks" which is
good practice for this: you will not become an expert in any of the seven, but
that's not the point. The real goal of the book is to teach you how to
evaluate a new language and break it into parts that are easier to understand.

The last big skill is getting help. A polyglot is never going to have the same
depth of knowledge in a language's libraries as a single-language expert will,
so you need to know where to go when you don't know something. The official
documentation is good. Other people are better, but not always available. You
need to be able to have a sense of what you're looking for, where to get that
information, and how to get it from there. You get faster at this with time.

That's most of it, really. And note that last paragraph: it's important to
rememver that "polyglot" doesn't just mean "awesome". Polyglots get the job
done and they look good doing it, but there's a price to pay for that. A
single-language expert may or may not produce code that's any better than a
very careful polyglot's. But the polyglot will take longer -sometimes much
longer- to produce the same code, due to the overhead of relearning. This
makes experts great, when you can find an expert that can do what you need.
But sometimes, especially when your needs are very specific or demanding or
the language you want to use is very new, it's not feasible to find an expert.
That's where the polyglot shines: if you can't find an expert able to do what
you need, the polyglot will _become_ able to do what you need. Experts sculpt
the language; polyglots sculpt themselves.

You're worried about whether or not you're cut out for this career, but I
think you can succeed. If you want to become a polyglot, I think you can do
that: it's a skillset you learn, not a talent you're born with. If you would
rather develop as a Go expert, that's also feasible: Go is gaining a lot of
popularity and seeing a lot more use than it used to, and there's a real need
for experts. There are ways to branch out and carry on a good career with
either path.

But in the end, it's your decision. This is a big step, and I can't tell you
what's right for you. You don't have to change careers, but you can. You don't
have to become a polyglot, but you can. You don't have to stick with this one
language, but you can. You are not trapped.

~~~
erikerikson
As someone with at least 30 if not 40 languages behind me, this rings true.
Except maybe that language specialists struggle if their language isn't
designed for the problem in front of them and are slower in such cases. So
called "polyglots" tend to be better when the problems are ill defined or
exploratory, where actual invention and creativity are necessary.

------
weitzj
I don’t think you need to be looking into another career.

You have said that you know the nuances of Go, and with that you probably have
touched the outside world like databases, caching, HTTP, TLS. And I think this
is much more worthy to grasp the overall concepts from end to end and knowing
how to integrate your parts you have done in Go into the rest of the
infrastructure.

Of course it is always good to dabble around in other languages and reuse
insights across different languages, but having a good understanding across
the infrastructure stack is in my opinion more helpful.

------
spraak
There are lots of Go specific jobs out there, I've found. I don't work for
them, but here's an interesting example --
[https://jobs.lever.co/geckoboard/27c7e6ff-a02a-4221-a02f-e19...](https://jobs.lever.co/geckoboard/27c7e6ff-a02a-4221-a02f-e1921dc8c804)

------
bogomipz
>"... companies will have an infrastructure comprising of 6 or more languages
and they want someone senior who knows all of them - and i'm only 1/6th of
that."

I would ask them to clarify the statement "knows all of them." If they simply
mean "had exposure to them" I could maybe see that, although 6 sounds high
even given that.

If a company says that a candidate must be "proficient" in all 6 languages
present in their entire infrastructure I would take that as a "red flag" and
not bother applying.

------
mindcrime
Most candidates for programming jobs can't even write Fizzbuzz in whatever
language they identify as their strongest language. If you can write FizzBuzz
without help, in even one language, you should be fine. Keep doubling down on
Go if you like it, and pick up a modest level of knowledge of a couple of
other languages.

If you're applying to a company that expects you to know 6 languages, I posit
that you're applying to the wrong companies. Find somewhere sane to work. If
you're focused on the SV startup scene, maybe broaden your horizons a bit.

