It is often said that their is no problem of computer science that cannot be solved with another level of indirection (or layer of abstraction).