<=====------======------==[ 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.