Sadly, I must say goodbye to Leaf (my programming language)
Tags: programming, life, career, inspiration
Published: 2018-08-07 13:45:42

---
title: Sadly, I must say goodbye to Leaf (my programming language)
published: true
description: A necessary, but painful, transition in my career
tags: programming, life, career, inspiration
canonical_url: https://mortoray.com/2018/08/07/sadly-i-must-say-goodbye-to-leaf-my-programming-language/
cover_image: https://mortoray.files.wordpress.com/2018/08/people-2590731_1920.jpg
---

This is hard to write, or rather, it's a hard decision to make. After investing many years on Leaf -- a programming language, a major life project -- I need to take a break from it. It's no longer fulfilling my goals, and it's not as fun as it once was. It's interfering with my other career priorities. Leaf has become part of my identity, and this feels like ripping out one of my organs. But it's necessary. Let me explain why.

I've lost track of the specific event that led to the creation of Leaf, though I do know some of the key reasons. First and foremost, I wanted a technical challenge. Some people may find that odd because programming is a vibrant and diverse world. But I've done a lot of programming. I've tried many projects and continually looked for new ways to do things. I've worked in numerous startups and had many side ventures. Finding new challenges has become quite unlikely. This lack of novelty was dragging me down as a whole. 

Even though I'd done some toy languages before, they were nothing compared to an entirely modern language. I was hoping for new obstacles, and on that front Leaf delivered. It stopped being a hobby and became my motivation.

I solved exciting problems and learned a great deal. Building the type system got me deep into thinking about type theory. It exposed me to unknown corners in the structure of languages. It's the part I wish I could continue working on. Working through the complexities of memory management at the language level was invigorating. And of course error handling. Wow! That was quite the experience. Getting the block flow correct for LLVM is one of those critical compiler challenges.

It's those achievements that make my decision extremely hard. How can I take this wonderful thing I've built and just set it on the shelf? But I was already feeling that urge over a year ago. Something was missing. I needed to do more with it.

I drove Leaf in the direction to create real programs. Above all theoretical tasks, it should be useful. Earlier this year, I streamed the development of a snake-like game called "Wormies". It gave meaning to the language. It gave me a way to share the work with others.

Sharing is vitally important. I've written several technical articles, but the audience is very limited. Let's face it, nobody knows who creates the languages we use. Sure, a select few names pop up here and there, but for the most part, the language designers and coders are not known. It's also upsetting to see somebody like Guido step down from the Python project. The success of a language guarantees you lose control over it.

But I had more immediate problems, I hit a stumbling block in the game development. A missing feature, OOP interfaces, was preventing me from using the language the way I wanted. It jumped to the top of my todo list, but I've not been motivated to write it. There's nothing new for me there. There's nothing new in the realm of compilers here either. Sure, it isn't trivial, but it is a lot of straightforward coding with no intrinsic reward.

Even with that step done, there's an enormous amount of work on the libraries and environment. All required before anybody else could hope to use the language. Unfortunately, it's everyday work -- no challenge and no learning for me.

Maybe I should think about my career. Compiler and language developers are rare breeds, but so are the projects that need them. And would I want to work on yet another language, knowing I've already solved the interesting problems?

My personal goals lie more on the creative side. I want to do graphics, write music, make some games and record some videos. I had a plan where I'd create all this in Leaf. I'd build out the system enough to do these creative projects. But people that want to see the creative stuff don't care about the language. Limiting myself to Leaf holds back these other projects. Instead of gaining from my language, I'm actually losing out.

That's a grim conflict. I knew I could get it working, but in what timeframe? I could never afford to work full-time on it. If it were corporate driven, like if I had a salary, the situation would be different. I could still pursue my other projects on the side. But as it is, I have too many ideas competing for the little time I have.

It's damn hard to let go. I've invested a lot of time into Leaf, but I begrudgingly admit those are sunk costs. I must evaluate where Leaf stands now relative to my current goals. And, quite unfortunately, pursuing Leaf at this time is not in my best interest. 

Maybe I can pretend it's a hiatus to lessen the emotional blow.