Skip to content

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)