I've been wanting to learn several languages, but I just can't decide the order that would be easiest (granted I know C++, but sadly my OOP is pretty sad as I don't know what to put in classes, retarded I know).
Languages I've been interested in learning (and was solidified after watching a Bjarne interview):
I know I can't learn them all at once, and I know parts of C++, but just figured I'd do a change for a bit and pick up a language or two. Just can't decide which , so I figured I'd ask here as I didn't know which would be easier to learn since C++ was the main language I've used most over the years.
I will pick up SQL too, as I've toyed with MySQL and making applications in C++ under Ubuntu that interface with a database.
I would do the following:
//the above should ease you into OOP
//I really enjoyed doing C and asm at the same time, I used to disassemble gcc code, and see if could understand it.
// Maybe add HTML/XML, python also useful here
In my opinion it's best to choose a new language to learn either because it is a good fit, or will be useful for a new project, or because it will expose you to a new paradigm or will be educational.
Since you already know C++, I think it would be boring to learn C# and Java just to learn the languages. I would save those languages for when you decide to take on a large project and for some reason you think it will be easier than using C++.
Assembly is something I would like to learn, (taking a course covering assembly next semester). The thing about assembly, is (I think) learning assembly should be about a larger goal of learning about how computers work at a low level. Don't expect to find very many practical uses of assembly, expect to be enlightened about what happens behind the scenes. This knowledge may or may not come in handy at times depending on what your working on.
Python is a great language for lots of things. Scripts, numerical computing, making GUI's, networking etc. Learning python well, if you have uses for it is a great investment.
Haskell sounds like a great language to learn. I've wanted to learn haskell for a while, but I've instead taken on scheme and racket as I am working through the exercises in "The Structure and Interpretation of Computer Programs". Interestingly, both MIT (whose course the book was written for), and UC Berkeley (whose course is named after the book), both taught their intro courses in scheme, yet both now teach those courses in python. Scheme is certainly more awkward to use than python but, in my opinion, more fun.
JS is a big payoff if you do web programming. I've always treated JS as a learn it when you need it language. Then again, I'm not a very serious web programmer.
C I think is definitely important to know. If you truly know C++, then you should know C anyways. I started self taught with C++. By the time I took a course in C, I found that I already knew C better than I knew C++. I don't see myself using pure C for anything anytime soon. I might use procedural C++, or some hybrid of C++ paradigms, which is what I do too much of already, really I just need to spend another year immersing myself in C++ literature and learning pure OOP.
Ruby sounds interesting, although I'm pretty sure you can do anything you would with Ruby with python, so it doesn't interest very much for the near future.
Having said all of that, here is the order I would choose:
Of course, depending on your goals, this list might be better organized differently. This list is how I would choose. I'm particularly bias against Java and C#, maybe for no good reason, maybe instinctual or something. What I hear is that it's possible to be more productive using C# or Java than in C++, and that for some things it's more convenient and easier as well. Maybe C# or Java could swap places with C/C++ as a matter of choice.
Last thing I want to say is that I don't think it's best to just make a list and learn languages in an order. C++ for example takes years and years to really learn well. If you waited until finishing learning C++ to learn another language, you would be an old man. Part of the skill set of a good programmer is to learn to be effective in choosing tools for a job. I think a good approach is to just let the project decide which languages you work with. Maybe also choose a functional language to dabble in or work through as part of some self study on the side. Think of projects which will diversify your knowledge. Do a good deal of research about the pros and cons of using different languages for a project (or part of a project). Try to focus more on objective facts about the languages rather than just peoples recommendations/opinions. Maybe you'll conclude the best tool was not on your list (maybe you have never even heard of it yet).
The "whatever" part says that the rest of your list is mostly very similar. It might be good to know what features each has, but there's no point in learning them well, except for the ones you're going to use.
This actually applies to 1), 2) too. I'm not sure what you mean by "learning a language".
It is of literally zero importance what order you learn a set of languages in. If you're struggling with C++, try C for a while. If you're struggling with OOP, try C#. If you want something totally new, learn Haskell (but I would save that for later).
If you're struggling with C++, try C for a while. If you're struggling with just OOP, try C#.
No offense, but this seems like really bad advice. If you're struggling with something, you shouldn't just give up and try something different, you should study it more, ask for help, and learn it properly.
I agree with resident and chris, think of it like reading a book. For a example I'll use studying from C++ books for example. Lets say you are having problems with the way they are trying to teach functions in the said book. A lot of times it helps greatly to grab another resource like another book or a tutorial to have a "fresh" take on the subject. They put it in different context but it is still basically the same thing you are trying to learn.
The same is for what chris said. If he is struggling with OOP moving to another OOP language that is similar might help him grasp it a lot easier then just trying to do the same thing he has been doing even though it is not clicking.
Well, it worked for me. OOP in C# is very similar to in C++. There are some important differences, and some not so important ones, that you need to be aware of, but for the most part they'll be immediately obvious, and if not, they'll become obvious when the C# compiler says "Hey! You can't do multiple inheritance in this language. What's the big idea? You just said this was a Shape. You can't say it's also a Polyhedron. F**k you!"
The cool thing with learning C# (or Java for this matter) is you get to learn the core concepts of OOP without having to deal with the C++ intricacies. Learning one independent thing at at time is always much easier than learning two or more dependent things.
You're right, learning C won't help. C# (or even, dare I say it, Java) will, though.
C# can also help with templates. C# "generics" are like a greatly simplified (and thus less powerful, although in most cases the power of C++ templates is far more than you need) version of C++ templates.
2.) C/C++ ( slight personal bias)
3.) Java (the basics): just to know how to make classes/interfaces/etc.
3.) Assembly (time to learn computer architecture & organization)
4.) C# just for kicks (unity uses C#)
5.) Anything else; other stuff is probably not used too much outside business, but used in science or recreation or a particular API.
I don't really have much desire for 6 since I don't want to do web design for a living, but it could be useful if you want to put a site online really quickly without paying.