Programming Bottom-Up (1993)
So how do you know that your low-level construct is on the path to where you want to be?<p>Quite often, you can see immediately that you need to represent X, that representing X requires foo() and bar(), and you can confidently make these things with a reasonable expectation of their usefulness. This already depends, however, on having done some sort of preliminary high-level design thinking. How much you need to do to be confident that you can identify an efficient set of primitives depends on what you are trying to do and how familiar you are with its problems. Writing primitives and utilities can simply be a way to avoid tackling the difficult bits.<p>For a cautionary tale providing a counterpoint to this article, there is this somewhat well-known case involving writing a Sudoku solver:<p><a href="http:&#x2F;&#x2F;ravimohan.blogspot.in&#x2F;2007&#x2F;04&#x2F;learning-from-sudoku-solvers.html" rel="nofollow">http:&#x2F;&#x2F;ravimohan.blogspot.in&#x2F;2007&#x2F;04&#x2F;learning-from-sudoku-so...</a>