

The Polyglot Programmer - kermitten
http://www.agilefrog.se/2013/08/11/polyglot-programmer.html
Which languages do you know and why did you learn them?
======
eliben
Programming languages are just one subset of tools used by programmers.
Therefore, simply counting how many languages one knows is simplistic. It's
not incidental that high-rated CS curricula don't spent most of the courses
teaching new programming languages.

I know amazing polyglot programmers who just know 3-4 languages.

~~~
w3pm
I agree that simply "counting" is a useless metric. I believe what's useful is
exposure to different ways of thinking about programming and problem solving.
In my personal experience, exposure to imperative, functional, logic, actor,
and meta-programming have all enabled me to learn more about problem solving
and to think about programming at a higher level. Can you gain exposure to all
of those concepts, and more, in just 3 or 4 languages? Absolutely. Does the
potential for learning and growing as a programmer end there? I'd hope not!

As a related note, learning new syntax is by far the least useful aspect of
learning a new language. Coincidentally, it's also the easiest element to pick
up and takes little time at all. Incorporating new paradigms into your way of
thinking takes far longer.

~~~
seanmcdirmid
I was lucky enough at UW when I was an undergrad for our PL course to be of
the buffet variety: LISP, ML, Prolog, Smalltalk. These days, most PL courses
tend to focus on PL semantics, while we were taught the languages in the
environments and contexts that they were meant to be used in (quite important
for Smalltalk, but even for LISP).

I've also designed and implemented a few procedural, object-oriented, data-
flow declarative, and logic meta-programming languages over the years. It is
quite easy to get carried away with any of these paradigms, which is why I try
to ground myself to working mostly with procedural imperative languages with
aspects of other paradigms sprinkled in.

------
omegote
We should clarify that knowing how to write a "Hello World" in a programming
language does not make you "know" that programming language. In other words,
how much should you know about a language to call yourself a polyglot?

~~~
BruceIV
Take the analogy from natural languages, and you're fluent in any language
where you can write simple programs without consulting the documentation (or
only minimal consultation), conversant in any language you can get real work
done in, and speak broken language X if you know Hello World and not much
more.

A polyglot should be fluent in multiple languages, from at least a couple
different families, and conversant in many more.

~~~
cgag
What it means to be "fluent" in a natural language is probably even more
disputed than with programming languages. It is a good metaphor in that sense
though.

~~~
SkyMarshal
Fwiw, I've always understood "fluent" and "conversant" to be the opposite of
above - "fluent" being the highest level, indistinguishable from a native
speaker (slang, dialect, accent all spot on), while "conversant" means able to
communicate and get along but obviously it's a second language to you.

I don't doubt linquists dispute something like that though.

~~~
BruceIV
"Fluent" has a rather vague definition, but the word root means "flowing"
(like a river) - if you can speak a natural language in proper idioms without
pauses in the wrong places to look for or translate words, you're fluent.
"Conversant" is a rather lower standard meaning that you can have a
conversation in the language and both understand and be understood.

------
MaxScheiber
This is why I prefer telling people about the programming paradigms I know,
not the languages I know.

I'm not impressed by someone who knows Java, C#, and PHP compared to someone
who knows object-oriented program, functional programming, and programming in
an S-expression language.[0][1]

I've found that a multi-paradigm programmer often has superior reasoning
abilities about how to write scalable, readable code.

Language acquisition within a paradigm is usually laughably easy, once you've
been exposed to that paradigm in the first place. Thus, I agree with the
author's argument if polyglot is defined with respect to paradigms, not
languages.

[0] I'm not sure if picking up a Lisp is considered its own paradigm, but it
seems radically different enough to me.

[1] This sentence is, of course, a generalization. Someone who knows every
nook and cranny of a language is certainly impressive, as they can do some
really remarkable things. However, this generalization has usually held up, in
my experience.

------
ishbits
My effort to becoming a polyglot programmer was to learn different languages
for different jobs. For instance, my chosen languages are C, Python, Java,
Javascript and more recently Go. I believe that each language is better suited
for some jobs than others, and it comprises a full stack as far as languages
are concerned.

But I may be working on a device driver in the morning (C) and the prototyping
some UI ideas in the afternoon (javascript).

~~~
BruceIV
Agreed - I think that good programmers will become polyglots naturally (from
picking up different tools for different jobs), which in turn will reinforce
their programming skills.

------
Moto7451
Totally agree. While it's true you won't master every language you learn, I
find I transfer little gems and idioms from one language into the languages I
use on a daily basis. I pretty much ignored the dynamic programming available
in C# until I worked with Perl for a year. I've also transferred some
functional programming idioms into my Perl and Objective C.

------
dylangs1030
This read like a book report.

~~~
etfb
Not so! If it were a book report, it would be returned for using light grey
ink on white paper. Give teachers some credit!

------
pcunite
In my personal experience the most talented developers have been polyglots.
Not that someone who knows only two syntaxes is not useful. It must be like
musicians ... when you see a person get off the drums and pick up the guitar
... it just puts you in awe.

~~~
seanmcdirmid
Most programming languages are essentially the same; skills are directly
transferable and you just have to learn minor syntactic difference. I would
think it would be much harder to master guitar just because one already
mastered drums, or the other way around.

Show me someone who has mastered computer graphics and say databases, then
I'll be in awe.

~~~
kermitten
I have to disagree, functional and object oriented languages produce very
different solutions. Syntax is just the grammar. Compare e.g. Mandarin to a
Latin based language and you will see what I mean. :)

But indeed, mastering more areas is even more impressive.

~~~
seanmcdirmid
Few languages are pure FP or OOP, at least all the modern mainstream languages
are hybrids. How different is python from c#? Ya, they are different but not
incredibly so. Definitely not the diff between Latin and Chinese.

------
kermitten
Which languages do you know and why did you learn them?

~~~
seanmcdirmid
We are in the dog days of summer, so the amount of good content to report here
has probably gone down, leading us to puff pieces like this with very little
content.

~~~
kermitten
I'm sorry you didn't like the post. Perhaps you can provide a little more
feedback? :)

~~~
seanmcdirmid
There is nothing wrong with it for what it claims to be. It is just content
free and shouldn't be normally front page material, except right now there
isn't much competition.

Most everyone is on vacation.

------
pfisch
So it seems to me like this article just described being a programmer.... If
you don't know at a minimum 4+ languages I'm not sure you should be called a
programmer at all.

~~~
cookingwithrye
I understand where you're coming from, but I strongly disagree.

I've worked with multiple living counterexamples to your point - they only
knew one language (sometimes old and non-maintained), but they could blow the
next whiz-kid out of the water in terms of logical thinking and its
application to software development.

IMO the only requirement to being a "programmer" is "programming", and
restricting it any way beyond that hurts the field.

The guy that's been doing systems programming in C++ for 10 years should
probably be considered a "programmer" despite not knowing the latest compile-
to-js language of the week.

~~~
pfisch
I'm not even talking about the little languages that just come in and out of
fashion all the time.

If you know c++ you could basically roll right into C#, Java, PHP, etc in
under a week and be doing real work in them. Maybe you wouldn't have the
intricacies down immediately but you could be doing production code level work
very quickly.

~~~
bandushrew
You could, but I wouldn't recommend it.

Learning a new language, say C++ -> Java is WAY more than just learning the
syntax. There are best practices for solving certain kinds of problems in each
language that differ between language.

Sure, there is a high level similarity between the solutions (hey, its just
the observer pattern, right?), but there are also likely (IME) to be many
critical differences in the details.

------
arxpoetica
Lets not forget the polymaths in this analysis.

