A collection of instructions to be executed by
a computer/processor
To the Developer:
A collection of human-readable statements (in a
language) that can be converted to a collection of
instructions to be executed by a
computer/processor
The Organization of Software
Program:
Any piece of software that can "run on its own" (including
utilities, tools, scripts, apps, etc...)
Sub-Program:
A collection of instructions/statements that implement an
algorithm for accomplishing a specific task or tasks
Library:
A group of related sub-programs for accomplishing a specific
collection of (usually related) tasks
From Software to Software Product
What People (Other than Us) Care About:
Having everything they need to solve one or
more problems or achieve one or more goals (i.e., a complete means
to one or more ends)
Definition:
A software product is one or more programs,
sub-programs, or libraries, along with the data and
supporting materials and services, that a client can use
to solve problems or achieve goals
Kinds of Software Products
Bespoke:
Software products that are developed (usually under contract)
for a specific client
Generic:
Software products that are developed (usually speculatively)
and then sold to market clients (either a mass market or
a niche market)
Software Engineering
Defined:
The application of (scientific) theories, methods and tools
to the specification, design, creation, verification/validation,
deployment, operation, and maintenance of
software products
Scope:
From specification to maintenance
Involves technical and managerial concerns
Involves theories/methods from psychology,
mathematics/statistics, computer science, and management (of
people and resources)
Consists of science and art
Software Engineering vs. Computer Science/Engineering
Computer Engineering:
The application of theories (often from physics) to the
creation of computational devices
Usually thought of as a subset of electrical and electronic
engineering
Computer Science:
The theories and methods that underlie computation and the use of
computational devices