Over the past fifteen years, I’ve coded websites to sell products both useful and useless. I’ve coded to matchmake lonely-hearted singles, educate university students, and deliver workplace training. I’ve coded spy games for children, sprawling e-learning systems, dinky little novelty sites, and (sorry) countless advertising emails.

These days, I’m more of what you might call a tinkerer (or what coders might call “an interfering pain in the ass”), but I still love to build out small projects and keep up-to-date with new tools and platforms.

Whenever I code, I’m reminded of just how wonderful it is to be immersed in the buzzing, humming universe of an evolving piece of software. Non-programmers rarely believe this, but, for all of its technical rules and structural discipline, programming is a richly creative activity.

Programming and creativity are often believed to be worlds apart. This assumption is grounded in a fundamental but incomplete truth: a computer program is an exacting set of instructions for a very dumb machine. There is no room for imprecision in software; no place for double meanings or subtext.

Software is poetry. It’s the expression of ideas in their most elegant form.

However, the paths coders follow to develop these precise systems are indirect. No two programmers will ever produce identical code, not even if their final software products appear, on the outside, to be the same. Give ten novelists a plot summary and they’ll each write you a different story. Give ten programmers a functional specification and each will produce something unique, an expression of their own voice as a programmer.

It helps if you forget about the purely functional definition of software as an end product. Instead, consider programming as a process. An architect may ultimately produce blueprints — but to arrive at them, she must consider space, harmony, light, materials, purpose, and environment. The blueprints, as unflinchingly technical and mathematically precise as they may be, are the result of a deeply creative process. In the same fashion, programming is not really the practice of writing lines of code. It is the art of taking big, intractable problems and breaking them down into ever-smaller ones which can be understood, explained, and then carefully assembled into a living, breathing work of art.

Software is poetry. It’s the expression of ideas in their most elegant form. Like a writer who chews the texture of words, rolls them against the tongue, seeks out the just-right way to tell each part of their tale, a programmer creatively employs structure and syntax of language to address problems, to arrange the sequence in which they are solved, to assemble them into a story.

The largest and smallest of scales collide and you are lost within it, completely absorbed by — and it’s electric.

When you’re programming, you’ll experience moments of sublime focus. At a practical level, you’re writing a list of instructions, stepping line-by-line through the solution for a single current task amongst the thousands that, collectively, make up a computer program. The syntax rattles off the keyboard as easily and automatically as your lips and tongue shape words in conversation. But while these mundane mechanics are in play, there is something magical, something wonderful, taking place deeper in your brain.

You can see the system you’re building. You can visualize the scope and scale of it. The relationship between each piece of data, the functions that process information, the flow of data as your code corrals it down this pathway here, assesses its value at that intersection over there, re-routes it for processing in a factory you’ve purpose-built. It’s not lines of code on a screen, it’s as real and physical as a sprawling city.

The thrill of this is hard to explain. It’s an act of creativity that ignites you. You’re simultaneously holding dozens of threads in your mind, like a writer simultaneously juggling the broad macroscopic concerns of plot lines, character arcs, and pace with the minutiae of sentence structure, the rhythm of three syllables versus two, weighing the beat of a comma against the finality of a full stop. The largest and smallest of scales collide and you are lost within it, completely absorbed by it—and it’s electric.

This is why I programmed for so long, why I still return to it now and then. To find each time those same fizzing sparks of magic that I get when I compose a photograph, write a satisfying sentence, disappear inside a book, or close my eyes and let a piece of music fold itself around me. It’s not because I’m a geek (although let’s be honest, I am). It’s because I find no greater joy in all the world than to create or lose myself in something beautiful.