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.
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.
What value does programming techniques add here?
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 |