$ ./talk --lightning
When code stops being written by humans,
does beauty still matter?
Alessandro RomanoLightning talk
Craft & Coding Agents
Where I come from
A blank screen
Nothing autocompleted the idea. You had to invent the mechanism before you could type it.
A wrong answer
The loop never terminated. Debugging was not a chore — it was the only way to read your own reasoning back.
The click
The moment the algorithm ran in your head before it ran on the machine. That was the reward.
We didn't learn to code. We learned to solve problems — and code was just the notation.
Exhibit A · C
void quicksort(int a[], int lo, int hi) { int i = lo, j = hi; int pivot = a[(lo + hi) / 2]; while (i <= j) { while (a[i] < pivot) i++; while (a[j] > pivot) j--; if (i <= j) { swap(&a[i], &a[j]); i++; j--; } } if (lo < j) quicksort(a, lo, j); if (i < hi) quicksort(a, i, hi);}
Exhibit A · watch it move
void quicksort(int a[], int lo, int hi) { int i = lo, j = hi; int pivot = a[(lo + hi) / 2]; while (i <= j) { while (a[i] < pivot) i++; while (a[j] > pivot) j--; if (i <= j) { swap(&a[i], &a[j]); i++; j--; } } if (lo < j) quicksort(a, lo, j); if (i < hi) quicksort(a, i, hi);}
The highlighted line is the one executing. State lives in four variables: i, j, pivot, and the array itself.
Exhibit B · Haskell
quicksort :: (Ord a) => [a] -> [a]
quicksort [] = []
quicksort (x:xs) = quicksort [a | a <- xs, a <= x]
++ [x] ++
quicksort [a | a <- xs, a > x]
Four lines. Slower and hungrier than the C version — and still the one I remember.
What we built on top of that feeling
The obsessions
Naming. Indentation. Recursion instead of a loop, because it read better. One line you'd show a colleague the way you'd share a chord progression.
The institution
Clean code, readability, maintainability, DRY, SOLID. Best practices were taste, written down and made teachable — an aesthetic with a business case.
The signature
You could tell who wrote a module. Open source was a museum of style. Code carried a voice, and reading it was how you learned.
“Programs must be written for people to read, and only incidentally for machines to execute.”
— Abelson & Sussman, SICP (1985)
Then coding agents arrived
In
“Add pagination to the users endpoint”
?
400 lines
you will skim once
Out
Tests pass. Endpoint paginates. Ship it.
Be honest about how far this goes: we're not even curious about what's inside anymore. We only check that the transformation happened.
A historical moment, not a complaint
Through every one of those steps, problem solving stayed on our side of the line. That's what makes this one different in kind, not just in degree.
The new argument
It agreed both times. Only one of us was making an argument about beauty.
The uncomfortable part
Winning the argument is now free. So my taste never gets tested — and I can no longer tell whether I was right or just insistent.
And when I hand it code that was written with intent, it usually gets the syntax right and the reasoning wrong.
The honest question
I don't have the answer. I notice that I keep asking for the elegant version anyway — and I can't fully justify it on business grounds.
What survives
Reading survives
Judging a diff, spotting the wrong abstraction, feeling when a solution is heavier than the problem — that's still ours, and it's the whole job now.
Writing is fading
Composing eleven lines that couldn't be shorter is a muscle. It was built by debugging, and debugging is the first thing we handed over.
Where beauty might move
Maybe elegance relocates: prompts as poetry, architecture as composition, agent flows as storytelling. A different craft — but nobody learns it by reading a beautiful function anymore.
It becomes a language you can still read, but no longer speak.
One last thing
Maybe beauty was never for the machine.
It was for us.
Chasing it taught us to care about structure, to respect logic, to find harmony between chaos and order. It didn't only make the software better — it made us better.
Based on my article The Lost Beauty of Code medium.com/design-bootcamp/the-lost-beauty-of-code-bb4a9b0855aa