This is one I have a tough time explaining to students who are so focused on the task at hand they don't feel there's time to sit back and reason in generality.
> The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise
By taking away all the non-essential things and leaving only on what you need, it allows you to truly understand the structures that you are studying. Definitely rings true when I work in ML/Haskell-style type systems. Easier said than done convincing the students though...
> By taking away all the non-essential things and leaving only on what you need, it allows you to truly understand the structures that you are studying.
This is the essence of type abstraction and parametricity!
This is one I have a tough time explaining to students who are so focused on the task at hand they don't feel there's time to sit back and reason in generality.