Charles' Thoughts

Thinking about Leaf

When choosing a project to be worked on in my spare time, I like to give it a fun name. This helps motivate me; creating an ideal for the project before it even exists. I also like coming up with fun names!

So, Leaf.

These types of projects have to check some boxes.

First of all, the implementation has to be something that I can be proud of. Simple, understandable code. I like my free time to postulate at the existence of something better than our current notion of what software engineering is. I want to try to show people that a better way is possible. That is not to say I come anywhere close to succeeding, but this kind of ideal has proven to be a good motivator as well as an interesting thought exercise.

I also like to explore some new technology with these kinds of things. If I'm learning while I'm working, I tend to be much happier. Sure, I might not have made as much progress as I had thought I would but at least I came away from the experience a little wiser.

And lastly, a new constraint to me: I want this project to not be useful to other people, at least not directly. I have spent a lot of time in the past trying to think about how others can benefit from my coding but that is not a goal for Leaf. I already spend my work days trying to benefit people, albeit indirectly and inefficiently. So long as I am thus employed, it is not sustainable for me to try to do something similar with my free time. It has to be a creative pursuit, for myself.


A concept I have been exploring recently is "The Intentionally Limiting Abstraction". I have often found myself parallelized by how to do something. I can't write, I first have to get an extremely sharp metaphorical pencil. But if you spend all your time drawing blueprints to build a chair that will let you build a notebook-making machine to write about how you want to build the perfect pencil, well, you first have to find a pencil. So someone coming along and saying "Here, take this pencil." can be extremely valuable. It just takes an assertion of immutability and adequacy: "It's a perfectly good pencil, the only one for miles, and you cannot alter it." The production of an abstraction, a tool, with little or no customization is a blessing. This is how I am viewing bearblog: it's a perfectly good pencil. Is it flawless? Of course not, but it's good enough, it's here, and I am pretending there are no other pencils within reach. And look: Words!


I want Leaf to provide an abstraction to others, a way of communicating with computers that is intentionally limiting. It doesn't let you make customizations or add gifs, it is an API with a good-enough user interface.

What will it let you do? Construct data, call functions and RPCs with said data, and see the results. Importantly, there will only be one way to construct data. No matter who wrote the RPC, the data is the same, manipulatable in the same language. And for the RPC writer? No longer do they have to worry about providing a user-interface on top of their RPC. The type is the interface. The user will be able to read the type, construct the data, and call the RPC. An intentionally limiting, good-enough abstraction for general-purpose function calls.


This assertion of value might seem misaligned with my previous statement that I want Leaf to not help others. But importantly: I do not intend to make Leaf available to other people, at least not while it is functioning as a creative project. I will make Leaf to tickle my own creativity, without external requirements or support. A step beyond "it runs on my machine" is "it doesn't run on your machine", a concept I've neither considered nor embraced before. Let's see how it goes.

#leaf #project