Learn the inner workings of modern computer systems. From binary numbers to assembly programming.

All courses assume no prior knowledge and gradually increase in complexity.

Introduction to Modern Computers

  • What is a computer?
  • Analog vs. digital computers
  • Why we use digital computers
  • From Components and Circuits to Modern Computers
  • Basic Computer Architecture
  • An Overview of Computer Components and Hardware
  • The Motherboard
  • CPUs: How the Central Processing Unit Works
  • Random Access Memory (RAM)
  • Graphics Cards
  • Network Interface Cards
  • Computer Power Systems

Number Systems

  • Binary numbers: The heart of digital computers
  • Introduction to binary numbers
  • Binary, decimal, and hexadecimal

Logic Gates

  • Digital logic gates
  • AND Gate
  • OR Gate
  • NOT Gate
  • NAND Gate
  • NOR Gate
  • XOR Gate
  • XNOR Gate

Assembly Programming

  • Assembly Language: The Best Way to Learn How Computers Really Work
  • Getting Started with x64 Assembly Programming

Host and Network Hacking

What is a Computer?

A computer is a machine that performs an operation or calculation.

An early predecessor to the computer is the abacus. Abacus are mostly popular as a children’s toy in the West. However, abacus competitions have become popular in some areas in modern times (particularly India and China), sparking a renewed interest in this ancient tool.

The first computer we have record is probably the Antikythera mechanism, dated between about 205 and 60 BC:

The Antikythera mechanism is the earliest known computer.
Image credit: Nature 2021

Historical Computers

Throughout history, computers have been made with gears, pistons, relays, tubes, punch cards, and lots of precision-made machinery.

In contrast, modern computers are made with circuit boards and high-tech components. In large part, this is thanks to the invention of the semiconductor transistor, which we have been able to make smaller and smaller.

The transistor is the basic element of logic in a computer. It operates like a switch; when the transistor is conducting, we say that the switch is on and assign the value of ‘1’. When we flip the transistor off, we we assign the value of ‘0’. These are the ‘1’s and ‘0’s of binary logic that allow computers to function.

What can we do with a bunch of ‘1’s and ‘0’s? Quite a lot, it turns out. And what we can do depends on how many transistors we have.

Modern computers have hundreds of billions of transistors, so they can do quite a lot.

The Two Types of Computers

There are two types of computers: analog computers and digital computers.

Analog computers use physical characteristics like electrical or mechanical quantities in order to model a problem. In other words, they create a physical representation of the specific problem that they are trying to solve.

Analog computers can be incredibly good at solving one specific problem extremely fast and with excellent precision.

Their only downside is that they aren’t programmable; they can only do the one task that they are designed for.

This is where digital computers come into play, and why they are so popular today.

Digital Computers

Digital computers are more complex than analog computers. Instead of modeling one problem and trying to solve it, a digital computer uses a bunch of transistors that can hold the value of a ‘1’ or a ‘0’. This is called binary.

The magic of this system is that if we’re clever, we can do a lot of things with a bunch of ‘1’s and ‘0’s. We can do complex mathematics and we can create logic gates that allow us to build even more functionality. It turns out that we can do all of things that we want daily use computers to do; text editing, web browsing, video watching, emailing, printing, etc.

Modern Computers

When we say the word ‘computer’ today, what you think of is probably a modern computer, not a historic one.

Modern computers are made of lots of different components that do specific things. You’ve probably heard of a lot of them, like processor/CPU, memory/RAM, storage or disk space, power supply, etc.

Each of these components work together to build a functioning computer that is capable of being programmed to do an infinite number of tasks.

Central Processing Unit (CPU)

The central processing unit (CPU), commonly called processor, is an integrated circuit that executes programs. The CPU is the most important part of the computer; it performs input/out, math, and logical operations in order for programs to run.


Computers need to be able to store information that can be quickly accessed for use in programs. This is where memory, particularly the different kinds of RAM (random access memory) come into play.


Not all data needs to be accessed immediately or is needed for a program to run. Storage provides a way to store data for longer periods of time. It also allows us to create more complex sets of programs like operating systems, which are way too big to economically keep in memory. Storage devices include hard disk drives (HDD) as well as newer, faster solid state drives (SSD).

Power Supply

A computer needs power. More than that, it needs a steady source of high quality power that will stay constant and won’t wreak havoc on all of the sensitive components. That’s where the power supply comes in.


The motherboard is a printed circuit board (PCB) that functions as the central hub of data flow in a computer. You can think of the mother board as a circuit board that everything else gets plugged into. The CPU, memory, storage, graphics card, power supply are all connected to the motherboard either directly or with a plug.

Peripheral Devices

A computer doesn’t do any good if you can’t interact with it. That’s where peripheral devices come in. Peripheral devices include input devices like a mouse and keyboard, as well as output devices like a screen, projector, or printer.

Computer Software

So far we’ve covered the physical components of computers; the physical components make up the hardware of the computer system.

Everything that is not physical hardware is classified as software. This includes the programs, data, protocols, and applications that we, as users, interact with on the computer.

Assembly and Machine Code

How does the software actually interact with the hardware?

Computers rely on the concept of abstraction in order to build projects of increasingly greater complexity.

At the lowest level, the processor only has a small number of things that it actually does with data, like move data from one position to another or add two numbers together.

The actual ‘0’s and ‘1’s, called bits, represent the actual machine code that gets processed by the computer.

Instead of having to work with ‘1’s and ‘0’s, processors have an assembly language that gives programmers one layer of abstraction from the machine code. Assembly is relatively readable but still very limited in what it can do by itself because allows programmers to interface directly with the processor.

Other programming languages (such as C) are then built directly on top of the assembly language. Using the relatively small number of operations that we can do in Assembly, we can now do a much larger number of operations with a more complex programming language. The only downside is that we are no longer interfacing directly with hardware.

These days, most programming is done on high level programming languages like Python and JavaScript. These languages have a lot of abstraction between them and the underlying machine code but come packed with features that make them easy to use and useful out of the box for a wide range of tasks.