Language and Expression
I used to have a favorite question I would ask fellow software developers to pick their brains: "What would your ideal programming language look like?" At one point, a software architect I admired and respected gave an answer that changed how I thought about the question: he said, "I think it depends on what I'm doing." So now, as I'm looking at building these bespoke apps for my personal use, I'm thinking about what the ideal language would look like for me, for that specific use case.
There are several languages that have inspired me in this project. I think first and foremost I have to call out Perl as inspiration -- before you light your torches and gather your pitchforks, hear me out.
Perl was the first language I used where I was actually able to do stuff. Practical stuff! I could make OS calls, I could send emails, I could process text...all kinds of nifty things, that in a language like C or C++ would've taken ages (those were the first languages I was exposed to as a young dev, and C++ in particular scarred my young mind for life). Perl showed me what was possible in programming. It showed me that coding could be fun, even! And it put a heavy emphasis on expressivity.
What makes a language "expressive"? I think part of the answer lies in one of Perl's mantras, that it should "make easy things easy and hard things possible". An expressive language is concise yet powerful. "Expressive", to me, means I can write code that does what I mean, that does what it says on the tin, with little to no unexpected surprises lurking in the corners.
Unfortunately, Perl ain't all that it was cracked up to be in the beginning. It's famously known as a "write-only language", meaning it can be difficult to nigh-impossible to read what you wrote even a month or two prior. Its usage has slowed considerably, to say the least, since arguably better languages have come along. Speaking of which:
Another major source of inspiration for me is Python. As a more modern, robust, readable take on many of the same use cases as Perl, Python naturally caught my eye. In fact, I've used Python to write a few prototypes of these bespoke apps already -- with its "batteries-included" philosophy, its robust and practical standard library (including GUI tools with Tcl/Tk!) it seemed like the perfect candidate for these types of apps.
I've been struggling, however, with using Python for certain aspects of these bespoke apps, especially encryption of data. I had a really hard time getting any sort of GnuPG or GPGME ("GPG Made Easy") integration to work smoothly (or at all), especially since the Python bindings for GPGME have been removed in the latest version. I was initially using sqlite3 as my database as well, which has some support for encryption but not really. One option requires use of a fork, which left me wary about maintenance and security. The other option costs $2,000 for a license, which I don't think is reasonable especially for such an experimental project.
Mind you, this Python usage was more relevant when I was writing desktop apps, thinking of these bespoke apps as a desktop-only experience. If I want to make these apps for the web and mobile, limiting access to family and friends, I'll need to rethink the architecture here.
What I'd actually like to see is a language and platform that is made for creating bespoke apps. Something like what Kartik Agaram is doing with LOVE2D, but taken a step further. Or like what 100 Rabbits is doing with uxn/Varvara, but not quite so low-level. I don't necessarily need to write something that will stand up to a nuclear apocalypse, or platform degradation, or other forms of bit rot.
What I need is a platform that provides the APIs I need to make apps that can share access to encrypted data with people I trust. These apps will be largely useful only to me and the people around me -- I'm not building these apps to scale to millions (or even hundreds) of users.
If anything, I'd like to see folks making their own bespoke software on this platform! I'd love to enable others to build the software they need in their daily lives: note-taking software, personal data tracking, collaborative software, calendars, food trackers...any number of things that someone might need to automate in their day to day life.
More generally, I'd like to make the process of writing software easier. Whether you're writing desktop, mobile, or web software, the process is incredibly convoluted these days. The toolchains are becoming more complex by the day. Even where frameworks do exist to ostensibly make our jobs easier as devs, more often than not they end up complicating the process.
What I'd like to see is a platform like the old-school personal computers of the 1980s, like the Commodore 64 or Apple II. These systems were made to be hacked on! They encouraged beginners to dive in with the Basic programming language, and you could graduate to Assembly language from there. They were made for playing and making games, especially. They had APIs that had simple rules to start and a complex depth when you dug beneath the surface. What I'd really love to see is a modern platform that embraces these ideals.
I'm still not sure what all this will amount to by the time I'm done, but it sure is interesting to think about. In the meantime, stay tuned for more! I'll be writing other types of posts as well here soon.
- ← Previous
Bespoke Software - Next →
Crafting Interpreters: The Journey So Far