The Polyglot Programmer(agilefrog.se) Which languages do you know and why did you learn them? |
The Polyglot Programmer(agilefrog.se) Which languages do you know and why did you learn them? |
I know amazing polyglot programmers who just know 3-4 languages.
I believe mastering two languages with complementary strengths would be far preferable to just syntactically learning a bunch of languages.
Stated another way, I believe if someone can program at an expert level in one lisp, they probably don't need to insist on learning more of them.
If you progress to "merely adequate" in a smorgasbord of languages but all you can do is churn out CRUD apps but couldn't implement basic algorithms for a search engine you've plateaued.
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.
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.
A polyglot should be fluent in multiple languages, from at least a couple different families, and conversant in many more.
Just enough to change they way you think about programming. E.g., One need not be an expert programmer in Haskell to have learned the benefits of lazy evaluation or strong static typing.
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.
But I may be working on a device driver in the morning (C) and the prototyping some UI ideas in the afternoon (javascript).
Show me someone who has mastered computer graphics and say databases, then I'll be in awe.
But indeed, mastering more areas is even more impressive.
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.
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.
Are they not programmers too?
If you know c++ you could basically roll right into any of those languages I named above in under a week as well.
It is sort of difficult to do anything worth doing on the web unless you have experience with at a minimum Javascript, a serverside language(php, ruby, python, c#, whatever. You could maybe do nodeJS but if you are doing that you are probably already rolling deep in knowledge anyway) and have some experience with some kind of sql like database language. I'm not even counting html or css which aren't real languages but are still things you need to have some understanding of. Also there is a good chance you have a basic understanding of setting up apache and a linux server in a cloud environment.
If you're doing any of this stuff you have probably tinkered with mobile and maybe have some obj-c experience or at least java on android.
Everything is just so tied together these days unless you are just like, a day job programmer you probably have experience with a ton of languages and could get some code going in a bunch of others very very quickly.
Most everyone is on vacation.
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.
I don't doubt linquists dispute something like that though.
It was an easy transition into C++ syntax from my usual C#/Java programming, but the transition into thinking like a C++ programmer was not a simple or easy one. Weeks (months?) later, I am still learning how to be a "good" C++ programmer.
I remember "learning" PHP when I was younger and could probably program quite a few things with it still but I am definitely not a PHP programmer. I have no idea what is considered good or bad practice in PHP land. I could solve a bunch of Project Euler problems in PHP but I could not write a secure PHP application for actual use.
The same goes for most languages I can think of. I've fiddled around with it, written a few small programs, gotten a feel for the standard library, but unless I use that language on a decent sized project I have nothing but a superficial understanding of it.
If you already know how to program, "learning" a new language is trivial, you can do it in a few days, sometimes even a few hours. Learning to write "good" code in that language is not something that is easy to pick up or something that is transfers between languages, even closely related languages like C and C++ or C# and Java.