Program design is the disciplined, formal process of constructing the internal structure and behavior of a software artifact such that it satisfies a given specification, under resource constraints, by selecting and organizing computational abstractions (e.g., data types, control structures, and interfaces) into coherent, composable units (e.g., functions, classes, modules) that collectively realize a correct, maintainable, and efficient program.

Index

Guide

Or how to capture a process in a symbolic construct that can then animate and give rise to the desired computation?

In this note, we will cover program design; programming paradigms associated with different models of computation; and programming abstractions; providing a link with algorithms, data representation, Hardware/Software Interface; etc.

List of Topics

What value does programming techniques add here?

Program Design vs System Design

Aspect System Design Program Design
Level of Abstraction High-level (architectural) Low-level (implementation)
Scope Entire system or application comprising multiple components Single program/module/component
Focus Interaction, integration, and coordination of components Internal structure and behavior of a component
Goal Define architecture, interfaces, communication, scalability, reliability Create correct, maintainable, efficient code within design constraints
Output Architectural diagrams, module boundaries, protocols, system topology Class diagrams, algorithms, data structures, code structure
Concerns Scalability, fault tolerance, distributed computing, data flow, deployment Algorithm design, modularity, encapsulation, coding style
Typical Questions How do modules communicate? How is data stored and replicated? How to ensure availability and security? How to implement this algorithm? Which design pattern fits? How to keep code maintainable?
Methods & Tools UML component diagrams, system modeling, API definitions, infrastructure planning Pseudocode, flowcharts, design patterns, refactoring techniques
Time Horizon Long-term system lifecycle, including deployment and operation Coding, testing, debugging phases during development

Conceptual Model