Diving Into a Lower-Level Language: My Journey with C

I recently started learning the C programming language, and yes—I am doing this entirely of my own free will. Most of my coding experience has been with high-level languages, which are incredibly convenient—so much is handled behind the scenes. But that convenience comes at a cost: it hides the lower-level details of how computers actually work.

C is a lower-level language. “Lower-level,” in this sense, does not mean easier, unfortunately; it means speaking to a computer in a language it understands—fewer translators involved, so it's actually harder. Using C allows you to understand computer memory management, data structures, and system resources directly. Getting to see what's under the hood helps deepen my understanding of programming concepts.

I started with the basics: variables, control flow, and functions. Writing in C made me appreciate features I'd taken for granted in higher-level languages, like dynamic arrays and function hoisting. I even made a system call that lets me talk directly to the computer to request memory for my data. I never thought putting data into a specific memory address could bring me any form of joy—but here I am…

My goal in learning C is simple: to understand the foundations of programming and gain a deeper appreciation for how higher-level languages do the heavy lifting so we don't have to.