The diminished art of coding

Programming is an art. It’s less like fine art or music and closer to architecture or carpentry – combining form and function – but it is an art.

If you don’t believe me, consider code reviews. I’ve definitely done code reviews where I admired the mastery on display, where the elegance of the solution shone out like a brilliant gem, where I felt like Salieri overcome by the symphony in his head as he reads Mozart. Conversely, I’ve mentored juniors where I read their code and immediately saw opportunities to help them mature – this bit is repetitive, this bit could be expressed more succinctly, this bit hits a performance de-optimization, etc.

When I do PR reviews of AI-authored code, I feel none of these things. I can sometimes tell whether it’s authored by Claude or Codex (Claude likes lots of Official-Sounding Comments, Codex is more to-the-point), but my mind tends to wander to the intent behind the PR, to the prompt or the plan. Nitpicking details of the code, like the type of for-loop or the names of functions, feels entirely superfluous. Sometimes the best advice is to just choose a new plan and re-prompt.

For most of my career, I’ve held two contradictory views of coding in my head simultaneously:

  • Coding is an art form, but you shouldn’t get too sentimental about your code – most code eventually becomes technical debt that should be expunged
  • Code can express the creativity of the author, but the best code is idiomatic, reducing the WTFs per minute
  • In short: code is art, but it’s also a means to an end

With the advent of LLM coding agents, I think this contradiction has been firmly resolved in favor of function over form. Or as Les Orchard might put it, the “make-it-go people” have triumphed over the “craft-lovers.”

The craft is still there, of course, but it’s different. When I code with agents, I’m thinking at a much higher level of abstraction: architecture, resilience, systems, monitoring, testing. I used to sweat the small details – Claude starts comments with a capital letter, I rarely do; Claude names variables one way, I prefer another – but I quickly learned to stop caring. It’s simply a waste of time to nitpick, especially since the agent will likely undo your nitpicks on the next refactor.

In some ways I feel like a carpenter whose job is now to write the blueprints for the IKEA factory. Of course there is still artistry in designing the blueprints, but you don’t care if the factory spits out one or two tables with splinters in the legs. The point is to produce enough furniture fast enough that the little imperfections don’t matter. Taste and judgment still count, but they’re at the level of the overseer on the assembly line, not the master carpenter working a chisel.

Finding art elsewhere

For me, coding always occupied an odd place on the artistic spectrum. Some code is firmly art – Jenn Schiffer, for example, has been an artist-in-residence and has had numerous projects devoted to the intersection of art and programming. Whereas other code is purely functional: I’m sure many programmers have spent their entire careers pumping out glue code for enterprise CRMs without ever wondering if what they were making was “art.”

One worry I have for my entire generation of programmers is that many of us have been getting our artistic “fix” from coding: taking craftsmanship seriously, reviewing others’ code with the eye of a literary critic, trying to elevate the profession. Now the profession has been turned into an assembly line, and many of us are eagerly jumping into our new jobs as blueprint-designers without questioning what this will do to our souls. I believe art is necessary for a rich and full human life, so this isn’t an idle concern.

My advice to other coders, or at least the advice I’m taking myself, is that if you’re looking for art in coding: stop looking. If you’ve never taken an interest in poetry, or painting, or dance, or whatever, now would be a good time. In an era where the internet is increasingly full of bots pumping their bland bot ideas into everybody’s brains, seeking out distinctly human forms of expression has become vital.

It might sound corny (or like I’m going through a mid-life crisis), but I’ve done the following lately:

  • started painting (Bob Ross is of course an easy stepping stone)
  • gone to several ballets / contemporary dance performances
  • started reading more fiction (The Sun Magazine is a longtime favorite of mine, but I’m even reading the poetry now)
  • picked up my guitar again

You might have also noticed that this blog has gotten a lot more sentimental and experimental lately. I’ve never used LLMs to help with my writing (not even to spellcheck!), but lately I’ve tried to fight my own tendencies to write bland, predictable prose. In a world of machines that “predict the next token,” what’s the best reaction? Be less predictable. At least that’s what I hope I’m doing.

I don’t think coding is dead as an art form, and I do think that the “new” craftsmanship will have its own masters, its own styles, its own expressiveness. Heck, maybe I’ll be surprised and there will be an artist-in-residence somewhere wielding agent orchestrators like a paintbrush! But I kind of doubt it. If you’re not knitting, then you’re making clothes on an assembly line, and if the clothes are disposable, then it’s just fast-fashion. There’s artistry there, perhaps, but the end product is much less interesting artistically because there’s less of the human touch to it.

In my view, we’re firmly in the fast-fashion era of coding: software is vibe-coded, used up, thrown away, vibe-coded again. This is not a fully bad thing, and I’m sure many non-coders especially are giddy at the superpowers they’ve acquired. But as coders, we shouldn’t lose sight of what we’ve lost, and we should seek to make up for it with new sources of artistic sustenance.

