Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I know a few programming languages. The most marketable ones being Java, Javascript, as well as non-trival stored procedures. I also know some Python, Actionscript and a few dinosaurs language. I am starting up a toy project with Scala/lift. I enjoy each language for its own features and the paradigms they encourage.

I am interested in the concept of a polyglot programmer and becoming one. What are the steps to being a true polyglot programmer? (I.E. I don't just know different languages, I know them well, and know good design patterns for them.) Is this something that can be made marketable?

share|improve this question
7  
Do you mean "polyglot programmer" as in "programmer who is fluent in lots of programming languages" or as in "programmer who writes polyglot programs"? –  Anna Lear Nov 7 '11 at 19:37
2  
@AnnaLear: I think to do the latter properly, you'd probably have to be the former. –  FrustratedWithFormsDesigner Nov 7 '11 at 19:41
1  
@FrustratedWithFormsDesigner Sure, to a point. If you only know two programming languages you're technically a polyglot, but it's nothing to write home about. –  Anna Lear Nov 7 '11 at 19:44
2  
@AnnaLear: I actually tried writing a letter to my mother describing what I did for a living (this was back in the 80's when she was about 75). Did. Not. Work. She thought I was making up words like disambiguate. :-) –  Peter Rowell Nov 7 '11 at 19:50
    
What do we mean by being polyglot programmer? check wiki : en.wikipedia.org/wiki/Polyglot_%28computing%29. Is it intended to mean writing such programs? –  Dipan Mehta Nov 8 '11 at 16:47
show 2 more comments

5 Answers

up vote 17 down vote accepted

I'm a very advanced programmer in several languages. I don't know if that make of me a polyglot programmer, but I'm at least on the path.

Here are the thing I consider important to get this qualifier and some tips on how to get them.

First of all, you need to master several programming paradigms :

  • Procedural
  • Object oriented
  • Functionnal
  • Event driven
  • Metaprogramming

To get to this point I suggest two things :

  • Try programming languages that promote paradigms.
  • Try paradigms in languages that do not promote them (it will show you what a given paradigm is about, what problems it does solve, and what the computer is actually doing when you use them). Good exercices are OOP in C (build the vtables manually, that's what real men do !) or non types languages in a strongly typed one (see std.variant for an exemple of that in D).

Then you'll have to know good practice and why they are good practice (remember, you have to know the WHY of a rule, so you know when to break it).

  • DRY
  • Separation of concerns
  • Naming (actually this is one of the most important because the code will tell you things throw names - for exemple, if you can't find a short and accurate name for a variable, then the variable isn't in the right place or its purpose isn't clear).
  • Many other, so many actually that I can't do a list here, but I think I have already given some of the most important ones.

To progress on that point, I suggest books. The pragmatic programmer is a good one, clean code too. Code complete is excellent too, but quite hard to read, because it's big and very dense in informations (but that is also its strength !).

You need also to fail badly at applying thoses concept and ends up with code that looks like jungle. Hard to travel, hard to adapt, with unfriendly inhabitants. This last point is the key because it will teach you how to use the tools to get quality code. What is the matter if you know what is quality but can't master tools to create it or vice versa ?

If you master the given point, you can consider yourself as a polyglot programmer IMO. By the way, this isn't all you need to be the greatest programmer. Computer science, knowledge on current technologies, management of yourself (sometime of others :D), understanding of the requirement, and so many other are required.

As a final tips, I suggest you to get involved in a recent language under active devellopement. This will teach you how language are created and why. This will teach you the limitation of actual languages, the difficulties you face to get better alternative (if that was easy, I would have been done in a first place !). Mine is D. It is also a multiparadigm language, so it is a good candidate. Choose yours !

Good luck. This require work, but it worth it !

share|improve this answer
    
Thanks much for the helpful answer. –  TheIndependentAquarius Apr 24 '13 at 4:42
add comment

The most important thing I would say is not to think in terms of programming languages, but in programming concepts. OOP is still OOP in Java, C#, C++, and Python. Every language has it's own quirks with how it handles it, but OOP concepts are the same no matter what language you are writing it.

share|improve this answer
3  
And not to mention that OOP is one of the least important concepts out there... –  SK-logic Nov 7 '11 at 19:54
    
@SK-logic But it works fine as an example. –  Anna Lear Nov 7 '11 at 20:40
3  
@Sk: Somebody isn't a religious zealot, are they? –  Dunk Nov 7 '11 at 23:06
    
This is a great answer. The important thing is to learn concepts and paradigms well enough that one can implement them (to the extent it's possible) irrespective of the language of implementation. –  DavidO Oct 4 '12 at 17:40
add comment

If you really want to put your diverse programming languages knowledge into a good use, consider adopting the language-oriented programming model. This way you'll be routinely inventing and implementing new languages, and knowing as many language concepts as possible is highly beneficial there.

share|improve this answer
add comment

I do NOT consider myself a polyglot programmer, but the few languages I do know span very different styles of coding. I would suggest the following to start:

  1. Know how to program well in a lot of languages. Duh.
  2. Be aware of the benefits and drawbacks of different language fundamentals. Some languages are by nature object-oriented, some string-oriented, some data-oriented. Be able to appropriately assess when a given style should be used.
  3. Be familiar with many different coding styles. As many languages have their own idiosyncrasies, be familiar with these; it will make your code much more readable to the developers of that language.
share|improve this answer
add comment

Even the most versatile polyglot programmers have strong and weak languages; the point of being polyglot, IMO, is not so much having in-depth knowledge of a lot of any particular language, but rather being able to switch between languages and paradigms at ease, and being quick at picking up new ones. I don't think being a guru in 12 radically different languages is a realistic goal, but being fluent in four to six languages (including the core libraries they come with, and the customs and cultures of their respective communities), plus basic knowledge in another six to ten languages is certainly doable.

As far as marketability goes; there is certainly potential for a flexible programmer, especially in smaller shops, where being able to assign any programmer to any project is more important than having a bunch of specialists who won't function well outside their area of expertise. Most companies focus on a single technology stack (e.g. .NET, Java, LAMPP), but there are certainly others that use different platforms per project.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.