https://youtu.be/CAlU_hs_rZ8?t=3069
It’s good to generalize when things get simpler in generality. I.e. general case vs case analysis
This seems to have similarities to the practice of Topology in Mathematics (of which I’m no expert of) in how they squash degerate cases.
Discipline Of Programming by Dijkstra:
- there are useful and useless generalizations
Good practices:
Concepts are defined if they are useful. A concept for which there is only one model (example, a constant size sequence is modeled only by array[k]) or for which there are no particular algorithms does not need to be introduced.
There are such things as concept schemas, for which there is no particular algorithm yet define a rough schema for a bunch of concepts. An example: composite objects and their properties of non-circularity, disjointness and ownership.
Note: concepts are called theories in mathematics