📝 Syntax, Semantics, and Self-Expression
← Back to Blog

Syntax, Semantics, and Self-Expression

The relationship between human expression and machine instruction.

For much of my early twenties, the child who once devoured books and played with words felt increasingly distant. University, work, and the endless scroll of the internet slowly replaced the books I once reached for. Reading was no longer the consuming passion it once was, and naturally, the urge to write seemed to fade alongside it.

This was a far cry from my Year Six self, who was “voted”—as in, Miss Keys had hastily conjured up and scribbled down—‘Most Likely to Become a Pulitzer Prize-Winning Journalist’, with evidence of this achievement immortalised in the yearbook. I was, after all, an editor of our school newspaper, responsible for such “Pulitzer Prize-winning” entries as ‘Year Ones Re-enact the Royal Wedding of Prince Harry and Kate Middleton’. Despite this apparent journalistic trajectory, my written language-based medium of choice was not accurate re-tellings of events, nor winding and dramatic narratives. It was poetry.

Poetry played by different rules—rules that gave me room to sidestep my perfectionist tendencies. Poetry was a way to abstract my inner thoughts enough for it to be out there in the world. I could be cheeky, or I could be melancholy. I could play with form and metre, and occasionally rhyme. So why did I lose all of that fervour in time?


“Natural language - language that has developed in the usual way as a method of communicating between people, rather than language that has been created, for example, for computers.”

— Cambridge Dictionary


At the age of 15, I stumbled into Computer Science. This was less the result of a carefully considered career path and more because GCSE History wasn’t working out (I was convinced my teacher was playing favourites). Computer code was less forgiving than poetry: depending on the language, a missing semicolon could summon a wall of ANGRY RED TEXT. Yet the possibilities of what you could create with it felt limitless. Programming quickly became another medium to unleash my creativity whilst simultaneously scratching the mathematical and logical problem-solving itch I had inside my brain. Outside of class time, I could wrangle bits and bytes into “art”: programs that used parametric equations to draw patterns, interactive fiction, portfolio websites, and very incomplete physics engines.

I felt incredibly lucky that, at such a young age, I had found a creative outlet that could also become my livelihood. I did not yet realise that turning a passion into a profession would change my relationship with it.

—

It should come as no surprise that today I am a software engineer. I have spent thousands of hours writing code in service of solving problems, meeting requirements, and shipping features. Although my job continues to satisfy and stimulate me, the time and energy I once had to create purely for myself became harder to find. Without the space to create purely for enjoyment, I gradually lost the motivation to make things outside of work. I read less. I wrote less. Whether it was a consequence of my declining mental health, my endless consumption of brainrot, or simply the gradual loss of those habits, I began to feel less fluent in natural language—both written and spoken.

Every weekday, I spend half of my day in another language—not with humans, but with machines. Programming languages are, by design, narrower than natural language. They have defined vocabularies, strict rules, and explicit meanings; if you write something syntactically valid, the machine can process it. There is no hidden meaning to infer, no tone to misread, and no social context to navigate. In a programming language, you cannot commit a faux pas; you can only write something that is understood or something that is not. Perhaps that was part of what made programming languages so comforting to me.


“The Analytical Engine has no pretensions whatever to originate anything. It can do whatever we know how to order it to perform.”

— Ada Lovelace, 1843


A programming language may be designed to communicate instructions to machines, but it must also communicate ideas between humans. To make this possible, programming languages borrow from natural language, using familiar words such as function, break, and execute. Beyond their mechanical purpose, the words and structures chosen by a programmer can carry meaning for the humans who read them. In this way, source code itself—not just the compiled result—can be semantically rich.

Maybe that was why I found myself returning to code when I thought I had lost my relationship with language. During a particularly chaotic post-breakup Hot Girl Summerℱ—overwhelmed by the numerous messy situations I had created by cramming Tinder dates between the monotony of a 9–5—I found myself craving an outlet for all the thoughts I had accumulated.

I realised that I had not lost the craft of language entirely. I had simply become fluent in another one. Although my dwindling exposure to creative writing had left me feeling like I could no longer write prose or poetry in plain English, programming languages had given me another way to experiment with words, structure, and meaning. It was the same reason I had loved poetry as a child: poetry was never just about arranging words according to rules; it was about finding unexpected meaning within those constraints. Perhaps code was not so different.

It turns out this idea already had a name: code poetry.


return last victim; package body;
   exit crypt (time, times & "half a time") & close it,
   select (quickly) & warn your next victim;
AFTERWORDS: tell nobody.
   wait, wait until time;
   wait until next year, next decade;
       sleep, sleep, die yourself,
       die at last

— Excerpt from Black Perl by anonymous, 1990


Code poetry describes work that exists somewhere between traditional poetry and source code—writing that can be read by both humans and machines. I hadn’t set out to find a literary movement; I had simply noticed a familiar feeling while programming. Learning that others had noticed it too gave me the confidence to treat the idea seriously. I began experimenting with the form myself, writing a TypeScript code poem: undefined.ts.

And just like that, I felt like I had my voice returned to me.

—

Like natural language, code has power. The same ability to encode human intent into instructions can be used to build tools that connect people, or tools that cause harm. Behind every program is a person making choices about what to express, what to prioritise, and what kind of world to build.

Code is both powerful and poetic.

Published: Monday, July 27, 2026

Tags: programming , code poetry , identity

Menu
Spirograph
Spirograph Spirograph visualiser
đŸŽ·
B2 IDE Bebop is Brainfuck IDE
đŸ’» GitHub View my repositories 🏠 Home 📝 Blog Thoughts, experiments, ramblings 📖 Poems Context-free verse đŸŒ± Site Graph Map of the digital garden
Powered by Astro · XP.css · MathJax · Netlify
12:00 PM