The pragmatic programmer tips(pragprog.com) |
The pragmatic programmer tips(pragprog.com) |
A corollary of this is that absent really good hiring practices, "democratic" design processes are doomed to fail, since the non-abstractionists invariably out vote the ones who get it.
But someone who has read both books can explain it better.
It's less about programming per se and more about how to think about programming.
I preferred Kernighan and Pike's _The Practice of Programming_ to both TPP and Code Complete, though. _Programming Pearls_ (and its sequel) have also held up well to repeated reading.
More usefully, look at some APIs that have earned serious respect, especially by people who clearly are abstractionists. If you don't "get" too many of the reasons why, then you probably aren't (yet) an abstractionist.
This also applies to languages and idioms in them. If you grok SICP, you're probably an abstractionist (if you don't, I wouldn't say you necessarily aren't one).
The best self-test, and it's eerie when it happens, is that you design a greenfield (new) architecture and start building it, and then discover that it solves problems you didn't realize you had. I suspect this requires a fair degree of experience: it happened to me in the mid-90s, having stared programming in 1978 ... although maybe I got a taste of it in 1992. But it might have happened earlier if I'd had a chance to do a greenfields project earlier.
Some facility with abstract math is a good sign, e.g. can you do pure algebraic manipulation, especially outside the context of solving a real world problem?
Once you learn to do that, it becomes much easier to tell if you actually understand something they don't or if your ideas are genuinely really complex.