What is a Software Application ?
A Software Application in the end is about providing Digital Interfaces
to End-Users. The nature of the Digital Interface varies depends on the
Users and their Domain[s] in question.
The Digital Interfaces of the Application manage,
- Data Flow
- Control Flow
To implement the Digital Interfaces you make use of a Programming Stack.
Engineering products typically have series and each series typically has generations.
For a car company, we can imagine a A series and a B series.
Firstly A and B can be so different, the only thing common between them is primitives
and designs ideas.
For Software this is,
- Data Structures
- UI / UX Patterns
For A and B, the manufacturing pipeline can be common.
- Build Process
Raw Material -> A Real Factory
-> Assembly Line
-> Split Raw Materials
-> Make Parts Concurrently
-> Quality Check
-> Package Product
You may have some common parts so they can be reused and upagraded because they follow a standard interface.
In Software this is
- Interfaces and Interface implementations, Modules and libraries.
Therefore what makes reuse possible is Interfaces, whether it is UI or Modules. By having interfaces you can
change things without breaking them.
But not everything has to be an interface! Only things which be can offer multiple variations need to be interfaces.
Software Engineers make the claims of reuse by classes. That is clearly nonsense. Classes are only useful in implementing Data Structures. Nothing more.
Can we be inspired by Engineering to do better ?
A litmus test for a programmer understanding modularity is whether he can implement a plugin system.
Interface Decomposition and Design is key.