Layers of Computing
Computers are built heavily around the concept of abstraction – 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.
Abstraction
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.

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 USB protocol, users can often connect these devices without needing to give it much thought.
There standards are often defined by the technology's originating corporation – such as Intel's x86 processor architecture – 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.

A software compiler can take human-readable, high-level programming languages and translate them until they are low-level machine code that can run on your hardware. There are many different programming languages – each requiring their own compiler – and they can be sorted by their level of abstraction.
Visual Language
As the name implies, these programming languages use a visual metaphor to manipulate elements and build programs.
High-Level Language
These programming languages are highly abstracted from raw machine code and generally use text-based natural language elements.
#include <iostream>
using namespace std;
int main() {
cout << "Hello World";
return 0;
}
Assembly Language
This category of languages offers mnemonic representations of physical machine instructions and operate extremely efficiently.
mov abx, 5
mov cdx, 7
add abx, cdx
These x86 assembly code instructions will produce the sum of 5 and 7.
Machine Language
This language is completely without abstraction and represents the literal binary data that is being processed by the computer.
Machine language is entirely dependent on the hardware being used, which is why computer components are created to follow existing standards.
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.
Standards are defined by a corporation or agreed upon througha committee. They allow manufacturers and developers to use hardware interchangeably within compatible environments. By developing standardized systems, we can translate software into a language usable by our computer.

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.
Hardware
This is the physical side of computing, created using integrated circuits created from silica and rare earth metals. The name "hardware" is derived from its relatively rigid nature in respect to change.

Hardware includes the motherboard, which acts as a seat for all hardware parts within a computer and enables their communication. The CPU performs precise calculations, the GPU handles graphical manipulation, and the RAM is used to store data in use by software. Long-term data storage is accomplished through high-capacity platter disks or solid-state flash memory drives.
Dell Precision T3600 Motherboard |
Many motherboards contain an RTC (Real-Time Clock) that keep track of time even when the computer temporarily loses power. Other hardware components may include: network interface cards, sound cards, BlueTooth, and USB for connecting external devices.
Firmware
This low-level software enables the hardware to interact with higher level software, such as your operating system. Hardware components have low-level code embedded into them that enable your computer to configure them during startup.
Hardware abstraction provides an operating system with access to the low-level functions on a hardware component without needing to know its low-level machine code. For example, requesting an idle hardware component go to sleep to conserve power.

Altering firmware may require replacing a physical module or flashing a reprogrammable memory chip. The name "firmware" reflects the amorphous blend of hardware and software components. Motherboards contain a reprogrammable firmware interface such as BIOS (Basic Input Output System) or UEFI (Unified Extensible Firmware Interface).
These offer access to hardware-level configurations such as which storage device to boot from or which components to disable. RAID allows your computer to enable low-level storage drive duplication to make sure you never lose your data.
When the hardware is first turned on, the BIOS or UEFI will execute the POST – 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.
Software
The operating system offers a general-purpose interface for completing tasks, either using a command-line or graphical user interface.

These generally take up much larger amounts of storage space, necessitating that they're stored on internal data drives. When necessary, drivers can be leveraged to expand on the functionality of hardware beyond what is offered by the firmware. This is a very common practice for components like graphics cards, sound cards and other motherboard chip sets.
The operating system creates a user environment for running applications to perform specific tasks, such as opening a web browser or accessing a word processor. Server software enables your operating system to respond to requests from client computers accessing over the network.