4 responses to this post.

  1. Sarah Gooding's avatar

    I love that you don’t write any of your posts with LLMs! These recent writings depress me AND inspire me to be more human at the same time. 😅

    “but I quickly learned to stop caring. It’s simply a waste of time to nitpick, especially since the agent will likely undo your nitpicks on the next refactor.”

    You’re one of the few communicators who can aptly characterize the vampiric nature of “generative” AI just by documenting these mundane frustrations. It’s super relatable and I hope you will continue on this series. :) Thanks for publishing your thoughts on the open web! 🙌

    Reply

    • Nolan Lawson's avatar

      Thanks Sarah, that’s really kind of you to say! I keep LLMs off my writing because I need some part of my brain that the agents don’t have access to. Plus I’m afraid if I asked them to “spruce up” a post, I’d think to myself, “Hey, these suggestions aren’t bad…” Then before I know it, I’d be doubting everything I write. I’m already getting that way with my code, which is bad enough. 😆

      Reply

  2. tranquilmiracleba536132b3's avatar

    Posted by tranquilmiracleba536132b3 on April 8, 2026 at 2:47 PM

    Another fantastic read, Nolan. I’ve been coming back for more and I know that these can be difficult to write so I appreciate you powering through what is definitely a loss – one that we may come to terms with in our own way – but a loss nonetheless regardless of how we see the future.

    I’ve also really enjoyed some of the articles you’ve linked that also cover this topic from varying perspectives. Kevin Lawver’s Nostalgia is an Anchor was a great read, perhaps one coming close to acceptance. I’ve commented on your previous posts (perhaps under different names, I sometimes forget to log in) but since then I think the mourning for coding itself is something that I think I’ve passed – especially at work. I still get some fun out of it personally, and that’s great – and I think it boils down to the point that you make here: coding is an art, but that means different things to different people and I guess it wasn’t as much of an art to me as perhaps a lot of people. It’s a profound step in moving forward.

    Les Orchard’s article I think hit home more, because I think that’s where I’m at right now. It’s not necessarily the loss of coding as it is the rapid paradigm shift. And I think Les is right in that learning the tools is a good way to go. Indeed, coding tools and agents are some of the easiest technologies I’ve used – ever. The amount of posturing I see online, especially on LinkedIn, about needing to know things like context management and how not to run out of tokens in a session translated to a day of work for me and I still think it’s easy and there’s a lot of pomp and circumstance surrounding the use of these tools. Score one as well for Dunning Kruger, it ain’t really hard!

    All this to say while the tool adaption part is easy, I still think that there’s a part of this paradigm shift that gets swept under the rug or gaslit away quite readily, and that is really how tech culture is turning into a bit of an inhumane place in corners as part of a perceived power shift from engineering up to leadership. I notice it in my own place of work: our VP of Product is far more condescending to engineers than they’ve been before, pushing “speed uber alles” a lot more. You see the likes of Marc Andreesen lackadaisically state that tech as a whole needs to shrink its headcount by “75%” while he continues to pile on money. I see considerably less pushback from this turn for the nasty. Anil Dash in the NYT touches upon this – for software engineering, LLMs did leave a lot of the delightful parts of the process while removing a lot of the drudgery (obviously not for everyone, but I think this may be broadly true). For other areas that LLMs and AI touch, this relationship is often reversed. So this means we have an entire industry in which the most affected people (the SWEs) are less likely to push back against a power grab than elsewhere. I hope it doesn’t stay that way, because for anyone who has used these tools well, resigning agency completely is a bad step and leads to slop eventually. You gotta be there with your taste, guiding things along, building “skills” and guardrails along the way. Having an entire class tell you you’re not moving fast enough all the time while threatening to make you obsolete is not only a farce, but really prevents engineers from truly taking ownership of these tools and driving the narrative!

    Reply

    • Nolan Lawson's avatar

      Thanks for your thoughts. I totally agree that things feel more cutthroat and inhumane since AI coding tools came along, although I suspect that’s more about the post-covid layoffs than anything else. Software engineers used to have cushy jobs with a lot of job security, and now our ranks are being thinned, and so a lot of us see our peers as competitors for a shrinking pie.

      Then again I think you’re right that AI is a big cause of this dehumanization. Some people see the output of GenAI as proof that the work of others (artists, writers, programmers, you name it) was not really that hard in the first place. I think that many people are positively giddy to unmask experts in other fields (not their own, of course) as frauds that were never deserving of praise in the first place. I find this boorishness to be utterly appalling, which is part of why it took me so long to even acknowledge that GenAI could do anything useful at all.

      Ultimately I think Ezra Klein put it best when he said that the “message” of GenAI, in the Marshall McLuhan sense, is “you are derivative.” A lot of people seem convinced now that their fellow humans are no better than next-token predictors, which can’t possibly end well.

      Reply

Leave a reply to Sarah Gooding Cancel reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.