Skip to content

HTML is actually a programming language. Fight me

    If you want to learn a programming language, you need to learn how to debug it. But a malformed command in Python usually returns an error that prevents the code from executing, rather than something that fails brilliantly yet monstrously and exceeds its creators' intentions. With HTML we are all Doctor Frankenstein.

    One of my all-time favorite websites is the Embroidery Troubleshooting Guide. These days it's only available through the Internet Archive, unless (like me) you have a local copy. At the top, it looks like a typical, if somewhat outdated, small business website. But when you look down, you immediately notice something strange about it. The text, all center-aligned in alternating red and blue Arial, gradually grows larger and larger, forcing sentences to wrap around lines or reach the edge in the middle of the word, filling the screen as Alice tries to move through smaller and smaller to penetrate doors in Wonderland.

    If you look at the source code (have other programs made it so easy to view the source code, such as a website?), you will quickly discover what went wrong. Each line of centered text begins with

    or

    header tags that never close. Each header tag—which establishes only a relative size, not an absolute one, part of the semantic richness of the Web's flexible grammar—builds on the previous one, creating ever-larger nesting dolls. The tag designed to define the text hierarchy runs amok and creates chaos. The fact that the words themselves are about how and why wires can break makes it poetry.

    On its own, the Embroidery Problem Solving Guide would be a clever piece of found conceptual art. But by viewing the source, downloading the file, and replacing the instructions for solving common sewing problems with any text you like, you can make that work of art your own. I love putting my favorite poetry in there, decontextualizing it and forcing myself to read it with new eyes.

    “Broken” sites like these turn the great performance of semantic HTML on its head. As it evolved, semantic HTML increasingly separated the structure from the presentation: instead of We use tags, which strictly specify that a text should be displayed in italics tags to identify emphasis (or tags for book or movie titles, etc.). These elements can then be displayed in italics on a computer screen, but read with a different intonation by a screen reader. The Embroidery Troubleshooting Guide hijacks a semantic tag and makes it present something unexpected. The same building blocks that allow a single website to display responsively on a small phone or a huge television screen can make a website fundamentally undisplayable. This is delicious.

    I appreciate the usefulness of content management systems and complex sites that dynamically generate HTML, but it's a pleasure to build sites from simple HTML files that you can edit by hand. I still edit my own website this way and clean it up so I can see every tag, section and paragraph break. I even like to edit my own ebooks and convert PDFs into nicely formatted HTML-based EPUB files that are never published to anyone: my own private library of standalone websites. During the height of the pandemic, manually editing these files and their stylesheets was a balm.

    Ultimately, even as HTML has become the province of professionals, it cannot be policed. This is what makes so many programmers so concerned about the Web, and sometimes pathetically desperate to maintain the all-too-real walls they've erected between software engineers and Web developers. But people who write HTML know that hierarchies are designed to be bloated. All it takes is a tag that doesn't close where you'd expect it to.

    What other programmers might say dismissively is something that HTML enthusiasts embrace: Everyone can do it. Whether we use complex frameworks or very simple tools, the promise of HTML is that we can build, create, code, and Doing everything we want.