Fundamentals all the Way Down

I recently listened to an episode of The Changelog, that dealt with the topic of whether it’s important or not as programmers to understand the fundamentals of the technology, and if so, how many layers deep should we go? Does a web programmer only need to understand the framework they work with, or should they understand the browser as well? Or the translation from JavaScript to V8, or TCP/IP, or .. or .. or ..

turtles/fundamentals all the way down

turtles (fundamentals) all the way down (src)

It’s a topic that’s definitely on my mind as I move into a career as a programmer. Particularly as I’m “late” in the “game” after having spent the majority of my life in music and sound, the question of time allocation carries significant weight. Will learning deeper right from the start, pay off down the track? And if so, how deeply to begin? I hear people state that everyone should learn Assembly because it gives you a much clearer idea of how a computer works. Similarly, the course Nand to Tetris has been recommended to me multiple times by different people. Both of these learnings can be argued as fundamental, deeper layers. This is in contrast to boot camp style courses that teach you in quick fire fashion, the functions, syntax and specifics of a programming language.

Both approaches have their merits. And that’s of course the total simplicity in the answer. I think it just depends on how much you want to learn. And it’s in this idea, that I think the original question of how deeply we should understand something, became confused.

Different Styles of Travel

I have a feeling that in today’s age, many people just want to know what the minimal amount of work is, in order to achieve a goal. That could be getting a job, passing an exam, getting an interview, etc. Somehow the path to getting somewhere has become a means to an end, and not a part of the end; if there was an option to skip the whole process of getting there, and to just suddenly be there, I feel that many would take that option (e.g. the temptation that ChatGPT stokes). This also goes for actually physically travelling somewhere. There are few people I know who have any appreciation for “the scenic route”, or who attribute little if any truth in the idiom, “travel is not about the destination, it’s about the journey”.

For me personally, digging deeper into whatever I’m learning is something I enjoy. It makes the journey sweeter. But it can also become a distraction from actually generating output. This was a constant and massive battle back when I was making music. The balance between learning new tools and making music with them was a fine and precarious line. The TL;DR at this point, is that balance is key.

Transitional Example

I’m two weeks into a transition from Mac to GNU/Linux (hereafter in this blog, Mr Stallman, for the sake of sanity, referred to as, “Linux” 1), and chose to start with a base Arch Linux install. Starting (deeper) with Arch Linux was difficult, but it’s already paying off, making a good example for this post. Being required to install absolutely everything and configure where needed, has not only given me a much greater appreciation for the computer as a piece of technology, but it’s also provided me a glimpse into the larger “space” that programmers work in; the potential connections, present and future, that exist between programs as data flow.

The interoperability and openness of Linux are what spurred me to change from Mac. But in addition, these characteristics have unexpectedly given me access to a kind of “playground” where I can explore the inner workings of a system to a degree that wasn’t available to me before. This will quite clearly be beneficial for my skill sets as a programmer, and I don’t believe I would’ve realised this “playground access” with such clarity, had I not tried to make it harder for myself by starting with Arch, and instead started with a full desktop environment install like KDE, Mint, Manjaro, etc (i.e the non-scenic, “just get there now” route).

So I say learn the fundamentals where it fits, but it doesn’t have to be as low as possible, and straight from the start and only ever moving higher. Learning isn’t linear, it twists and folds back on itself, filling space where we don’t even realise there was space to be filled. Taking the example of web development again; I think just learning React and hitting the job market is skating on thin ice. As is mentioned in the podcast linked in the first paragraph of this post, people who take this route typically have no idea what to do when something breaks. This isn’t great for longevity in any career - unless that breakage becomes a stimulus to learn something new. Then the learning folds back on itself and you take a step deeper, getting closer to some kind of fundamental layer underneath where you currently are.

  1. I’d love to give both Stallman and Torvalds simultaneous credit when writing, but GNU/Linux just didn’t stick. Sorry. Marketing language sucks, but it happens. The heard lets some things stick, and some things not.