The first one is always the most difficult one. Once you learn to program in one language, you can learn other languages fairly quickly. At schools they seem to start with higher level languages first.. I don't know why, maybe because those are most usefull in general.
C++ is just an extension to C. So when you learn the other you are also learning the other one. But C++ might be very confusing and messy for a beginner. It takes some practice and experience to write elegant C++ code.
Basic is quite a good place to learn.. there are several good compilers on the market.. you can program very low level in basic these days most include bitwise and low level port / register access. C can be cheaper though,, Hi-tec lite is completely functional and free. There are many more books for C and ASM than there are for basic. Nigel has a brilliant tutorial page for ASM on the PIC ...
There are many peolpe on this forum with C Basic and asm knowledge aswell.
Like most things in life, if you want to really understand what's going on, you have to start at the bottom and work your way up. Start off with assembler, understand the register structure, bit manipulation, peripherals, addressing modes etc. Then when you work your way up to C or any other higher level language for that matter, you will understand what the code is actually making the device do. Your troubleshooting skills will greatly benefit from knowing what's supposed to be happening and what's actually happening at the device level.
If you avoid the libraries in C then you have to learn the registers and peripherals just the same as in assembler. The only thing you won't know is bank switching but that's no big loss. Same with Basic. The main difference is the amount of typing.
It's basically to do with a thing called syntax! Once you learn a language and start to program (using that syntax) you will soon see that really the only thing that will change from language to language is the syntax.
This doesn't always follow! Assembler on a P4 is quite complex compared to a high level language. but small micro's are quite easy to program in all languages.