# Layers of Computing

<span style="white-space: pre-wrap;">Computers are built heavily around the concept of </span>[abstraction](https://en.m.wikipedia.org/wiki/Abstraction_(computer_science))<span style="white-space: pre-wrap;"> – or simplifying complex mechanisms in ways that allow you to build modular systems that can work together while also being easier to understand and maintain. This creates a pipeline for independent modules – each completing their own complex task – to communicate with each other through a common technical language.</span>

## <span style="white-space: pre-wrap;">Abstraction </span>

<div drawio-diagram="1049"><img src="https://hub.subspace.services/uploads/images/drawio/2025-04/drawing-3-1745608990.png" alt=""/></div>

<span style="white-space: pre-wrap;">Abstraction is related to </span>[modular design](https://en.m.wikipedia.org/wiki/Modular_design)<span style="white-space: pre-wrap;"> – or creating discreet modules that communicate through a common language. Similarly, </span>[systems thinking](https://en.m.wikipedia.org/wiki/Systems_thinking)<span style="white-space: pre-wrap;"> enables people to consider the complexity of our real world – and all of its relationships – at both the large and small scale. </span>

<table id="bkmrk--13" style="border-collapse: collapse; width: 100%; border-width: 1px;"><colgroup><col style="width: 50.1326%;"></col><col style="width: 50.1326%;"></col></colgroup><tbody><tr><td>[![1000000040.jpg](https://hub.subspace.services/uploads/images/gallery/2025-04/scaled-1680-/1000000040.jpg)](https://hub.subspace.services/uploads/images/gallery/2025-04/1000000040.jpg)

</td><td>[![1000000041.jpg](https://hub.subspace.services/uploads/images/gallery/2025-04/scaled-1680-/1000000041.jpg)](https://hub.subspace.services/uploads/images/gallery/2025-04/1000000041.jpg)

</td></tr></tbody></table>

While you may need to have some knowledge about hardware specifications to build a computer, you don't need to understand the mechanical underpinnings of the physical engineering. You aren't required to know how to code just to install and use a software package.

<div drawio-diagram="945"><img src="https://hub.subspace.services/uploads/images/drawio/2025-04/drawing-3-1744839646.png" alt=""/></div>

<span style="white-space: pre-wrap;">Abstractions within a system are defined along lines that denote architectures, standards, protocols and specifications. USB ports are an abstraction that allows us to connect an external device to a computer. Thanks to the common language built through the </span>[USB protocol](https://en.m.wikipedia.org/wiki/USB_Implementers_Forum), users can often connect these devices without needing to give it much thought.

<span style="white-space: pre-wrap;">There </span>[standards](https://en.m.wikipedia.org/wiki/Software_standard)<span style="white-space: pre-wrap;"> are often defined by the technology's originating corporation – such as </span>[Intel's x86 processor architecture](https://en.m.wikipedia.org/wiki/X86)<span style="white-space: pre-wrap;"> – or agreed upon through a committee. They allow manufacturers and developers to use hardware interchangeably within compatible environments. By developing standardized systems, computers can translate software code written by Humans into a language usable by our computer. </span>

<div drawio-diagram="951"><img src="https://hub.subspace.services/uploads/images/drawio/2025-04/drawing-3-1744840499.png" alt=""/></div>

<span style="white-space: pre-wrap;">A software </span>[compiler](https://en.m.wikipedia.org/wiki/Compiler)<span style="white-space: pre-wrap;"> can take human-readable, </span>[high-level](https://en.m.wikipedia.org/wiki/High-level_programming_language)<span style="white-space: pre-wrap;"> programming languages and translate them until they are </span>[low-level machine code](https://en.m.wikipedia.org/wiki/Machine_code)<span style="white-space: pre-wrap;"> that can run on your hardware. There are </span>[many different programming languages](https://en.m.wikipedia.org/w/index.php?title=List_of_programming_languages)<span style="white-space: pre-wrap;"> – each requiring their own compiler – and they can be sorted by their level of abstraction.</span>

<details id="bkmrk-home-server-use-a-ra"><summary>Visual Language</summary>

As the name implies, these programming languages use a visual metaphor to build programs instead of using natural language elements. These can be an excellent pathway for learning the core logic concepts behind programming.

[![1000006964.png](https://hub.subspace.services/uploads/images/gallery/2025-04/scaled-1680-/1000006964.png)](https://hub.subspace.services/uploads/images/gallery/2025-04/scaled-1680-/1000006964.png)

**This code uses the** [**Scratch visual programming language**](https://en.m.wikipedia.org/wiki/Scratch_(programming_language)) **to play a sound when a button is clicked.**

</details><details id="bkmrk-personal-cloud-the-r"><summary>High-Level Language</summary>

These programming languages are highly abstracted from raw machine code and generally use text-based natural language elements.

```c++
#include <iostream>
using namespace std;

int main() {
  return 5 + 7;
}
```

**This**<span style="white-space: pre-wrap;"> </span>**code uses the** [C++ programming language](https://en.m.wikipedia.org/wiki/C%2B%2B) **to return the sum of 5 and 7.**

</details><details id="bkmrk-assembly-languagetes"><summary>Assembly Language</summary>

This category offers mnemonic representations of physical machine instructions while still operating extremely efficiently.

```assembly
mov abx, 5
mov cdx, 7
add abx, cdx
```

**These** [**x86 assembly code**](https://en.m.wikipedia.org/wiki/X86_assembly_language) **instructions will produce the sum of 5 and 7.**

</details><details id="bkmrk-machine-languagetest"><summary>Machine Language</summary>

<span style="white-space: pre-wrap;">This language is completely without abstraction and represents the literal binary data that is being processed by the computer. </span>

Machine language is dependent on the hardware being used, which is why computer components are created to follow existing standards.

```machine
00000000 ; Stop Program
00000001 ; Turn on bulb
00000010 ; Turn off bulb
00000100 ; Dim bulb by 10%
00001000 ; Brighten bulb by 10%
```

**This theoretical set of machine code instructions could be used to control a light bulb.**

</details><span style="white-space: pre-wrap;">Following these abstractions, there are three levels to computing, each building on the other to achieve a general-purpose operating systems. By building a system consisting of physical hardware parts and integrated firmware, we create a digital software space for performing tasks through applications. </span>

<div drawio-diagram="695"><img src="https://hub.subspace.services/uploads/images/drawio/2025-03/drawing-3-1743031523.png" alt=""/></div>

Below, we will explore these computational layers and learn how they come together to create a computer system capable of performing complex tasks.

## Hardware

This is the physical side of computing, accomplished using integrated circuits created from silica and rare earth metals. Hardware receives its directions from the software and firmware allowing the entire computing system to execute the commands required for completing the desired task.

<p class="callout info">The term "hardware" derives from its relatively rigid nature in respect to change.</p>

<div drawio-diagram="701"><img src="https://hub.subspace.services/uploads/images/drawio/2025-03/drawing-3-1743032071.png" alt=""/></div>

<span style="white-space: pre-wrap;">Hardware includes the </span>[motherboard](https://en.m.wikipedia.org/wiki/Motherboard)<span style="white-space: pre-wrap;">, which acts as a seat for all hardware parts within a computer and enables their communication. The </span>[CPU](https://en.m.wikipedia.org/wiki/Central_processing_unit)<span style="white-space: pre-wrap;"> performs precise calculations, the </span>[GPU](https://en.m.wikipedia.org/wiki/Graphics_processing_unit)<span style="white-space: pre-wrap;"> handles graphical manipulation, and the </span>[RAM](https://en.m.wikipedia.org/wiki/Random-access_memory)<span style="white-space: pre-wrap;"> stores data currently in use by software. Long-term data storage is accomplished through </span>[high-capacity platter disks](https://en.m.wikipedia.org/wiki/Hard_disk_drive)<span style="white-space: pre-wrap;"> or </span>[solid-state flash memory drives](https://en.m.wikipedia.org/wiki/Solid-state_drive)<span style="white-space: pre-wrap;">. </span>

<table class="align-center" id="bkmrk-dell-precision-t3600"><colgroup><col style="width: 240px;"></col></colgroup><tbody><tr><td>[![1000006963.jpg](https://hub.subspace.services/uploads/images/gallery/2025-04/scaled-1680-/1000006963.jpg)](https://hub.subspace.services/uploads/images/gallery/2025-04/scaled-1680-/1000006963.jpg)

Dell Precision T3600 Motherboard

</td></tr></tbody></table>

<span style="white-space: pre-wrap;">Many motherboards contain an </span>[RTC](https://en.m.wikipedia.org/wiki/Real-time_clock)<span style="white-space: pre-wrap;"> (Real-Time Clock) that keep track of time even when the computer temporarily loses power. Other hardware components may include: </span>[network interface cards](https://en.m.wikipedia.org/wiki/Network_interface_controller)<span style="white-space: pre-wrap;">, </span>[sound cards](https://en.m.wikipedia.org/wiki/Sound_card)<span style="white-space: pre-wrap;">, </span>[BlueTooth](https://en.m.wikipedia.org/wiki/Bluetooth)<span style="white-space: pre-wrap;">, and </span>[USB](https://en.m.wikipedia.org/wiki/USB)<span style="white-space: pre-wrap;"> for connecting external devices.</span>

## Firmware

This low-level software enables the hardware to interact with higher level software such as your operating system. Hardware components have programming embedded into them that enable them to communicate.

<p class="callout info">"Firmware" reflects the heterogenous blend of software and hardware.</p>

[Hardware abstraction](https://en.m.wikipedia.org/wiki/Hardware_abstraction)<span style="white-space: pre-wrap;"> provides an operating system with access to the low-level functions on a hardware component without needing to know its </span>[low-level machine code](https://en.m.wikipedia.org/wiki/Machine_code)<span style="white-space: pre-wrap;">. </span>

<div drawio-diagram="682"><img src="https://hub.subspace.services/uploads/images/drawio/2025-03/drawing-3-1743021093.png" alt=""/></div>

<span style="white-space: pre-wrap;">While easier to modify that hardware, altering firmware may require replacing a physical module or </span>[flashing](https://en.m.wikipedia.org/wiki/Firmware#Flashing)<span style="white-space: pre-wrap;"> a reprogrammable memory chip. Motherboards contain a reprogrammable firmware interface such as </span>[BIOS](https://en.m.wikipedia.org/wiki/BIOS)<span style="white-space: pre-wrap;"> (Basic Input Output System) or </span>[UEFI](https://en.m.wikipedia.org/wiki/UEFI)<span style="white-space: pre-wrap;"> (Unified Extensible Firmware Interface). </span>

<table class="align-center" id="bkmrk-ami-uefi-manager"><colgroup><col style="width: 240px;"></col></colgroup><tbody><tr><td>[![1000006146.webp](https://hub.subspace.services/uploads/images/gallery/2025-02/scaled-1680-/1000006146.webp)](https://hub.subspace.services/uploads/images/gallery/2025-02/scaled-1680-/1000006146.webp)

[AMI](https://en.m.wikipedia.org/wiki/American_Megatrends)<span style="white-space: pre-wrap;"> UEFI Manager</span>

</td></tr></tbody></table>

<span style="white-space: pre-wrap;">These offer access to hardware-level configurations such as which storage device to boot from or which components to disable. </span>[RAID](https://en.m.wikipedia.org/wiki/RAID)<span style="white-space: pre-wrap;"> allows your computer to enable low-level storage drive duplication to make sure you never lose your data. </span>

<span style="white-space: pre-wrap;">When the hardware is first turned on, the BIOS or UEFI will execute the </span>[POST](https://en.m.wikipedia.org/wiki/Power-on_self-test)<span style="white-space: pre-wrap;"> – or Power-On Self Test – to ensure all hardware is functional. After this, the firmware hands control to the software-based bootloader stored on the storage device and loads the operating system.</span>

## Software

<span style="white-space: pre-wrap;">The operating system offers a general-purpose interface for completing tasks, either using a </span>[command-line](https://en.m.wikipedia.org/wiki/Command-line_interface)<span style="white-space: pre-wrap;"> or </span>[graphical user interface](https://en.m.wikipedia.org/wiki/Graphical_user_interface)<span style="white-space: pre-wrap;">. These generally take more storage space necessitating that they're stored on internal data drives. </span>

<div drawio-diagram="683"><img src="https://hub.subspace.services/uploads/images/drawio/2025-03/drawing-3-1743021483.png" alt=""/></div>

[Drivers](https://en.m.wikipedia.org/wiki/Device_driver)<span style="white-space: pre-wrap;"> are leveraged as necessary to expand on the functionality of hardware beyond what is offered by the firmware. These are special software packages that directly "drive" hardware from the operating aystem. This is common for components like graphic cards, sound cards and other controller chips.</span>

<table class="align-center" id="bkmrk-debian-12-gnome"><colgroup><col style="width: 240px;"></col></colgroup><tbody><tr><td>[![VirtualBox_Debian - GNOME_02_04_2025_12_03_25.png](https://hub.subspace.services/uploads/images/gallery/2025-04/scaled-1680-/virtualbox-debian-gnome-02-04-2025-12-03-25.png)](https://hub.subspace.services/uploads/images/gallery/2025-04/scaled-1680-/virtualbox-debian-gnome-02-04-2025-12-03-25.png)

Debian 12 GNOME

</td></tr></tbody></table>

<span style="white-space: pre-wrap;">An operating system creates a user environment for running applications to perform specific tasks like opening a web browser or editing a word document. This type of software is often intended for one user through their user account on a computer they are accessing locally. </span>

<span style="white-space: pre-wrap;">Compared to user applications like a web browser that are used while sitting in the chair at your computer, </span>[server software](https://en.m.wikipedia.org/wiki/Server_(computing))<span style="white-space: pre-wrap;"> lets your computer respond to requests from client devices accessing over the network. </span>