I think this is a really good question, and the answer might be that ideally you move up and down the ladder of abstraction, learning from concrete examples in some domains, then abstracting across them, then learning from applying the abstractions, then abstracting across abstractions, then cycling through the process.