My relationship with software engineering began as a pursuit to solve my own problems. I needed to manipulate shell command outputs easily, well I built Awkward. I got stuck with debugging something and wanted to track changes done to an object, I built tracr. I wanted a better way to express complex architecture, I built metz.
There are more such tools that I have built, but even bigger is the graveyard of things that didn't survive. Now, this isn't a "me problem", it's a pretty common one. But lately the cost of living near that graveyard has been gnawing on me.
And the only reason I can think of is, I didn't start those projects with the same passion as I did for others. Don't get me wrong, I don't think it's the sole reason that I have a long list of pending/dead projects. But, it does seem to be the leading factor.
Somewhere along the line, I started using projects to learn new things than to actually solve a problem. When you do that, well, you have to cook up a problem. Else what's the project going to be about?
So if I need to go through Rust Atomic and Locks, well gotta come up with something that needs it. Or if I want to follow someone's idea of creating cache-friendly database, need to figure out where I will put it to work. And on and on it goes. To a point where there are so many "projects" being "worked" on that the brain just gives up. There's no fooling the heart, it knows I am being insincere towards what it means to build something.
The thing is, you can't substitute a problem, it's either there or it isn't. Coupling learning and building as the only way of learning has been a terrible, god-awful way of achieving neither.
And it's not even a good fit if you are not careful. Learning requires you to be curious, unburdened and free to explore. Whereas to build, you need to focus and be constantly gauging if you haven't strayed from the problem. If done carefully, you can have synergy where you don't fall into a "follow every link" spiral while also creating a useful thing out of mere exploration.
But I have come to realize, that synergy isn't worth it, to me at least.
It's time to unlearn this way of learning. It has served me well for years, but I think it needs an update. I now look to solve bigger, challenging problems, which naturally will require me to learn things. I went about it, sort of inversely. Where I calculated what is needed and learn those things and then come back to solve. Which in hindsight, sounds so bizarre. Nevertheless, here's the mantra I live by now.
Solve, only if there's a problem, Learn, only if you are truly curious. There's no fooling the heart.