I was reading an old article about problem solving and thought I would share an interesting idea.
Learn to invert problems.
I was taught in school that the "right" way to solve a math problem is to start with the given formula, and work your way to the solution. The "wrong" way is to start with the problem, and derive the formula. I have found that for many hard problems, you can invert the problem, and solve it much faster.
A common example is to find the formula for a parabola that passes through a set of given points. Instead of working on it forward, start with the points and work backwards. That is, try to find what kind of formula would generate these points. A common use case for this is when you want to find the formula of a function that maps some set of data to another set of data. In mathematics, this is also called as finding the inverse function. In programming, it is the same idea, but without the "formula" part. You can create a function that takes some data as input and returns some other data as output. Then you feed your data to this function, and you get the other data as output. This is called as "inverting the data".
This is a very powerful idea because most hard problems are best solved when they are addressed backward. By inverting the problem, you can keep yourself in the "solution space" (or more specifically, in the output space). This allows you to reason about your problem in a more comfortable way. The reason why I'm so fascinated by this idea is that I've found it very useful in both math (computer programming) and general life problems.
I hope you find this idea useful as well.