I wish more authors followed this philosophy:
The approach I have taken here is to try to move always from the particular to the general, following through the steps of the abstraction process until the abstract concept emerges naturally. … at the finish it would be quite appropriate for the reader to feel that (s)he had just arrived at the subject, rather than reached the end of the story.
From the preface here (ISBN 0486450260).
When books start at the most abstract point, I feel like saying to the author “Thank you for the answer, but what was the question?”
I thoroughly agree. Recently I found myself curious about Chef, an automation tool but without any clue exactly what that means or how to use it. There are many other tools were I would love to see a few examples of the tool/platform/service solving specific, common problems followed by why it is capable of solving so much more.
Have you read Goldblatt’s book, and was it good?
g: I have read the first three chapters of Goldblatt’s book. These three chapters make a nice, clear introduction to category theory, gradually increasing in abstraction as the preface promises.
In chapter 4, Goldblatt begins his main topic, topoi, and the reading gets a little harder. I haven’t read much of chapter 4 so far and have only skimmed the book from there on. I’d recommend the book for someone who doesn’t care about topoi or logic. Just buy it as in introduction to category theory and read the first three chapters.
This reminds me of Generic Programming. From “Notes on Programming” by Alexander Stepanov (http://www.stepanovpapers.com/notes.pdf):
“It is my belief that behind every useful line of code hides a generic algorithm. This belief is based on a personal experience: when I see a piece of code I immediately start asking, ‘What is the underlying concept that makes this code work?'”
“Now, let us spend some time deriving generic algorithms. The approach is quite simple. First we need to find a useful piece of code. We can use all kinds of sources: existing libraries, Knuth, application code. It should, however, be a useful piece. There should be some evidence that people use it or want to use it. Secondly, we see what makes it work and try to abstract the requirements and identify the concept on which it is really defined.”
Similarly in “Elements of Programming” by Alexander Stepanov and Paul McJones (http://www.elementsofprogramming.com/); in Section 5.9., “Concepts and Their Models”:
“This chapter proceeds deductively, from more general to more specific concepts, by adding more operations and axioms. The deductive approach statically presents a taxonomy of concepts and affiliated theorems and algorithms. The actual process of discovery proceeds inductively, starting with concrete models, such as integers or reals, and then removing operations and axioms to find the weakest concept to which interesting algorithms apply.”
(An example of this approach is Section 5.5., “Generalizing gcd,” applying this process to the greatest common divisor (GCD) algorithm.)