C is one of my oldest white whale languages. I've written some simple projects in it, but it always feels like I've never really learned C. I've taken a look at the source code of several different projects like Firefox or Blender and found myself totally lost in there. I've made several attempts over the years to really learn it, and while each time I get closer to understanding it I start to feel uncertain about the outcome and eventually stop learning it.
I realized this while I was learning Rust. Rust really smooths away a lot of the rougher edges of languages like C and C++, but each time I started to learn Rust I started thinking about how I never properly learned C. While I can appreciate what Rust is doing I felt I needed to give C another try, especially with more modern C and C compilers.
I've decided to run through the book "Modern C" by Jens Gustedt. Part of this is because the text of the book is online, but also because the book takes a more layered approach, starting from the basics and then adding additional layers of complexity. I thought about trying with the classic Kernighan and Ritchie C book, but a) it covers ANSI C, not more recent versions of C, and b) it assumes you're coming from a more hardware-level programming background that I don't have. That's not to say I won't give it a peek (or really any of the other C books that I've accumulated over the years) but I'm going to use this as my guide for now and see where this leads.
I'm planning on reporting my progress, but I can say that I've already felt some of the frustration while doing some simple casting in C. But frustration is part of the learning process. Before I would want to run away from the frustration, or think that I was somehow defective because I didn't get this stuff straightaway. Now I'm noticing the frustration and leaning into it a bit more. The only thing you get while running away is tired.
We'll see where this leads, but I'm hopeful that this experience will be helpful in many ways. I'll report on my progress as the week wears on.