Abstraction

Posted on Aug 19, 2024

“The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise.” – Edsger Dijkstra

“Abstraction enables designers to focus on a manageable subset of the system at a time.”

Abstraction and the reality of the “fullstack” spectrum in I.T.

Abstraction is the core principle of information technology. It is how we in the field manage the immense complexity inherent in our systems.

But, when talking about abstraction, I am not referring to the textbook definitions or the OSI model everyone knows about – There is a deeper reality in this field, a “fullstack” that exists beyond superficial client-server models. This stack is not about trendy buzzwords – it is about the real layers, from the physical world to the software running on your machine.

From Physics to Software

Once again, what I meant by “fullstack” spectrum was a series of layers that start at the level of physics and extend all the way to application software.

Each layer builds om the one below it, abstracting complexity, but never losing touch with the underlying reality.

The model goes as follows, from bottom to top:

  1. Physics

    • The foundation of everything. Without it, nothing else exists. This is where concepts of energy and matter – forming electrons, set the stage for everything above.
  2. Devices

    • Here, we move into the reality of physical hardware – transistors, resitors, capacitors, etc. These are the building blocks that enable the flow of electricity that powers everything.
  3. Analog Circuits

    • At this level, we deal with continuous signals. Analog circuits handle things such as voltage regulation and signal amplification.
  4. Digital Circuits

    • This is where binary logic comes. Analog signals get converted to digital, and from there, we can manipulate those 1s and 0s in meaningful ways.
  5. Logic

    • The abstraction of raw digital signals into logical operations – AND, OR, NOT – these are the fundamental operations that support everything in computing. Logic gates, truth tables and boolean algebra all live on this layer.
  6. Micro-architecture

    • Implementation of processors – how instructions are executed at the hardware level. Micro-architecture deals with the design of datapaths, control units and how these components interact with(in) a CPU to execute instructions.
  7. Architecture

    • Broader design of a computing system usually refers to the architecture of a CPU. Here the instruction sets, registers and memory models are defined.
  8. Operating Systems

    • Where software meets hardware. The operating system abstracts the hardware complexities, providing a consistent interface for the application software. The OS handles resource management, scheduling and lower level tasks that allow running software on top.
  9. Application Software

    • The top layer of the stack. This is what most people interact with – but it is built upon everything below it. Application software might seem far removed from physics, but it is all connected through the layers.

The importance of abstraction

Abstraction is not about hand-waving away complexity. It is about managing that complexity in a way that allows us to focus on solving specific problems at specific layers without being overwhelmed by the whole.

When you are writing an application, you should not have to think about the physics of how electrons move through your CPU. That’s the point of abstraction – it lets you work at the appropriate level of the stack without getting bogged down in irrelevant details.

However, that does not mean you should be ignorant of what is happening beneath the layer you are working on. Even if you do not understand the full stack, for any task at hand, it is extremely helpful if you know whats happening on the layer immediatly before and after it. This knowledge is what separates the good from the great.

Precision, not vagueness

The purpose of abstraction is to provide precision, not to create vague, generalized concepts. When you abstract you are creating a new level of understanding where you can be specific and exact on the layer you are at.

Abstraction is essential, but it is not just about simplifying thigs – it is about creating precise layers of understanding that allow us to build and maintain incredibly complex systems.

Resources

Digital Design and Computer Architecture: RISC-V Edition by Sarah L. Harris and David Harris