Some time ago I had a weird conversation with one of my university colleagues. He was struggling to get some basic stuff working in Angular and he asked me for help. It went something like this:
Him: Do you know why this might be not working?
Me: Oh, yeah, you’re calling stuff in the wrong order. Move this here and move this there.
… sounds of coding …
Him: Yeah, works now, thanks!
Me: No problem, it’s how the bootstrapping works. See, when Angular…
Him: I don’t care how Angular bootstrapping works. I want to build an app, not learn Angular implementation details.
Sounds familiar? I had at least a dozen conversation of this kind throughout my career so far.
The problem at hand, if that’s not obvious yet, is that oftentimes we are so focused on solving the problem at hand, that we forget to ask one of the most important questions: why?
One consequence of that is pretty straightforward – the next time we come across a similar problem, we will hit the wall again and have to solve it all over again. In the “best" case scenario, the new problem will be similar enough to the old one and we will be able to copy the solution that we found before.
The other consequence is a little more profound. Every time we forget (or consciously reject) to push for a deeper understanding, we strip ourselves of a little bit of growth. Instead of learning something and being a tiny bit better programmer, we are merely a tiny bit older one.
For a singled out case, the overall difference might be marginal and barely noticeable. Over time though, the small wins (or their lack) compound and the difference is substantial.
Therefore, here’s my advice which you have already figured out by now: When you solve a problem, ask yourself: why does this solution work? What is the underlying principle that will allow me not to face this problem again?
Have a great day!