Todd
I'm a current C# programmer and I'm really trying to break into the C world because I find the low-levelness fascinating.
Hey Todd,
It's superb you find it fascinating. To test that interest, you could venture into programming in something with a strong correspondence between language and processor family machine instructions (i.e. asm). Pick a friendly chip like MIPS or 6502, perhaps Z80 and study just enough to get a solid feeling of the basics: stuff like machine cycles, knowing an instruction rate against clock speed, playing with register values, jumping to specific addresses, I/O controllers on the bus, why device drivers exist, etc. Anything that'll improve your fundamental knowledge of computers. To quote an ASM author:
it is necessary to actually learn the assembly language and details of a particular processor, and to write programs for it. This is somewhat like those experiments you did in high school chemistry. Their goal was to teach you the fundamentals of chemistry, not to teach you how to make test tubes full of colorful water. But without the colorful experiments your understanding of chemistry might remain abstract and vague, and would soon be forgotten.
Many of us have just a vague understanding of what's actually going on (some legitimately don't know at all!), which I suspect is why you find "low-levelness" intriguing? However, C is a high-level language, whose input is fed to a program for processing. When you know what it's processed
into beforehand (by having written a reasonable number of small-to-mid-level assembly programs), you'll be at the optimal place to reap the benefits of learning C. New questions about which X thing to learn next are immediately answered after this essential phase. You might also find yourself taking a backseat to most modern wars on languages and software development practices (hint: they're surface-level concerns and not worth your time); it's liberating. This study route will take much longer, but you would find even more difficult advice from Knuth. For more concrete advice on C, go with the K&R book, and then about the first 40 episodes of Handmade Hero. I think you'll be where you want to after that.
Yes, take algorithm study very seriously, but take learning your assembly / C with equal if not more importance.