I would agree with what Watermelon said, strangely though no one else seems to agree!
I suggest you start with Assembly and don't learn too many instructions (just 10-15 everyday instructions like MOV,SET,CLR,JMP,etc are good enough).
1. Directly programming with assembly exposes you to the exact way the signal flows. Also, assembly programming is very straight forward.
2. There are no well defined programming constructs that you need to learn.
3. It is a LOT easier to interface with external ICs (like ADCs, DACs, etc) b/c the coding exactly follows what the datasheet for the chip says.
4. Then ofcourse, assembly coded programs are ALWAYS smaller than what C/C++ compiler translates your code into, and program memory is a scarce resource in microcontrollers. So, good coders should assembly as well as C/C++....that is why I suggest you start with assembly and then move on to C aftersome time. So, you'll be able to tweak your C compiler generated code using assembly.
HOPE THIS HELPS!