Software Essentials
What Is Software?
Section titled “What Is Software?”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
Types of Software
Section titled “Types of Software”Application Software
Section titled “Application Software”Any software created to fulfill a specific user need.
Examples: web browsers, email clients, photo editors, word processors, games
System Software
Section titled “System Software”Software that keeps the core system running - the infrastructure layer.
Examples: operating systems, BIOS/UEFI, device drivers, utilities
Firmware
Section titled “Firmware”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
Open-Source vs. Proprietary
Section titled “Open-Source vs. Proprietary”| Type | Description |
|---|---|
| Open-source | Source code is public; freely modified and shared |
| Proprietary / Commercial | Source code is private; governed by a license |
How Software Executes
Section titled “How Software Executes”Machine Code & Assembly
Section titled “Machine Code & Assembly”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 EAXadd eax, 3 ; Add 3 to EAX, result in EAXCompiled Languages
Section titled “Compiled Languages”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
Interpreted Languages
Section titled “Interpreted Languages”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
Section titled “Abstraction”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.
Software Bugs & Versions
Section titled “Software Bugs & Versions”A software bug is an error in code that causes unexpected behavior. Bug management is part of every software lifecycle.
Software Versioning
Section titled “Software Versioning”Version numbers (e.g., 4.1.2) follow a convention like Semantic Versioning (SemVer):
MAJOR.MINOR.PATCH 4 . 1 . 2| Part | Meaning |
|---|---|
| MAJOR | Breaking changes - incompatible with prior versions |
| MINOR | New features - backward compatible |
| PATCH | Bug fixes - backward compatible |
A version of 4.1.2 is higher (newer) than 3.9.9.
Version Control
Section titled “Version Control”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
git init # Initialize a new repogit add . # Stage all changesgit commit -m "Initial commit"git status # Show working tree statusgit log --oneline # Compact commit historySoftware Automation
Section titled “Software Automation”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 (
cronjobs) - Auto-installing software on new machines
- Monitoring alerts and auto-remediation
- CI/CD pipelines for code deployment
Managing Software
Section titled “Managing Software”Installing software is just the beginning. Managing it involves:
- Installation - package managers (
apt,brew,winget, MSI installers) - Updates - applying patches and new versions
- Compatibility - 64-bit OS → install 64-bit applications for best results
- Removal - clean uninstallation, removing config/cache files
- Licensing - understanding what the license allows (personal vs. commercial use)