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.
Top comments (18)
Thanks for sharing. It's sad, but I'm sure it was a great experience that you can revisit in the future.
If start another similar technical project in the future, feel free to lean on myself and the rest of the community for any help along the way.
Thank you for the support.
In the immediate future I think I'll focus on mentoring and teaching. Still a lot of bottled up knowledge that hopefully can help somebody new to programming.
yeah exactly, so even if you won't have the time, we can help.
This sounds really nice, and if @mortoray can get collaborators, I suspect he may be re-energized to work on this project. However, it may be worth mentioning that even to make a very modest contribution would require pretty solid c++ skills, and if your setup is not nearly identical to the author's environment, just getting everything to compile properly may be its own little adventure! :)
It's always bittersweet when a project hits the doldrums. I've enjoyed reading about your journey with Leaf over the past several months. If it helps, I learned some valuable things from it--mostly from looking up everything you mentioned on Wikipedia. And if you learned everything you were going to learn from the project, I'd say it's less of an organ removal and more of a graduation.
Happy graduation. Don't stop writing. I think we're all looking forward to seeing what you tackle next.
Yeah, it's tough to give up on a project. I get that.
But each of us only has so many lines of code in us and that number is pretty small in the scheme of things.
So, you might consider your realisation as a good thing. You're making room to do something else that you're passionate about, even if you're not sure exactly what that is yet.
You have done something that most people are too afraid to even try. I cannot tell you how much I respect you for creating your own programming language, and also open sourcing. It hurts now, but I hope you take pride in it in the long run.
Sorry to hear. On one hand, though, can't you in some sense view the journey as an end in itself? I am also developing a toy language, and I really don't want to expect right now that it will ever gain mainstream success. If it does, that's cool, though. I have found a lot of fulfillment in learning how a compiler works, and I have found that there are a lot of skills in compiler writing that commute to other areas of programming.
Who knows, perhaps you'll continue developing Leaf, even if it's just a much slower development lifecycle.
Yes, the journey has been enjoyable and I learned many things.
I'm glad to hear you're working on a language. They can have lots of fun things to implement and explore.
I had to let go my own OpenSource project (ophal.org) but it has never gone actually. There are still some websites running it that I have to maintain and I resist to migrate them...
BTW, picking the right tool for the right project is not that easy when your very own creation is involved! But you still have to, because solving customers needs effectively is the priority. Otherwise, you only serve yourself and that isn't very ethical.
Best wishes on your new ventures!
Some of us (me included) aren't good at wrapping up project to an end. I often tend to loose interest and motivation when a challenge become a task.
Maybe next time, try to surround yourself with contributors if you can find some.
In the end, Leaf will look nice on your shelf. ;)
Thanks for sharing. I know that's got to hurt.
Thanks for sharing this honest reflection. It can be hard to connect all the different projects at the moment, but looking back I usually find there are some really interesting threads tying everything together. I'm sure you'll see Leaf's influence in cool ways in the other projects you take on.
It's interesting to hear you were working towards doing more creative projects with Leaf. Making your own programming language is a creative project in and of itself, but I can definitely relate to getting side-tracked on the technical aspects of creative projects to the point of never fully getting to them at all. Tech culture definitely encourages us to value technical details over creativity, but the sharing of creativity and ideas is really what feeds our souls.
Looking forward to hearing about the projects coming up next!
So I'm pretty new to the development world. But ever since I started I've wanted to make a toy language of sort as a side project/learning experience. Do you have any advice on how to get started with that? I'm pretty limited on the computer science side of things. I'm an active web developer with experience of only high level languages (both interpreted and compiled). I plan on getting an Arduino simply to play with some Assembly code. I've read the book Code: the hidden language of computer hardware and software and more or less understood the information it presented. (Sometimes much closer to the less side of things...). I became a web developer via a boot camp. And while it was great and did give me the chance to acquire the skillset to jump directly into the workforce. There is SO MUCH MORE I WANT TO DO AND LEARN! The two primary things I want to accomplish in the near future are:
I'm not somebody who sits around with a bunch of pipe dreams. When I want to do something I go and I try to do it. So if anybody has some good starting point advice on making a toy language. It would be very, very appreciated.
I got into languages from many different approaches. Doing a full language stack is a lot of work, fortunately there are many things you can do before that.
That combination would let you have a minimal toy language working within a day. I've used that combination many times before on DSL's. One time I added an M4 macro layer on top to create a custom syntax.