I've been making numerous posts on my blog about not knowing the C++ language very well. And I don't. The problem is, I know it pretty well. I just don't know it correctly. I learned wrong things from a ten-year old book. I've been trying to learn Java (Head First Java, Second Edition), and it's all fine, however I'm wondering: Should I learn Python.

I really want to learn so many things, and I can't decide between starting over with Python or Java (I quite literally mean starting over). I'm starting over so that I can learn programming the correct way, without learning things that aren't true. Should I abandon the java I know and start with Python, or should I continue with Java? I'm torn.

(I'm still working on finishing my projects in C++, however after I finish my current projects I will either be full-time Java or Python)

I think python is great, if you want to learn more about programming, and less about syntax of a language. I think you should continue with c++ though, it's a waste if you leave half way. And those articles, would be nice if you finish them.

As with Apoch, why one or none? I diverge a bit though, you know C++ already, the only thing you gain by going to a new language is well it is another language. If you are having issues with writing solid code, the language is unlikely to be at fault and you are probably going to just do the same things in the other languages also. I believe you would be better suited asking 'why' what you are writing is incorrect, broken etc than changing languages as some way to "fix" the problem. I learned by being beaten about the head and neck with my keyboard by senior programmers "DON'T DO THAT". If you don't mind constructive criticism, it is the best way to learn any language and more importantly "how to program" beyond the language specifics.

GD should probably add a new forum group: "Codereview" with beginner, to advanced levels for just that sort of posting. I know I would hang out there a fair amount as I also learn by helping to correct things and many folks looking at something often comes up with a really kick ass solution everyone can learn from.

It's not that I know C++. I really don't know the language. I learned it wrong (Basically, the book I learned it from explained everything wrong and had many, many errors). I want to start over with a new language and learn it correctly.

You say you don't know, or don't have a clear understanding however, by learning Java (in my opinion) it seems you are now able to see the (potential) flaws in what you were doing, pre-Java. This is a GREAT thing! You now have a new insight in order to identify where you have been going wrong. Use that knowledge to push through with C++. You can look at your current projects and identify areas which you might say "What the heck was I trying to do there, it would be much better this way!". You then note these down so that, if you come across a similar problem in a new project, you can avoid tackling it in the old way, and implement a cleaner, more concise solution.

If you do go the way of, "I'll learn a new language instead" then you have this great insight, and whilst you can apply it to correctly learning said language, you will actually be holding yourself back a bit. The best way anyone learns is by making mistakes. It's how we treat these mistakes that makes us more knowledgeable. You can either give-in (I'm not saying you are, it's more of a general statement) or, you reflect and build on how to you are going to correct these.

Keep learning Java, keep learning C++, maybe learn Python (only if you have time, or you might burn yourself out too quickly).

It's not that I know C++. I really don't know the language. I learned it wrong (Basically, the book I learned it from explained everything wrong and had many, many errors). I want to start over with a new language and learn it correctly.

You are talking about two separate things. You can't "learn C++" incorrectly in reality, you just were taught to *use* it in an incorrect manner. Using the language "properly" is in effect learning to program. If you move to Python or Java, you are only changing the context of the problem, not removing the fundamental issue. I don't mean to question your abilities but basically if you don't push through and realize the fundamental problems as "usage" instead of knowledge of the language, no one can really help you. Switching languages just gives you new things to learn for a bit but eventually you end up in the same exact place.

The point is that I want to understand a language very deeply. And currently, I really don't want to go through C++ again. I'm learning Java right now. It's not like I'm shunning and completely forgetting C++. I still use it daily for certain problems I want to code. The point is that I'm learning java so that I can learn more about programming, and have a language which I deeply understand.

It's not that I know C++. I really don't know the language. I learned it wrong (Basically, the book I learned it from explained everything wrong and had many, many errors). I want to start over with a new language and learn it correctly.

You are talking about two separate things. You can't "learn C++" incorrectly in reality, you just were taught to *use* it in an incorrect manner. Using the language "properly" is in effect learning to program. If you move to Python or Java, you are only changing the context of the problem, not removing the fundamental issue. I don't mean to question your abilities but basically if you don't push through and realize the fundamental problems as "usage" instead of knowledge of the language, no one can really help you. Switching languages just gives you new things to learn for a bit but eventually you end up in the same exact place.

You don't understand what I mean: I don't actually understand how the language works. I didn't learn pointers, arrays, variables, classes, or almost anything correctly. I essentially learned how to use them, however how I was taught was wrong (and has led to me having many errors when I talk about C++). I'm going through Java using a good book so that I can understand the languages fundamentals correctly from the beginning.

(That and I want to learn a new language, I've spent almost three years with C++ )

It's not that I know C++. I really don't know the language. I learned it wrong (Basically, the book I learned it from explained everything wrong and had many, many errors). I want to start over with a new language and learn it correctly.

You are talking about two separate things. You can't "learn C++" incorrectly in reality, you just were taught to *use* it in an incorrect manner. Using the language "properly" is in effect learning to program. If you move to Python or Java, you are only changing the context of the problem, not removing the fundamental issue. I don't mean to question your abilities but basically if you don't push through and realize the fundamental problems as "usage" instead of knowledge of the language, no one can really help you. Switching languages just gives you new things to learn for a bit but eventually you end up in the same exact place.

You don't understand what I mean: I don't actually understand how the language works. I didn't learn pointers, arrays, variables, classes, or almost anything correctly. I essentially learned how to use them, however how I was taught was wrong (and has led to me having many errors when I talk about C++). I'm going through Java using a good book so that I can understand the languages fundamentals correctly from the beginning.

(That and I want to learn a new language, I've spent almost three years with C++ )

Put this in perspective then. You need a change of pace. I can understand that..

I don't mean to be an ass, you will do what you want to do. I get up in arms when folks say learning something "wrong" in any language prevents figuring out how to progress forward. I simply don't believe in that no matter the language. So, I wish you the best but arguing reasons, I'll stop..

I wouldn't restart, cause you really cant "restart" because you obviously know the basics. Just fix what is broken and move forward. You cant always go back cause you wont ever move forward. Grab a good modern book on C++ and see what is wrong. Then fix your wrong code into the right code. That way you'll get practice and learn more things.

I don't think the OP was asking for advice on whether or not to start over (he seems to have already decided on that), but rather which language to start over in. To me, languages are like print versus cursive writing. They are the same thing, they just look different. Pick whichever one you want. Java is going to be closer to the syntax of c++. If that is a plus for you, then pick Java, otherwise if you fancy the syntax of Python then go for it. Programming principles for most languages are going to be the same types of challenges in any language. That is where programming gets hard so eventually you are probably going to run into the same problems you are running into in another language as you are currently running into in c++, it is just going to take you longer to get there. Although, I will say the syntax of c++ is more complicated than most languages because it has so much more flexibility.

No offense to the OP, but the premise of this thread seems a little strange to me. As someone already mentioned, if you're just looking for a change of pace or if you're not enjoying C++, then by all means start fresh with something else.

However, don't discount the lessons that you learned by going through learning something the "wrong" way (however you define it) and then starting to correct the course. You probably learned more than you realized and if you know enough to realize that there was a better way of doing things, then you probably gained some valuable insights in making those discoveries.

I think statements like "I really don't want to go through C++ again." are a little off. It's not like anyone "goes through" a language and then is "done." With whatever language(s) you decide on, just remember to approach learning as an ongoing process and not something you "finish" with.