An interface to an algorithm is not an abstraction of a problem domain. It is an implementation. Understanding the algorithm is a requirement for applying it. It should expose the meaningful properties of the algorithm. If you black box it at too low a level, you frustrate the developer who understands the algorithm, forcing them to write their own.
- Leak all the abstractions. Arrays, sets, maps and graphs are a valid level of abstraction.
- Make decisions and turn them into rules. Fear not commitment.
I don't like to write about software, that is the first thought. The second