Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

This question already has an answer here:

I'm an aspiring programmer, I really wish to be great at multiple programming languages. I began programming from my school where they didn't teach me well, they didn't follow the standards, they didn't even tell the difference between an IDE and a compiler, they kept calling the Turbo C++ IDE a compiler, which sucked. And at that time I didn't have good internet access. But I do have internet, now I can learn new things and how to do them properly. The problem I'm having now is how to relearn everything and at the same time learn new things.

I'm trying to do JavaScript and Ruby at this time but I can't concentrate on any of these because I'm worried about the one I am not learning (and also when I find something interesting, I get attracted to that and not the one I'm looking for, eg. attracted to C function pointer while I'm trying to learn callbacks in JavaScript) .

How do I manage this? Make a routine? And many of us recommend practicing by making, but I have no idea what to make or making what would be better as a programming practice. Really need help.

Edit: How is my question a duplicate? The mentioned question asks whether it "is" better to learn multiple languages simultaneously or not. What I'm asking here is how to be able to concentrate and manage on learning languages properly. Therefore it is not a duplicate, plus the answers I'm getting here are great (which are not there in that question, I'd like to point out the moderators to quit judging like that).

share|improve this question

marked as duplicate by gnat, Kilian Foth, GlenH7, Bart van Ingen Schenau, jk. Apr 29 '13 at 14:34

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.

Being an integrated development environment, Turbo C++ does include a compiler, so referring to the Turbo C++ compiler probably wasn't nearly as incorrect as you seem to think it is. – Caleb Apr 28 '13 at 3:34
What you mentioned is true @caleb but you know most of my friends till now do not know what an IDE is. – jerryrazz Apr 28 '13 at 3:36
up vote 3 down vote accepted

You don't need help. What you need is a goal, a purpose. That is the easiest way to learn languages. If you don't have a goal, how do you choose what to focus on? How do you learn to accomplish things? A goal focuses your scope from "what do I do?" to "how do I solve this problem?"

You might start with simple problems like Project Euler or something similar.

Have some repetitive task you're doing? Program something to solve it. It doesn't matter if it's been done a thousand times before like calendar applications or task management software or whatever - you just need to find something to work toward.

share|improve this answer
In fact, sometimes it can be helpful if something has been done before, since then if you get stuck you can look at existing implementations, either for general design or for specific details. – lxop Apr 28 '13 at 5:30

I'm trying to do JavaScript and Ruby at this time but I can't concentrate on any of these because I'm worried about the one I am not learning

Pick one and forget about the other for now. If learning a language takes some time t, trying to learn two languages simultaneously will take time nt, where n is significantly greater than 2. Once you have a solid understanding of one language, picking up another goes much more quickly: learning two languages one at a time will take much less time than trying to learn both together. What's more, you may find that you don't really need the second right away.

share|improve this answer

What matter does it make if you make many digressions? If you learn something from each detour, and you can remember it later, then it will eventually become useful.

I started out (after a very informal introduction to Visual Basic) trying to learn both Lisp and x86 assembly at the same time. I didn't become proficient with either; however, proficiency simply came with time, and by learning other languages.

Granted, avoiding digressions will allow you to learn, e.g. JavaScript faster, but the most important things that you'll learn are applicable to most languages, and many digressions can make the learning experience richer—by providing exposure to core programming concepts and techniques across languages.

It would likely be most gratifying to stick to one language at a time, since this'll allow you the gratification of getting real programs working much more quickly; however, I've found that each time I learn a new language I can approach more complex problems more quickly. You'll find that learning your 3rd, etc. language will go by much more quickly.

share|improve this answer

What I have been missing from the other answers is the advice to first build a solid foundation of knowledge.

While you can easily learn one thing after the other, you are in no position to judge which one is the most useful, or which new thing will give you completely new insights. Learning a new programming language is hard the first time and becomes less difficult, the more other languages you know (this is folklore of course).

The reason behind this though is not that the languages are building upon each other and you can transfer things from one language to another. Instead, the basic building blocks of programming languages/datastructures/algorithms/... are common to all of them.

With this respect I find it much easier and more profitable to invest into a solid foundation of programming concepts, before trying to venture into different instances of these.

Going from one programming language to the next depends extremely heavily on the concepts supported by the two languages and whether you are familiar with these (concepts). For example, going from Java to C# or vice versa is not all that difficult, but going from Java to Prolog is like venturing into a whole new world of thinking for most people, because they simply do not have any foundational knowledge about logic programming.

As to how to achieve this foundation, I can highly recommend the book Concepts, Techniques, and Models of Computer Programming by Peter van Roy and Seif Haridi. While it does not teach a practically relevant language (it is based on the language Oz) it does teach the fundamental concepts. Once you have assimilated the knowledge in this book your ability to learn new programming languages will skyrocket, as they are all just different combinations and applications of concepts you know.

share|improve this answer

You are perfectly right, firstly you have to make a flow for what you you want to know, i mean to say, in which language your GOAL is in, and first of all, you need be clear in c language's, either it is c or c++ because it a first step for all languages as you know that, and second thing is it is good to motivate on all language that you said on JavaScript, yeah it is good, but isn't good until you make your PERFECT.

NOTE:- Don't do two things together, because it will make a confusion in your mind :)

good luck :)

share|improve this answer

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