<=====------======------==[ Learning C ]==------======------=====>

 First of all, apologies for the sheer length of my first post.
 They probably won't all be that long, it's just that ~ATH had a
 lot to explain to be able to say anything about it. I expect
 largely most of my posts here will be considerably less thought-
 out. In any case: C.

 C is a language I was somewhat afraid of for a long time, as I'm
 sure many people have been. For someone who learned programming
 via Java in high school (and had not done a lot since then),
 jumping right into C seemed like a lot to handle, what with
 manual memory allocation and The Stack and pointers and other
 things I didn't understand. What I also didn't understand is that
 C is actually incredibly simple, which makes it really nice to
 learn, in a sense. The language itself has very few features to
 remember and those that are there are very intuitive and logical
 to anyone who's programmed in popular languages, since those
 languages all inherited their features from C. What make C
 complicated when you're learning is when you want to copy a
 string and suddenly you find yourself reading up on the last
 half-century of discourse about strcpy vs strncpy vs strlcpy vs
 snprintf and why actually they all suck and you should probably
 just write your own wrapper around memcpy if you want to copy a
 string that bad.

 But I digress.

 C is nice because I can trace exactly what my code is doing on a
 machine level as I write it, which is great for simply learning
 to think about that when programming more often. It's also great
 for teaching me about the 50 million ways one can process strings
 unsafely and incorrectly, of which I'm sure I am on my way to
 doing them all. Writing a whole bunch of buggy code is my
 favorite thing about C so far, because each time I do I learn
 something. Usually the thing that I learn is that null-terminated
 strings are evil, but still. It's really fun to think through the
 most simple, basic way to solve a problem.

 I've been going through K.N. King's book on C as my primary
 resource in learning, and applying it through old Advent of Code
 puzzles and some messing around with a Raspberry Pi Pico (which
 has been an excellent playground for getting closer to the metal,
 so to speak). It's been a fun way to learn, although I definitely
 feel like I need a real project to work on to solidify things.
 Every time I think about this my brain jumps to writing a
 compiler but that may be slightly insane to attempt where I'm at.
 But then again, what better way to learn than by pushing through
 tasks beyond your skill level?

 I'm not sure I have anything particularly unique to say about
 this, to be honest. C is a cool language. It's a great learning
 experience. It's powered everything ever for decades. You can
 look at assembly, which really would be more interesting if I
 could read assembly (I do want to learn ARM assembly and/or 6502
 assembly one of these days). I am definitely more interested in
 programming and computers than I used to be. I've found in
 general that the more I understand what's happening under the
 hood, I become more enchanted, not less. Computers aren't magic,
 and that's the exact reason why they rule.

 ruleofsix                                              2024/09/06
<=====------======------======------======------======------=====>