SeanMc wrote:
I know these sound very obvious, but what's your opinion?
I think that, to really
understand things, you have to cover the basics. But you also need some "instant gratification" to stay interested.
I thought about this quite a bit, because I frequently find myself in the position of tutor and instructor -- at work, where I'm instructing student interns, and now also at home, where my own kids get into an age where they start getting interested in programming themselves. I'm currently trying to find a good balance for that in a new blog I'm writing on the very subject. (It's still pretty empty so I won't bother you with a link at this point. Perhaps later.)
But it's about more than just which languages you're picking up in which sequence. Some things require a bit of history, or they will forever remain "mystic" and "that's just like it is". Intel x86 / x64 assembly, in particular,
cannot be taught properly without quite some historical background.
All that "meta" being said... I think picking up C early on (right after whatever drew your attention to programming in the first place -- the "instant gratification" part) is absolutely essential. It shows you elementary things like pointers, memory allocation / deallocation, pass-by-value vs. pass-by-reference, and allows easy showcasing of other basics like stack vs. heap, signal handling, and character encoding. All that in a "stark naked" environment without (m)any distractions. It's also one of the most influential languages, with many of its constructs found in later language generations like C++, Java, or C#.
As for Assembly... I know I will get flak for this, but I don't think Joe Average Coder will
need actual experience with Asm, unless his specific project calls for it (i.e. you're doing hardcore embedded stuff, compiler optimization, or OSDev). You need to be aware that it exists, and some anecdotes from "that age" can me instructional or entertaining, helping with general understanding. But the only Asm I've ever actually coded in 15 years of system development has been the stuff I've done for my OS project here on OSDev. I never
needed that knowledge, and the occasions where I could
apply that knowledge were very, very few -- I can remember
one time when looking at Asm in the debugger actually helped somewhat.
So, yes, you
should learn C, and do so early, usually as your second language. From there on, whatever takes your fancy. Just never stop learning.