There are more than two types. Or, at least, more than one way to tinker with the code.
Just like aleph_minus_one, I like to tinker at a higher level: find a more general way to solve things, find a new way to structure abstractions, etc.
> "how could an abstraction look like in which 2-4 become trivial special cases for many classes of programming problems?".
If you're interested in abstractions, you need to understand the problem space itself, not just a specific instance of the problem.