My first experience with C language started with Handmade Hero series hosted by Casey Muratori. Following along forced me to think about how computers actually work and how will my code be ran, I've also learned how to render things onto the screen without any external dependencies - only using Win32 API. There is a clear boundary between platform specific and universal code, which not only helped port the project to Linux, but also allowed the unviersal code to be recompiled while the program was running. One interesting fact is that the entire program runs on one big chunk of memory - there is no dynamic allocations happening on runtime.