How Perfectionism Got Me to Stop Updating My Website
2013-01-05
I have a website. I have had a website since sometime in the 1990s. I started out with a simple static page at GeoCities. In 2002, I created a more elaborate website using PHP and moved it to its own domain, inglorion.net. It steadily grew, went to a couple of redesigns, and gained the ability for visitors to leave comments.
Maintaining web servers for hosting companies, I grew convinced that Apache was costing me more time in maintenance than it was worth. It would occasionally stop working, and sometimes it would take me hours to get back up, because of some error in one of its many configuration directives. Figuring that the functionality I needed wasn't actually that complicated, I set out to write my own web server software. Thus, muhttpd was born. Armed with experience gained while developing the earlier mhttpd (which pioneered a better security model for shared hosting), muhttpd got to a working state fairly quickly, and I started using it as my primary HTTP server on my personal computer.
Meanwhile, I gained new insights about web development and software development in general. My website started to reach the limits of what its design could comfortably accommodate, becoming more and more difficult to navigate. I planned to fix this, but figured that while I was at it, I might as well clean up the code. Especially the code that ran the forum, which was buggy and lacked features such as the ability to insert bulleted lists and decently formatted source code snippets.
I also grew increasingly disenchanted with PHP. When I discovered it, it was an amazing step up from other languages I knew. I certainly wasn't going to develop my website in BASIC, x86 assembly, C, or Java. But as my knowledge of both PHP and other programming languages expanded, I came to see PHP as a language full of design flaws. Not only that, but the community around it seemed to not have the right set of values to ever make PHP into a decent language. So I resolved that, while doing the redesign of my website, I would write it in a different language.
I never could really find a language to settle on. They all have drawbacks. Some languages are pretty well designed, but their implementations impractical for creating websites. The requirements aren't even that onerous: I would need it to be able to output text, read environment variables, interact with a database, and be generally well-designed. Oh, and to make this run inside muhttpd, programs written in it must start up quickly, so that they can be used as CGI scripts. Programming languages and implementations with each of these individual features are a dime a dozen, but the combination turns out to be surprisingly hard to find.
Not really satisfied with any of the programming languages out there, I decided to create my own. I had been thinking about programming languages pretty much from the time I started programming, and I figured that, with the great number of programming languages I had experience with, I was pretty qualified to design one that did better than most. It started out with a simple idea: creating a language that was suitable both for interactive use and for developing large software systems. Then I decided that I would take the opportunity to also eliminate common classes of software bugs. And I came up with numerous other ideas - at a pace much faster than I could implement them. The language I have been working on is called Mana, and I have forgotten how many years I have been working on it, but there is still no implementation in sight. I so badly want this language to be better than the status quo that it took me 5 years just to define the syntax.
Meanwhile, all my other projects have stalled. Every time I start working on something,
I think This would be so much better if I had programming language feature X. I know,
I'll just go implement a very simple language that allows me to do that, and I can
grow it towards the great idea of Mana after I'm done with this project.
And then I
work on a programming language implementation for a bit, and the project I had originally
set out to work on gathers a little more dust.
The project where this is the most visible is my website. The big redesign to make it more navigable has not yet happened. The horrible PHP code is still there, only having received a few quick fixes to work around incompatible language the PHP implementors have made. The forum part of the website only barely still works; I can post things to the front page, but comments haven't been working for I don't even know how long.
Meanwhile, I have decided that I've done enough design work on Mana, and it's time to actually implement something. So I started looking for tools I could leverage to create the first, simple implementation. I looked at compiling to C. I looked at LibJIT. I looked at C--. I looked at LLVM. And many others. And I wasn't satisfied with any of them. So I created Voodoo. Now there are N + 1 software packages that can be used as compiler backends. And none of them are perfect. And Mana isn't any closer. And my website still hasn't been updated.
This is why worse is better.