Skip to content
Documentation Background

Software Essentials

Software is the set of instructions that tell hardware what to do. If hardware is what you can hold, software is what runs on it.

  • Coding: Translating logic into a language a machine can understand
  • Scripting: Writing code in a scripting language, typically for single or limited-range tasks
  • Programming: Writing code in a full programming language to build applications

Any software created to fulfill a specific user need.

Examples: web browsers, email clients, photo editors, word processors, games

Software that keeps the core system running - the infrastructure layer.

Examples: operating systems, BIOS/UEFI, device drivers, utilities

Software that is permanently stored on a hardware component. It doesn’t get installed by users - it ships with the device.

Example: BIOS chip on a motherboard, controller firmware on an SSD

TypeDescription
Open-sourceSource code is public; freely modified and shared
Proprietary / CommercialSource code is private; governed by a license

CPUs only understand binary machine code - sequences of 1s and 0s representing instructions. Before high-level languages, programmers used assembly language - a human-readable shorthand that maps closely to machine instructions and gets assembled into binary.

; Add two integers (simplified x86 assembly)
mov eax, 5 ; Load 5 into register EAX
add eax, 3 ; Add 3 to EAX, result in EAX

Source code is passed through a compiler which translates it into machine code ahead of time. The result is a binary executable.

  • Faster runtime execution
  • Platform-specific output (need to recompile for each OS/architecture)
  • Examples: C, C++, Go, Rust

Code is read and executed line by line by an interpreter at runtime - no prior compilation step.

  • Slower execution, but more portable
  • Easier to iterate and debug
  • Examples: Python, JavaScript, Ruby, Bash

Abstraction is the principle of hiding complexity behind a simpler interface. It’s foundational to all of computing:

  • You don’t need to understand transistor physics to write a Python script
  • A web developer doesn’t need to understand TCP/IP to fetch a URL
  • The CPU doesn’t need to know what a “web page” is - it just processes bytes

Every layer of the computer (hardware → OS → language runtime → application) abstracts away the layer below it.


A software bug is an error in code that causes unexpected behavior. Bug management is part of every software lifecycle.

Version numbers (e.g., 4.1.2) follow a convention like Semantic Versioning (SemVer):

MAJOR.MINOR.PATCH
4 . 1 . 2
PartMeaning
MAJORBreaking changes - incompatible with prior versions
MINORNew features - backward compatible
PATCHBug fixes - backward compatible

A version of 4.1.2 is higher (newer) than 3.9.9.


Git is the industry-standard version control system - it tracks changes made to files and directories over time.

Core concepts:

  • Repository (repo): The tracked project directory
  • Commit: A saved snapshot of changes
  • Branch: An independent line of development
  • Merge: Combining branches together
Terminal window
git init # Initialize a new repo
git add . # Stage all changes
git commit -m "Initial commit"
git status # Show working tree status
git log --oneline # Compact commit history

Automation makes processes work automatically without manual intervention. In IT, this ranges from simple scripts to full infrastructure-as-code pipelines.

Common automation use cases:

  • Scheduled backups (cron jobs)
  • Auto-installing software on new machines
  • Monitoring alerts and auto-remediation
  • CI/CD pipelines for code deployment

Installing software is just the beginning. Managing it involves:

  1. Installation - package managers (apt, brew, winget, MSI installers)
  2. Updates - applying patches and new versions
  3. Compatibility - 64-bit OS → install 64-bit applications for best results
  4. Removal - clean uninstallation, removing config/cache files
  5. Licensing - understanding what the license allows (personal vs. commercial use)