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.

You can often hear that programmers should learn many different languages to improve themselves. I still go to school and don't have big programming experience (a little more than year). But what was noble intention to improve programming skills turned into some kind of OCD: I feel that I won't calm down until I learn all relatively known programming languages.

And here is question itself: Will being programming languages polyglot actually help you (And I don't mean usual "Programmer should know at least all paradigms", I mean really all languages you usually hear about)? Does anybody have similar experience? Does it help with job/skills/career? How often are you able to apply those skills?

share|improve this question
3  
I think when people suggest others to learn about new languages it's less about learning languages and more about learning new paradigms. My two main languages are Python and C++, learning Haskell has been a great experience for me, because it forces me to think in a different way than I would otherwise. –  Vitor Jul 1 '11 at 13:00
4  
Knowing all the major paradigms really helps a lot. Being exposed at least a bit to all of the interesting languages might somewhat help if you're designing your own languages (and as soon as you get into the Language-Oriented Programming paradigm, you're likely to do so). –  SK-logic Jul 1 '11 at 13:07
4  
"A language that doesn't affect the way you think about programming, is not worth knowing." (Alan Perlis). Amen. –  delnan Jul 1 '11 at 13:18
2  
@Job, knowing 10 programming languages takes only a tiny fraction of an effort required to learn the basics of a single spoken language. –  SK-logic Jul 1 '11 at 15:32
2  
@SK-logic depends. I bet I can teach a child of 6 to speak spanish faster then I can teach him python. –  Raynos Jul 1 '11 at 15:51
show 6 more comments

8 Answers

up vote 10 down vote accepted

"Programmer should know at least all paradigms"

That helps

I mean really all languages you usually hear about

That doesn't help. Although once you know all paradigms you can learn a language a week.

It's simply more optimum to spend a week learning that language when you need that language.

A good programmer is a lazy programmer

Side-note:

Learning common / popular languages isn't as helpful as learning "all paradigms". The former doesn't cover the latter. For example learning Self is incredibly useful for understanding prototypical OO. It's not a common nor a popular language but it's far more useful then learning python when you already know ruby.

Language design:

Knowing most languages is useful if your writing / designing a new language. So there is a solid use-case for it, but it's pretty niche.

What I recommend you do instead:

Read Code Complete 2 at least 3 times

Languages come and go left and right depending on "what's popular". Technology becomes deprecated after months or years depending on what the technology curve is like. (The web deprecates technology at a rate of every 6 months).

Programming technique and Computer Science theory always stays the same.

share|improve this answer
    
But there are many interesting minor features in languages and even learning new language from already known paradigm can blow your mind (for example for me it was Smalltalk) –  Anton Barkovsky Jul 1 '11 at 13:07
    
@AntoBarkowski that's a false statement, don't compare SmallTalk to other OO languages. Java/C++/C#/etc. aren't real OO languages. Of course SmallTalk is worth learning, but it's not the same paradigm ;) –  Raynos Jul 1 '11 at 13:09
6  
People keep saying "you can learn a language a week," but that's just not true. Sure, you'll be able to write syntactically correct code in that language, but there's more to it than that. For example, C# and Java are very similar syntactically and are both OO languages. However writing Java code in C# doesn't make you a C# programmer. –  R0MANARMY Jul 1 '11 at 14:37
3  
@R0MANARMY "<good programmers> can learn a language in a week". A language does not include libraries, frameworks and APIs. My definition of good programmers might be very high though. –  Raynos Jul 1 '11 at 14:54
1  
@R0MANARMY, which of that tiny, unimportant semantic bits you've mentioned can take more than an hour to comprehend? –  SK-logic Jul 1 '11 at 15:43
show 5 more comments

It's not about knowing how to code in a multitude of languages, it is, as you say, about the paradigms. The more options you know about the better. Knowing multiple languages certainly helps, but if you keep learning the same types of languages you'll quickly hit a dead end.

The key is knowing what language/system is best to implement a part of your project. Even if you've decided on one main language (as most project do), you'll still have all sorts of tools, scripts, automation, and build support that have to be written. Usually a variety of other languages or tools, are better at this than your main language.

Just to clarify, I find it silly to try and learn all the languages you actually hear about: there are hundreds of these and often they are just slight variations on other languages.

