Models of Abstraction
Discussions of abstraction in programming often feel pointless. I've started to think that the participants have different models of abstraction. However, it's been hard for me to say distinguish them clearly. Some ideas are:
- Abstraction as deduplication: everywhere
- Abstraction as indirection: enterprise Java
- Abstraction as generality: Haskell typeclasses
There is substantial overlap, but each model of abstraction has different talking points, for and against:
- don't repeat yourself
- duplication is better than the wrong abstraction
- avoid coupling
- it should easy to find out what the code does
- keep code concrete
- laws1
Does one of these models have a claim to be the definition of abstraction? What other models are there? What, if anything, makes it fruitful to discuss "abstraction", without specifying a model?
I need a verb, but I have none↩