Tacit knowledge is inevitable... but it's also different from what this article is about. Tacit knowledge is the kind of knowledge (and skill!) that cannot be fully explained or taught in words—think mechanical skills you can only pick up through physical practice or very context-specific expertise you only get through experience. In programming good taste is crucial and entirely tacit: we can try to distill taste in…
When giving advice, I'm often tempted to point to a given situation, and to explain what rule of thumb I used to solve it.
But then I would see a junior programmer applying the rule of thumb in a completely different situation and I'd want to say, "No, that will end in tears!" And I realized that a lot of my rules of thumb were really dumb when taken out of context.
As far as I can tell, a huge part of expertise is having a large set of mappings like:
- In contexts like "C1", use rule of thumb "R1" or "R8".
It's very tempting to talk about R1, R2, etc. You can write blog posts like, "How R2 will transform your team!"
But a lot of real expertise comes from being able to say, "Oh, this is a combination of C7 and C78, so I should consider rules of thumb R7, R49 and R102. Ah, wait, no, R49 is just gross here."
So I've learned that, when mentoring, I need to spend a lot more time talking about the context before proposing any rules of thumb.