Being an embedded developer, C is my bread and butter language but to me it tastes like roast beef with roast potatoes and a good gravy. If I were starting out today there are two languages that I would set out to master; C and C# and maybe throw in a smattering of C++, just for those unmanaged native applications that C# won't bastardise itself to cope with.
These days there is practically no need to muck about with assembler. C compilers and chip design are so intertwined that you will almost never be able to write more efficient assembler than what a C compiler generates. In addition you can get all of the understanding of the underlying system using C.
Now, before that sounds all romantic. let me re-phrase. You will NEED to understand the underlying system if you are to write something worthwhile in C. This means that before you get something remotely more useful than outputting "Hello World" you are going to be doing a lot of reading, a lot of mis-understanding and more re-reading, because the guys writing the docs understand what they are talking about but the chaps reading the docs don't otherwise they wouldn't be reading them.
C syntax is very, very easy, and "writing" a program is very easy. Getting the interaction between your program and the underlying OS and hardware to work is where the difficulty comes in. Nothing is for free in C, but Aye! a beautiful language it is.
MY advice on learning any language is: Find a project that you have to do and force yourself to use the language that want to learn.