Reduction

“Divide and conquer.” That’s what the professor who taught me recursion called it.

By “it”, I don’t mean recursion. I mean breaking a complex problem down into a set of simple problems. This was handy when learning to write recursive functions, though. We could separate (divide) them into the base case and the recursive case(s), then solve (conquer) each case independently.

Reduction is more broadly applicable, though, of course.

When you use a model, you reduce a complex domain to a simpler one to help you focus on a particular problem.

When you ask clarifying questions (and don’t fear asking stupid ones), you reduce the set of stuff you don’t know about a domain. This has a similar effect: It helps you solve a problem by narrowing the set of things you have to think about.

When you construct things from small pieces (oh, hey, pure functions make great building blocks), for each of those pieces, you reduce the scope of a complex problem into a set of simpler ones. Divide and conquer.