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.

This question already has an answer here:

So I have been developing with PHP for a year and a half now. Somewhere along those times, I decided to pick up skills in Python and Ruby, and learn ASP with C# just recently (as my first compiled language). Adding to that I'm a sucker for good CSS and Javascript coding.

What I'm worried about is that this is a huge undertaking. Please don't tell me "you should focus on one language" right now because it's just that my damned brain is telling me to study the aforementioned languages and get up and running ASAP.

I'm 21, and work at a small web dev company. They're not that strict so I can sneak some time learning Python and improving my PHP. At home I work with Ruby and C#. I have done the following to effectively manage my learning process:

  1. Focus on web-only projects
  2. Reuse my codes from PHP and convert rewrite them according to the language syntax (to Ruby, to Python)
  3. Create an online blog to store some of my codes in case I need to get back to them later

I know it's quite insane to juggle 4 server languages and 2 frontend languages at once but hey, I am having fun doing this. I'm not saying I want to master them immediately, because I know it takes years to master a single language.

Have you done this before? How did you manage your learning process? Did you give up halfway and just focused on one?

share|improve this question

marked as duplicate by gnat, Kilian Foth, GlenH7, Jalayn, MichaelT Apr 29 '13 at 14:39

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

3  
Only if you can date 3 chicks at the same time. –  Job Nov 29 '10 at 4:34
    
I hope I can cheat with languages too XD –  Ygam Nov 29 '10 at 5:02
    
Having fun's the best way to learn. Keep doing what you're doing! –  kirk.burleson Jan 1 '11 at 2:45
1  
This should give you a good start :) Its all in the IDE's How many programing languages do you work with on a daily basis and how do you effectively manage language specific tasks. –  Aditya P Apr 26 '11 at 19:29

5 Answers 5

up vote 8 down vote accepted

Dude, what's the question again?

The simple answer is that if you're learning for the sake of learning and saying that you know this and that language, then that's okay. But the consequence is that you totally, absolutely suck at all of them after this exercise.

The difficulty in shifting across languages is not the syntax and the concepts. Those are general, really. The difficulty is in mastering the nuances. How does the CLR allocate memory for a generic object in C#? How does Ruby execute its iterators? How does PHP parse strings? How does Python do its thing (lame analogy coz I haven't touched Python).

Translating one program into another ala Rosetta stone across several languages is totally, totally irresponsible because each language will have its own "right way" of doing things. The exercise will only make you succeed in something akin to having a Chinese guy translate French to Chinese and then Chinese to English to write a French-English dictionary. It's a disaster.

Suck up your pride and your programming ADHD and focus on one thing. Or focus on just two languages at most, making sure your priority is doing things the right way, on both languages.

share|improve this answer
2  
Totally disagree with this. The more branches you learn the better understanding of programming you have, only learning one language holds you back. At the top-flight universities they expect you to pick up multiple languages at once in the first term, let alone in years. The more the better. –  Orbling Nov 29 '10 at 2:59
1  
But in the university and even at work you have some sort of guidance you will have to follow, like a syllabus, or a project requirement. When doing this on your own it's quite flaky unless you make a guide on what you want to accomplish. –  Jon Limjap Nov 29 '10 at 3:09
    
hm...so if I create some sort of a guide then I can get through with this? Must create one...must create one... –  Ygam Nov 29 '10 at 3:37
    
Rosetta stones should absolutely not be direct translations. If each "thing" (in "the right way of doing things") is not done idiomatically, you've just wasted your time. –  Frank Shearar Apr 26 '11 at 15:00
    
I'm currently brushing up on my Lua (learnt it years ago, but it's changed a bit since then), learning an old-timey assembler, relearning (through implementation) Forth, brushing up on my Prolog as a prelude to learning Mercury in-depth and perfecting my Erlang. All at the same time. The trick, for me, to accomplish this is to make sure that each thing I'm learning is in a different project. The Lua is being used to write the cross-assembler for that old-timey machine. That assembler is being used to implement the Forth. And so on. It's quite possible to learn multiple things at once. –  JUST MY correct OPINION Apr 26 '11 at 15:16

I haven't done something like that simultaneously but I knew someone who did in high school. He basically floundered and he really couldn't do much of anything in any of the languages. I would personally suggest you stick with one language until you get it down pat and them move to another.

share|improve this answer

They are all programming languages, and aside from syntax confusion issues which your compiler can catch for you, there is nothing wrong with working in multiple languages at once. There was a time not long ago where I used Java and MySQL at work, PhP, Javascript and MySQL for one side project and C++ for another. I switched between them often.

I find its actually quite pleasant to use more than one language at once. It keeps me thinking about design patterns and over all design and prevents me from getting stuck in language specific stuff. Often I find I'll get an idea for a pattern from working in one language that I can then apply to another.

tl;dr Go for it. You'll enjoy it and it isn't that hard on you.

share|improve this answer
2  
Then again, there was the time I was working on four operating systems simultaneously, wanted to delete a file, and froze for several seconds because I just couldn't remember how to do it on the keyboard I was at, and was aware that some of the wrong answers could do bad things on some OSes. –  David Thornley Nov 29 '10 at 20:23

Look to master one, know the others...

To be fair, I think you will find many SO users that have several languages under their belts.

Web development is such that one is forced to juggle a few languages domains to get things done. So it does not come as a surprise.

However saying that, "Mastering" a language is a-lot harder. Some languages have a great deal of depth, it can take decades. Sometimes it is not even possible as languages can also change over time.

The simple answer is:

Yes you can, but you probably will not master them all at the same time. Becoming productive is a another matter.

share|improve this answer

To learn multiple languages simultaneously effectively, plan your time just like you would for anything else. Set aside some chunk of time to work on each thing. If necessary, take a small break between the chunks so your brain can switch contexts.

When you're more familiar with the languages, you'll have less language context switching (although of course the task context switching time remains).

share|improve this answer
    
+1. I would also add as a requirement that each language you're learning should be used in different projects so that when you shift mental gears into the language, the shifting of mental gears into the project helps as a cue. –  JUST MY correct OPINION Apr 26 '11 at 15:18
    
Yeah, that could help, too. My current project required me to learn Ruby and Scala at the same time, so I didn't have much of an option there! –  Frank Shearar Apr 26 '11 at 19:56

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