If you have been following this blog or my social profiles for the last year, you are probably aware that I have been working on something called EndBASIC. You also probably know that this is a retro-looking BASIC interpreter written in Rust that happens to run on the web. And if you know those two things, you are probably wondering, like some of my friends do: why am I wasting time developing such a useless project? Because.
No, seriously, because. It is obvious that the EndBASIC language and environment will not gain massive traction, and I do not have any interest in inventing a perfect new language (because, let’s face it, we already have one and it’s called Rust 😉).
So, then, why do I spend any of my scarce free time on this project? If you must know:
It’s a fun thing to do. Just like some people enjoy watching TV shows, playing video games, or crafting wood, I enjoy programming. It feels like a game. And EndBASIC itself could be seen as a game at this point.
It’s a form of art. Developing a personal project is a different experience than developing a work project. I can spend all the time in the world polishing the same turd over and over again, playing with different ideas until things look best.
If you have ever considered that programming may be art, then this kind of side project is where you crank your craft up a notch. As just one example, working on EndBASIC’s tests made me come up with the idea of using the builder pattern for tests and it seemed to have been well-received.
It’s a learning experience. In writing EndBASIC, I’m playing with Rust. I strongly believe that Rust is one of the languages of the future and it’s the language that makes me say “aha, I agree” at every corner I turn. Yet, I haven’t mastered it. Working on Rust projects lets me learn a bunch of stuff about the language that will be helpful in future endeavors. And it’s not only about Rust per se: learning the idioms used in this language can help write better code in any other.
Another example is that I also got to learn about WASM, targeting the browser from a “native” app and making it work on various different devices. This led me down the path of async programming and how to interact with Javascript in that context—which was a painful but eventually-gratifying obstacle to overcome.
And yet another example is that I also got to set up continuous deployment, first via Travis CI and then via the new GitHub Actions coolness. This, in turn, gave me ammo to write up more interesting stuff in this blog.
Copying an “old technology” is irrelevant. Yes, BASIC is not the language of the future (although… VB.NET users may disagree with you because it supports, I don’t know, thousands of businesses?). But that doesn’t matter. Only 5,000 lines of the codebase (about 30% of the total) are devoted to parsing the language, and most of those lines are unit tests anyway. If I wanted to change the language per se to offer a more “modern” experience with things like first-order functions, objects, etc. it’d be trivial to do so.
To be clear, I have no interest in building my own language as mentioned in the opening, but having worked on the building blocks of a real language is enlightening, and having those building blocks around will surely come in handy in the future.
So what happened to the original goal of teaching programming to my kids via this project? Well… uhh… let’s say I’ve gotten distracted having fun by myself rather than actually getting them in front of this. I should get back to that goal after all the recent improvements to make the environment more usable and seeing if they care at all.
But yes. For the most part, EndBASIC is a crazy/useless language. Although… ~50 other people currently disagree with the thought of this being useless if GitHub stars mean anything at all 😉 If you are one of those ~50, thank you! And if you are not, join me in the craze?
Edit (Jan 24th): If you are here from the recent bump in Hacker News, hello! I have just published the 0.5.0 release which might answer some of the questions you have.