Exactly this. Implementing low-level algorithms focuses on C's strengths: arrays (memory layout) and manual memory allocation. They will be your biggest blind spots coming from a dynamic language, and they are the primary reason one would use C.
After that I would move on to implementing something like a telnet or simple HTTP server, focusing on using sockets and processes correctly: handling all error cases, ensuring no deadlock, etc. That is C's other strength: it is the language of Unix.
After that I would move on to implementing something like a telnet or simple HTTP server, focusing on using sockets and processes correctly: handling all error cases, ensuring no deadlock, etc. That is C's other strength: it is the language of Unix.