Discussion about this post

User's avatar
J. B. Rainsberger's avatar

"When I’m changing this function, I want to be able to consider what’s inside it while ignoring what’s outside it. Being able to make this distinction gives me freedom to think that I wouldn’t have if I had to consider all lines of code in the whole system at the same time."

This has emerged for me as maybe The Key Point in software design practice. I want the option to ignore things. As many as possible. I want to focus with confidence. We humans, we can only function at all because we guess pretty well at what we can safely ignore. (Well enough to survive, anyway.) If we didn't need this ability, we would just dump everything in main() and be done with it.

And yet, so many programmers act like they don't need it. They are obsessed with the details. They feel most powerful when they know all the details.

I feel most powerful when I can ignore all the details.

Expand full comment
J. B. Rainsberger's avatar

I conjecture that the average competent programmer feels more comfortable with library-style abstraction than they do with framework-style/Template Method-style abstraction. They feel more open to trust the wisdom of recombinable small parts than to trusting the wisdom of reusable workflows. They feel more comfortable ignoring the details "above" them than they do ignoring the details "below" them in the dependency tree. I think there is much to be gained by helping them become more comfortable ignoring the details "below' them. In extracting Template Methods, workflows, frameworks, whatever they prefer to call them.

Anyone else?

Expand full comment
2 more comments...

No posts