Like a huge swath of other millennial, I dibbled and dabbled in building websites —writing in html, css, and javascript—during my youth, but these days, I primarily code (as a living) in favorite programming language: Python.
I once considered Python as one of the lower level programming languages (to a certain degree, it is) but as a I dive deeper into studying computer science— reading Computer Systems from a programmer’s perspective, at my own pace, and watching the professors lecture online, for free—I find the language creates too big of a gap between me and system, leaving me not fully understanding what’s really going on underneath the hood. Therefore, it’s time to bite the bullet and dive a bit deeper into learning the next not-so-new language on my list: C.
Why C? One could argue that if you want to really understand the hardware, learn the language closest to the hardware: assembly (the compiler translates assembly into object code, which, ultimately, executed by the machine). Yes—assembly is the closest one could get to programming the system, but C strikes a balance. C can easily be translated into assembly, while maintaining it’s utility (many systems at work still run on C).
Now, I’m definitely not stopping from writing and learning Python. I love Python. I learn something new—from discovering standard libraries to writing more idiomatic code—every day. I doubt that will ever change; I’ll never reach a point where I’ll say “Yup, that’s it, I learned everything about Python.”
But, I am devoting a large chunk of my time (mostly outside of working hours) on learning C.
So, my plan is this: finish “The C Programming Language” by Brian Keringhan and Dennis Ritchie. The de-facto book to learn C.
[1] https://scs.hosted.panopto.com/Panopto/Pages/Sessions/List.aspx#folderID=%22b96d90ae-9871-4fae-91e2-b1627b43e25e%22