November 9, 2017

Underestimating Reverse Engineering

When I first encountered my first Rubik's cube, I was fascinated by the numerous colors and patterns. Like many others, the fact that was a three dimensional puzzle had a certain beauty to it that caused me to obsess over it for some time. Yet while I would eventually be successful with solving the first two layers on my own, the final layer always eluded me. And for the longest time, I refused to look up a solution because I had this notion that I had to figure it out "on my own." It wasn't until a few weeks ago that I realized that notion was stupid because it presumes that the best way to learn is linear. In fact, I would argue that the much less used cousin is just as valuable (if not more so): reverse-engineering.

Did I look up the solution to the final step of the Rubik's cube? You can bet your grandma's house I did. And by doing so, I learned three important things:

  1. While I had solved 2/3 of the cube, I still had five steps to go in the algorithm. This meant I had a lot farther to go then I even initially realized and explained my frustrations with the cube because my algorithm was wrong from the start.
  2. The time it would have taken me to work out the algorithm and then derive the necessary steps to do it would have required an immense amount of time that I frankly would have never been able to properly devote to it.
  3. Just because you have the instructions doesn't mean you can solve it. In tandem to learning the final steps of the solution, I learned from a few friends that they had looked it up before in the past but was still unable to solve it because the solution was a three-dimensional one. In other words, while you technically only had to follow the steps to solve the cube, conceptualizing the movements of the cube could easily throw someone off if they aren't adequately prepared.

While being able to follow a set of instructions doesn't seem like much of an accomplishment, what people often miss is that it provides the much needed realization that it is possible for you to achieve this goal. And by following the solution, it allows your brain to begin unraveling the steps and rationale behind why the algorithm works a certain way. And over time, if you understand the algorithm and then can solve the Rubik's cube without any help, who is there to accuse you of not doing you the proper way?

I'm sure that purists will scoff at my achievement, but that's just it, who cares? There's nothing wrong with using the solution to work your way back to understanding the problem because all that matters is that you make progress and grow. In fact, this is often the technique that developers use to get through their challenges as they look through StackOverflow answers.

Don't get me wrong. There can sometimes be this additional carthatic feeling of figuring out that algorithm on your own, but you always have to consider the cost / reward ratio. Maybe it's worth it for some things to have that linear path of understanding, but I prefer to make progress in a more timely manner. Either way, use reverse-engineering to your advantage when you can because regardless of what anyone else tells you, it is a legitimate and effective way of learning.