Personally I use a completely different strategy when faced with a problem that can’t be adequately understood just by studying it for a short time: I go ahead and attempt solutions, and use their shortcomings as a way of arriving at a better understanding of the problem.
Obvious caveats:
This doesn’t work with a problem where you can’t know that an attempted solution doesn’t work until it’s too late.
You have to be able to throw away solution drafts, not just theoretically willing if presented with ironclad proof of their inadequacy, but as a matter of routine practice.
And in fact, prototyping solutions to programming problems is an extremely good way to explore the problem well enough to have a better understanding of what is actually required, and what the best way to tackle it is.
Personally I use a completely different strategy when faced with a problem that can’t be adequately understood just by studying it for a short time: I go ahead and attempt solutions, and use their shortcomings as a way of arriving at a better understanding of the problem.
Obvious caveats:
This doesn’t work with a problem where you can’t know that an attempted solution doesn’t work until it’s too late.
You have to be able to throw away solution drafts, not just theoretically willing if presented with ironclad proof of their inadequacy, but as a matter of routine practice.
And in fact, prototyping solutions to programming problems is an extremely good way to explore the problem well enough to have a better understanding of what is actually required, and what the best way to tackle it is.