Bill Venners has an interesting article on Abstraction and Efficient. He says that Abstraction is a mechanism to understand things. A good analogy he lays out is in Mathematics. Where expressing a solution means we really did understand the problem and not write up some code to try a “special case“. Also states that it is important to generalise and see one particular problem as a example of the class of problems. You can read the article <strong>here</strong> , Part I (c++ style sweet spot) can be found <strong>here</strong>  and Part II (modern c++ style) <strong>here</strong> .