Your points about social context are great ones and 100% valid, but I want to make a case for "stop thinking just do the task":
---
Often, trying (and potentially failing) to do a task is the best way to learn about it. The key is to be very explicit about what parts of that task you actually understand and which ones you're pulling out of your ass.
This is especially true when creating software. It's super rare to have requirements that are concrete and detailed enough to form a comprehensive understanding of the final design before you start developing it. Instead there are usually parts that have clarity and others that are fuzzy. If you can enumerate those and keep them separate you can often leverage the parts you understand to make progress on those you do not. Writing placeholder/obviously-terrible code to stand in for the unknown parts just so that you can spin up a running system is a great way to do that. Along the way you'll see what patterns emerge, where you hit walls, etc, which is not always easy to imagine with raw abstract thought. And having "working" software that you can play with is a great way to find edge cases and otherwise make progress on those unknowns. Once you've gained a more complete understanding you can replace the placeholder junk with well-designed/actually-thought-out modules.
(Another obvious reason to do this is if your company will literally go out of business if you wait until you have a perfect understanding to launch a product/service, but I think most people here get that.)
I'm not sure how much this generalizes, but it also works well for me when writing. I usually start with a vague understanding of an idea I hope to communicate, then jot down disjointed sentences to capture parts of it. As I do so it gradually becomes clear how things are connected, where my reasoning is muddy, what I thought I knew but can't express so probably don't, etc, and I can use this gained understanding to iteratively rewrite and reshape my message until it becomes something coherent. Sometimes, anyway; other times I don't end up sending/publishing it at all because along the way I learned that the thing I was hoping to communicate was based on a faulty assumption or is not as straightforward as I thought it was. Which is great, because either way I've learned something.
---
I guess I'd say it differently: "keep thinking and do the task".
Agree with this. I think of education as a "series of increasingly smaller lies". If you try to explain everything right away with complete fine-grained truthfulness, you quickly get to molecular dynamics, and don't have to stop there.
A common unspoken theme in the post is, the art of learning is knowing "what" to care about and "when".
---
Often, trying (and potentially failing) to do a task is the best way to learn about it. The key is to be very explicit about what parts of that task you actually understand and which ones you're pulling out of your ass.
This is especially true when creating software. It's super rare to have requirements that are concrete and detailed enough to form a comprehensive understanding of the final design before you start developing it. Instead there are usually parts that have clarity and others that are fuzzy. If you can enumerate those and keep them separate you can often leverage the parts you understand to make progress on those you do not. Writing placeholder/obviously-terrible code to stand in for the unknown parts just so that you can spin up a running system is a great way to do that. Along the way you'll see what patterns emerge, where you hit walls, etc, which is not always easy to imagine with raw abstract thought. And having "working" software that you can play with is a great way to find edge cases and otherwise make progress on those unknowns. Once you've gained a more complete understanding you can replace the placeholder junk with well-designed/actually-thought-out modules.
(Another obvious reason to do this is if your company will literally go out of business if you wait until you have a perfect understanding to launch a product/service, but I think most people here get that.)
I'm not sure how much this generalizes, but it also works well for me when writing. I usually start with a vague understanding of an idea I hope to communicate, then jot down disjointed sentences to capture parts of it. As I do so it gradually becomes clear how things are connected, where my reasoning is muddy, what I thought I knew but can't express so probably don't, etc, and I can use this gained understanding to iteratively rewrite and reshape my message until it becomes something coherent. Sometimes, anyway; other times I don't end up sending/publishing it at all because along the way I learned that the thing I was hoping to communicate was based on a faulty assumption or is not as straightforward as I thought it was. Which is great, because either way I've learned something.
---
I guess I'd say it differently: "keep thinking and do the task".