share|improve this answer
add comment

IMHO, it doesn't. Firstly because you can't learn a language in less than a year. It takes 2 days to be able to write code in it, but it takes a lot of experience to write fluent, and well formed code for the given language. Why GC works like it does, where to allocate memory, which constructs are faster, how to correctly concatenate strings, what are dangerous corners of the language, etc.

I write terrible Java/.NET code being C++ developer, as a lot of Java developers write terrible C++ code.

The best part about learning other languages is that you learn new paradigms, and maybe have a better tool for some concrete problem. Say - you need very quick, nonpublic GUI app, .NET is irreplaceable there.

But learning a language so that you don't use structs in .NET, or don't leak every object in C++, takes a lot of time. I think it's better to spend it on learning design principles, platforms and your language of choice.

But this is only my opinion.

share|improve this answer
2  
"because you can't learn a language in less than a year" False. Don't confuse learning a language with learning the popular frameworks it exposes. Also add "general programming techniques" to the list at the end. –  Raynos Jul 1 '11 at 13:11
    
@Raynos: I figured that was what he was referring to. –  Steven Jeuris Jul 1 '11 at 13:14
1  
My favourite way of playing with a new language is implementing a compiler for a decent subset of it. In total it takes 2-4 hours to get to understand the language and being able to identify and steal the best features from it. Not nearly a year, not even a day. –  SK-logic Jul 1 '11 at 13:14
1  
Well, if you were joining large C++ project, and came to an interview with words like "I have been programming in Java for 10 years, but I've spent last 6 months on C++, so I know the language". I doubt you'd get highly paid senior dev position for that job. So, no, I still think that you can't learn a language in a month or so. –  Coder Jul 1 '11 at 14:25
2  
@Coder, if you were joining a large C++ project, and came to an interview with words like "I have been programming in 20 languages for 10 years, including C++", you'd probably get a job. –  SK-logic Jul 1 '11 at 14:38
show 1 more comment

It's not practical to know them, but it can be very useful to know about them. What I mean by that is when you get a new problem, you can say, "I vaguely remember [other language] had a superior way to solve problems like this. I should look that up."

share|improve this answer
    
I find podcasts such as SE Radio are good for that. They are often about the right length to listen to on a commute to work and you can learn a lot that way. But its of the form Why is <X> Interesting. –  Zachary K Sep 5 '11 at 3:34
add comment

You would help your career more by building domain knowledge then learning a lot of programming languages. Not to mention you're going to need to learn extra tools to go with that like how to use a profiler in your language, same for debugger, best GUI framework and how to quickly program with it, what common 3rd party libraries exist with tradeoffs and language specific idioms.

Its also wiser to learn to do more things rather than many ways of doing the same thing.

share|improve this answer
add comment

I've worked on several systems where components were written in multiple languages (the worst offender required me to deliver code written in Ada 83, C, Fortran 77, SQL, and DCL, whereas my last job required me to deliver C++ and Java code). So, yeah, there are real-world cases where you need to know multiple languages well enough to be productive in them (productive != proficient; you're not going to be a deep expert in C++ and Java and ... unless you're a freak).

Beyond that, the point of taking time to learn multiple languages is to help separate concepts from implementation. For me, OOP didn't begin to make sense until I'd worked with multiple OOPLs. Also, at some point in your career, you will have to rapidly switch gears and start working on something totally new and unfamiliar; taking some time now to stretch beyond what you need to know will help make that transition easier when it does happen.

share|improve this answer
add comment

I think you would be better served learning a few different languages and then at least one in depth before embarking on the need to learn every possible language. Once you have a minimum amount of breadth, depth becomes really important to your progress as a developer. I would have see someone with depth in one or two languages and a smattering of a couple others than someone with a smattering of everything. Getting depth is like learning another paradigm, it will change how you think about programming and it will open up doors to the really complex exciting projects.

share|improve this answer
add comment

It is like learning to speak many languages. Learning them all to the point of being useful is near impossible. Stick to the ones you're likely to use and you'll be better off. You could learn C++, C#, and Java quite well, but trying to squeeze in Perl, Python, VB (not VB.NET), Ruby, and JavaScript to a professional level at the same time is just dumb. There aren't enough hours in the day to keep your skills up in all of them at once.

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.