Reflecting on committing to actually finishing something.
TL;DR: I wrote a binary heap priority queue for Janet language. It is available with some examples here.
I tend to get distracted easily. While doing some Advent of Code problems I like to play with programming languages I don’t get to use regularly at my job. First, I wrote a solution in common lisp. Then I forgot about AoC and focused on profiling and improving performance of the solution instead. One of the optimisation steps was to replace heap allocated lists with arrays. That reminded me of Janet, a lisp-like language which used arrays instead of lists as its base data structure. So I left my common lisp solution and reimplemented it in Janet. But then I found that Janet, being young and niche language, lacked some of the libraries I could count on in more established languages. So I wrote a binary heap for Janet, so I could implement Dijkstra’s algorithm for my graph path finding problem.
Then it struck me that while I had fun on my journey and the experience was valuable, it was all volatile and nothing permanent would come out of it. So I decided to actually publish the binary heap library. Normally I wouldn’t bother. The interesting part was getting solution right. Releasing the library requires much less interesting work: documentation, tests, examples, polishing the code. I am happy I did though. It’s a different kind of satisfaction. It’s also something I can come back to instead of sifting through some old half-baked implementations I sure had somewhere. It’s done, checkbox crossed, don’t need to think about it anymore.
Then it struck me again. Why not apply the same “release it” treatment to the whole process that led me here? That’s how this blog is born. Except the polishing part. Waiting to have it polished is a good excuse to never finish it. Does not have to be perfect to be finished.