I would skip Java. I learned Java first myself, and Python and C++ after that.
I found that Java is too restrictive as it forces you to use classes and you can't use function pointers (ore something similar). I hardly ever use Java anymore, and, while learning C++ I noticed that Java had left me with a lot of bad habits.
So, I would suggest either Python or C++, Python might be easier to learn at first but, as TheBuzzSaw said, C++ can serve as a solid foundation and when you know C++ learning any other language won't pose much of a problem anymore.
Also, you're not a real programmer until you can write programs instead of scripts.
Why do people say this? It isn't true at all.
Learning C++ means you'll have an easier time learning similar languages like Java and C# -- since C++, Java and C# really are similar to each other when you consider a much broader set of languages.
Examples are Lisp, Haskell, Forth, Factor, Erlang ... knowing C++ will not help you in any special or particular way here.
edit:
To put pressure on this; C++ is not the be all and end all of programming languages; it isn't even particularly interesting or ground breaking in any way whatsoever. It certainly isn't intellectually challenging; it isn't esthetically pleasing; it isn't interesting academically either. People use C++ because it represents a boring, valid and practical compromise and choice in certain special cases.
Last edited by worseisworser; November 15th, 2010 at 03:30 PM.
Hi
Excellent choice for a number of reasons.Python, Java, C++. This is the order I recommend.
Python is scripting language that is easy to learn. It is also class based and uses inheritance so will prepare him for java and c++.
Java will introduce him to syntax that is similar to c++ but hides alot of the complexities of c++.
C++ last because it requires an understanding of how the computer works, having to deal with memory management, raw pointers, patterns and idioms, etc.
An _excellent_ choice for a young child!!!
I am a developer myself
Kind regards
Last edited by matt_symes; November 15th, 2010 at 02:54 PM.
HA! I knew it. Here comes the anti-C++ cavalry.
It's not groundbreaking because (A) it is very old, and (B) it is what is used to build just everything else you hold dear. I'm not sure what implanted this deep hatred toward C++ in you. Just about every "superior" language was built using C/C++. In other words, by using one of these more modern languages, you make massive compromises in performance and low-level control. If you're writing a business app, fair enough. Performance is usually a non-issue. If you're building any kind of real-time software, C++ is the way to go.
And the earlier statement is true. I don't know where you get off claiming otherwise, but I have done it firsthand. Knowing C++ makes learning any other language a cakewalk. I found it to be true. My colleagues all found it to be true. Meanwhile, I know many people who learn other languages first and then whine and complain about having to learn C++.
Completely false. I used C++ for years before I knew an ounce of what went on underneath. Also, avoiding C++ because you "have to deal with memory management and raw pointers" is like avoiding math because you "have to deal with integrals and derivatives". There is a fun/easy side to C++, you know. As I said above, I learned it as a child. Sure, I didn't touch pointers and whatnot till I as a bit older, but I was able to get comfortable with the language fine otherwise. The concept of scope, control structures, etc. are all expressed very well in C++.
And no, you do not have to know "patterns and idioms" to use C++... however, I find it ironic you mentioned those items because I hope any decent programmer would be using patterns/idioms in any language he/she uses. How you managed to tie that to specifically C++ is beyond me.
Again, I won't be offended if the child does not go with C++ first. There are plenty of great languages out there. I'm simply hoping that C++ is not tossed out the window based on these FUD-centric reasons.
Code:while (homework > 0) happiness--; // Don't worry. I'm a multithreaded program. ;)
Hi
+1 TheBuzSaw for most of it.
I have been using C and C++ for 15 years and is my main development language, so i am _not_ anti C or C++.
With C and C++ you need to know memory management (no garbage collection), You need to pointers and how to use them properly,, pointer arithmetic etc. You need to know proper thread management, contention and re-entry etc. You need to know idioms, smart pointers, RAII etc etc etc etc.
I have used all three. But the most powerful are C and C++. However they are the hardest to master.
This is why i would suggest a progression for a young person to learn the various concepts inherent in each.
Most languages that have been developed have a place somewhere and field a solution to some problem.
However, i would not write an operating system in any other language but C or C++ with a small bit of assembler. And don't forget C++0x is coming. Even more power.
Kind regards
Last edited by matt_symes; November 15th, 2010 at 04:39 PM.
I still take issue with this statement here. You don't need memory management if you're not going to make a memory mess in the first place. Having to manage memory implies you are having to allocate memory in the first place. All these advanced topics do not even remotely apply here. Do you honestly think this will be the kid's first lesson?
Again, a student can go a long way without ever having to deal with all those things you listed. However, when the time is right, it's not that hard to learn.Code:int* data = new int[1024];
Hi
Buzz
Now that statement i really agree with. (with my emphases) I would advocate learning to walk before running.However, when the time is right, it's not that hard to learn.
The progression of those languages will teach concepts inherent in modern programming and that will be one the benefits of it.
It would give a good base understanding in a scripting language, a byte interpreted language and compiled language.
I do not inherently disagree with you, however it is alot easier to write a good python program that a C++ one and its easier to learn.
And to write any industrial strength application in C++ you _need_ these concepts.
anyway int* p = new int[1024]; is more C and less C++. C++ would use the std libraries.
Maybe we should agree to disagree After all these are only opinions
I have stated my case and will leave it at that.
Kind regards
Last edited by matt_symes; November 15th, 2010 at 05:20 PM.
I do not view myself as part of any group; I honestly do not care; these are your problems. If you're looking to start some sort of fight you've picked the wrong person tbh.; you can't win.
That's not really the cause; there's plenty of languages older and even much older than C++ which are way more interesting etc..
Err. No, not really.
The abundantly amount of ignorant and noisy C++ users helps. I know plenty C++'ers who are not though, and of course these tend to agree with me; these also tend to know several languages besides C++ and the languages in the same family as C++.
Again, no, not really; at this point a suspicion that you do not know what you're talking about is dawning. I'll probably ignore anything further you have to say on this subject now.
edit: ..and in addition, for the cases where this is true, it is still totally irrelevant in all ways you can imagine even only considering those particular cases; i.e. ignoring statistics. You lacking this fundamental and very basic realization probably means I shouldn't be having this conversation with you at all.
Within reason; no, not really -- I'm not thinking Python here.
I can agree with this; perhaps C even more so.
Then both you and your colleagues are wrong or you are lying.
Again knowing C++ will not help you more vs. knowing e.g. Java when you are moving to a language in a totally different category/family than the category/family shared by C++ and Java.
Well of course; this tends (depending on the language) to be huge step backwards, but a necessary evil in some cases.
Last edited by worseisworser; November 15th, 2010 at 05:39 PM. Reason: minor language changes
Wow, this is gonna be rich...
Why are you discussing how "interesting" a language is?
Well, I guarantee your operating system and many of its major apps were not written in Pascal...
What... Really? "Only ignorant people disagree with me"? That coupled with your opening statement is murder. Who do you think you are? You're not even making arguments anymore. You're just saying, "Well, I'm right. End of discussion."
Enlighten me. What is the JVM written in? Why is Python written in? What is .NET and C# written in? And don't say ASM as that is an intrinsic component of high level C++.
Again, bring out your facts rather than just march around parading how amazing you think you are.
I'm not sure why you're combating this particular point. I figured you'd say something more along the lines of "I don't need low level control for this". Instead, you drastically weaken your position. Exactly how would you code a driver, for instance???
Fair enough.
Uhhh, what? Are you serious? Again, this isn't even an argument. "Well, you disagree with me, so, you're wrong." What am I supposed to respond with? "NUH UH!!!"
I can agree with this, but how big of a leap are we talking here? Like jumping to SQL? I'm just not sure how it's relevant because we're discussing the basics of programming, not programming in a specific area.
Backwards? Moving to a language with infinitely more control is a step backwards?
Bookmarks