« All Episodes

How History Can Inform a Dynamic Understanding of Technological Revolutions Mirroring this Moment In Software Engineering

Published Invalid DateTime

Fundamentals come up in every field, from sports to chess to software, but we rarely stop to define what a fundamental is. In this episode of Developer Tea, I look at why fundamentals matter now more than ever for software engineers, and why a profession built on layer after layer of abstraction makes that understanding so important.

You've heard it a million times, in software engineering and just about everywhere else: "get back to the fundamentals." But what is a fundamental, and why does the idea matter so much for engineers right now? Our industry grows through abstraction, and it moves faster than almost any other profession. In today's episode, I explain why fundamentals are the building blocks that stay stable underneath all of that change, and how you can use them to guide your career growth.

  • What a Fundamental Actually Is: Fundamentals are the building blocks of a domain: the core concepts that aren't going to change. They aren't always rules. Often they're behaviors, habit patterns, or heuristics that everything else is built on, like dribbling in basketball, blocking in football, or the sender-receiver-feedback-noise model in communication.
  • Fundamentals in Software Engineering: For engineers, fundamentals include things like readability, reliability, basic logic structures, and the setup, execute, and teardown pattern of a good test. Design patterns might sit one step beyond the fundamentals, but they rest on the same foundation.
  • Why We "Get Back" to Fundamentals: We usually learn fundamentals first, as beginners. That's why we talk about returning to them. We build on top of them and eventually stop noticing they're there.
  • Software Moves Through Abstraction: Compare software to a field like law, where many fundamentals are practiced much the same way they were 50 years ago. Much of the growth and movement in our industry comes from new layers of abstraction, and those layers can change very quickly.
  • Code Is a Symbolic Practice: At its core, coding is a large experiment in symbols. We create symbols that mean something to us as humans, and those symbols map to a physical reality: instructions on a chip, bits being flipped, electrons moving.
  • The Shift to Linguistic Abstraction: Over the past several decades, our abstractions have become more and more tied to language. Concepts like objects, functions, flows, meshes, and graphs let us work with ideas instead of directly manipulating bits.
  • Fundamentals Underneath the Abstractions: Every abstraction still has fundamentals underneath it. You can learn the fundamentals below an abstraction, and you can also learn the fundamentals of the abstraction itself.
  • Episode Homework: Pick one abstraction you use every day and ask yourself: "What are the fundamentals underneath this, and which parts of it will still be true when the next layer of abstraction arrives?"

📮 Ask a Question

If you enjoyed this episode and would like me to discuss a question that you have on the show, drop it over at: developertea.com.

📮 Join the Discord

If you want to be a part of a supportive community of engineers (non-engineers welcome!) working to improve their lives and careers, join us on the Developer Tea Discord community today!

🗞️ Subscribe to The Tea Break

We are developing a brand new newsletter called The Tea Break! You can be the first in line to receive it by entering your email directly over at developertea.com.

🧡 Leave a Review

If you're enjoying the show and want to support the content head over to iTunes and leave a review!

Transcript (Generated by OpenAI Whisper)

Maybe now more than ever before in our careers, fundamentals matter. You've probably heard this a million times, not just in software engineering, but across all industries, even hobbies, sports, other areas of your life, you're going to hear people talk about fundamentals. Getting back to the fundamentals is the kind of common phrase that you might hear. And I want to talk a little bit about why fundamentals are a useful concept. What even is a fundamental? What are we talking about when we say fundamentals? And how can you frame that in your career? And in your career growth? How can you focus on fundamentals in the first place? My name is Jonathan Cottrell, and you're listening to Developer Tea. My goal on the show is to help driven developers like you find clarity, perspective, and purpose in their careers. When we talk about getting back to the fundamentals, a lot of the reason, let's take sports, for example, a lot of the reason why we would say get back to is because we learn fundamentals early. Right? We learn, you know, what we might call basic skills or the building blocks. These are the starting points. In basketball, it would be dribbling and in football, it would be blocking. In chess, it might be an opening move. In software engineering, it might be simple things like reliability. It might be testing, you know, being able to assert the testing, you know, pattern for setting up a test, running the executions, tearing down the test and cleanup. These are fundamental concepts, right? Design patterns might be considered a fundamental. Maybe it's a step beyond, you know, fundamentals. And really, the fundamentals are something like readability, right? And to be clear, you know, fundamentals are not always rules. They may just be behaviors, habit patterns, heuristics. These are things that tend to be building blocks for other things. Fundamentals and coding. Coding may also include logic structures, right? Basic logic structures. Fundamentals in communication might be a basic communication model with a sender and a receiver and feedback and noise, right? These are concepts that are fundamental to the domain of communication. And so, these concepts are fundamental because... Because they are building blocks and because they are kind of the core principle concepts of the domain that are not really going to change. And this is really important for software engineers to understand because in particular in this profession, a lot of the progression that we experience, a lot of the growth that we experience, a lot of the industry movement that we watch is... is the result of some kind of abstraction. All right. We can see this very heavily in software engineering and perhaps not quite as heavily in a lot of other professions. If you think about, for example, the application of law, and we talk about this very often because it is kind of an interesting comparison. The application of law has some fundamentals that tend to be practiced in very similar ways. As to how they were practiced, let's say, 50 years ago. Now, there may be some contemporary, you know, interpretations or there's parts and pieces of that where there is innovation, right? But in technology and especially in knowledge work and abstract technology, software in particular, abstraction is... It can move very quickly. And so... And the reason for this is because a lot of our work is symbolic in its fundamental nature. Again, going back to fundamentals, one of the fundamentals of coding is that it is, you know, a very large experiment of symbology. We create symbols that represent some idea to us as humans, but they map to a hard reality in code. And more specifically, a physical reality in chips. Somewhere there is a chip that holds instructions. There's a, you know, a bit that is flipped. There's... There's a, you know, electrons that are moving as a result of this, you know, layers and layers and layers of abstraction, right? And so the abstraction over the past, let's say, 50 years has become more and more conceptually attached to language abstraction. And what this means is that instead of working on core fundamentals, in other words, instead of saying, you know, we're going to move from one time... one way of adjusting bits to another way of adjusting bits, we're working in a linguistic abstraction, all right? So stick with me here for a second. This means that we can start using words like object, right? We can start using words like flow, or we can use concepts like durable object. I already said object before, but we can use concepts like function, and we can continue to be more abstract, thinking about mesh and graph. And these are all these kind of primitive ideas that are expressed in abstractions. Okay, so why is this important? You know, how does abstraction relate to fundamentals? There are still fundamentals underneath all of these abstractions. And more importantly, you can understand the fundamentals of the abstractions, and you can understand the fundamentals of the abstractions itself. Okay, so what does that mean? Let's take, for example, the characteristics. Okay.