Software Engineering Principles and Practices / Introduction to Software Engineering

What is Software?

Software is often defined as the "intangible" part of a computer system. However, in Software Engineering, we define it as a complete product.

🧱 The Formal Definition

Software is not just the code you write in a text editor. It is a package that includes:

  1. Programs: The instructions that provide desired functions and performance.

  2. Data Structures: The schemas and databases that allow the programs to manipulate information.

  3. Documentation: The descriptive information (manuals, design docs, comments) that explains how to use and maintain the system.

📝 Key Concept: Software = Programs + Documentation + Data


🧬 Characteristics of Software

To understand software engineering, you must understand how software differs from physical products (like a bridge or a car).

  • Software is Developed/Engineered, Not Manufactured: In manufacturing, once a design is finalized, the cost is in the raw materials and labor to replicate it. In software, the "manufacturing" (copying a file) costs zero. The entire cost and effort are in the design and engineering phase.

  • Software Doesn't "Wear Out": Hardware components suffer from environmental stress and friction, leading to a "wear-out" phase. Software is immune to the laws of physics; however, it suffers from Software Deterioration.

  • The Change Paradox: Because software is "soft" (easy to change), users expect frequent updates. Every time a piece of software is changed to fix a bug or add a feature, it is likely that new bugs will be introduced.


📂 Types of Software

Software is categorized based on its application and the "problem space" it occupies:

Category

Description

Examples

System Software

Provides the infrastructure for other software to run on.

Windows 11, Linux, macOS, BIOS.

Application Software

Stand-alone programs that solve a specific business or personal need.

MS Word, Spotify, Chrome.

Engineering/Scientific

Software used for complex simulations and "crunching" numbers.

MATLAB, CAD software, Weather forecasting tools.

Embedded Software

Resides within a larger hardware system to control its functions.

Tesla Autopilot, Microwave controls, Digital watches.

Web Apps

Software that runs in a browser and lives on a remote server.

Notion, Gmail, Amazon.

Artificial Intelligence

Software that uses non-numerical algorithms (Neural Networks) to solve complex problems.

ChatGPT, Midjourney, Fraud Detection.


⚙️ The Components of a Software Product

When you deliver software to a client, you aren't just sending a .zip file of code. A professional software product consists of:

  1. Source Code: The high-level language written by developers (Python, Java, C++).

  2. Object Code: The machine-readable version after compilation.

  3. User Manuals: Instructions for the end-user.

  4. System Documentation: Technical specs, API docs, and architecture diagrams for the engineers who will maintain it later.

  5. Test Suites: The scripts and data used to prove the software works as intended.


💡 Why does this matter?

Understanding that software is a complex, evolving system—and not just a "one-off script"—is the first step toward becoming a Software Engineer. If software was just code, we wouldn't need engineering principles; we would just need fast typists.