I started with C as well, and while I am glad that I understand how to do my own memory management and the importance of knowing how things are stored in memory, I have to agree with rip-off that it's probably best that a person learning to program not start there. Unfortunately, I did not have much guidance in the realm of what to choose and so learning the language of operating systems seemed like a good place to start. I wish I could do it over again, I think it would have been beneficial to learn high level programming concepts first then learn how each works. Like learning how to drive, you wouldn't bother yourself with how the engine is mounted, how the fuel injection works, what sequence your distributor cap fires in; you would first learn the rules of the road, how to accelerate, braking distance etc. However, I would certainly suggest anyone who has been programming for a little while (2-3 years) at least try C out. If for no other reason then to learn pointers and malloc(). Truly understanding why malloc always returns a void * is lifechanging (at least for an 8th grader with no formal computer education.)
assembler= learning how the fuel injection works
C = driving a fully engineerd car but only with the standart functions
Java / C# = automatic gear change, ABS, parking help :
:-)
---