---
title: "Hackers and Painters, reread with AI agents"
description: "I reread Paul Graham's Hackers and Painters as a painter who codes with AI agents. The sketching idea held up. Beautiful code nobody reads is what I miss."
url: https://www.joekarlsson.com/blog/hackers-and-painters-ai-agents/
---

![An X-ray of Vermeer's A Maid Asleep, showing the sleeping maid, a jug on the table, and the shapes Vermeer painted over in the doorway behind her](https://www.joekarlsson.com/images/blog/hackers-and-painters-ai-agents/thumb-17c4f83f.still.webp)

# Rereading Hackers and Painters as a painter who codes with AI agents

Nov 10, 2026 · 9 min read · [AI](https://www.joekarlsson.com/blog/category/ai/) · [Career](https://www.joekarlsson.com/blog/category/career/)

**TL;DR** In Hackers and Painters (2003), Paul Graham argued that programming is sketching: you figure a program out while you write it, so a language should be "a pencil, not a pen." I paint and I write code, and since AI coding agents came along, programming feels more like painting to me, not less. I can explore ideas faster and more iteratively. What I miss is beauty in code nobody reads, though I don't think AI will kill it any more than photography killed painting.

On this page

1.  [Programming is sketching](https://www.joekarlsson.com/blog/hackers-and-painters-ai-agents/#programming-is-sketching)
2.  [Starting over: Bechdel.io](https://www.joekarlsson.com/blog/hackers-and-painters-ai-agents/#starting-over-bechdelio)
3.  [Ceglowski’s objection](https://www.joekarlsson.com/blog/hackers-and-painters-ai-agents/#ceglowskis-objection)
4.  [Static types came back](https://www.joekarlsson.com/blog/hackers-and-painters-ai-agents/#static-types-came-back)
5.  [Beautiful code nobody reads](https://www.joekarlsson.com/blog/hackers-and-painters-ai-agents/#beautiful-code-nobody-reads)
6.  [How beginners get good](https://www.joekarlsson.com/blog/hackers-and-painters-ai-agents/#how-beginners-get-good)
7.  [Photography and painting](https://www.joekarlsson.com/blog/hackers-and-painters-ai-agents/#photography-and-painting)

In 2003 Paul Graham turned a Harvard guest lecture into an essay called [Hackers and Painters](https://www.paulgraham.com/hp.html). He’d finished grad school in computer science and then gone to art school to study painting, and people kept acting surprised that one person would want both. His answer was that hackers and painters are both makers: “what hackers and painters are trying to do is make good things.”

I paint and I write code too. I do digital art, oil pastel, watercolor and large color field pieces, some of it subconscious, abstract expressionist work, and I wrote about why I care about both on [my Works page](https://www.joekarlsson.com/work/#statement) and talked about it in my TEDx talk, [The Art of Computer Science](https://www.joekarlsson.com/talks/the-art-of-computer-science/). Since AI coding agents came along, programming has started to feel more like painting to me, not less. It’s easier to explore ideas quickly and iteratively, and it has creatively unlocked something big for me.

![Two photos from above. Left: Joe gluing a collage of a jack-o'-lantern, a black cat and a wheat field onto red paper, surrounded by markers and glue jars. Right: Joe sketching in pink watercolor at a marble cafe table next to a paint palette and a plate of oysters.](https://www.joekarlsson.com/images/newsletter/taste-matters-more-with-ai/art.webp)

_A collage and a watercolor sketch, from [my newsletter about taste](https://www.joekarlsson.com/newsletter/taste-matters-more-with-ai/)._

That might be a hot take, because most of what I read this year went the other way. Nolan Lawson wrote [We mourn our craft](https://nolanlawson.com/2026/02/07/we-mourn-our-craft/), and six weeks later, in [The diminished art of coding](https://nolanlawson.com/2026/03/22/the-diminished-art-of-coding/), he gave this advice: “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.” Glyph’s [Programming Isn’t Special](https://blog.glyph.im/2026/10/programming-isnt-special.html) carries the subtitle “Artists understand that AI is bad for art. Why don’t programmers understand that we are artists?”

Lawson even guessed at what I’m describing, and doubted it: “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.”

So I reread Hackers and Painters against the way I work now.

The essay is from 2003, and Graham mentions AI only once, about the symbolic kind: “if you assume that knowledge can be represented as a list of predicate logic expressions whose arguments represent abstract concepts, you’ll have a lot of papers to write about how to make this work.”

## Programming is sketching

Graham was taught in college to work a program out completely on paper before going near a computer. He didn’t work that way. He’d “spew out code that was hopelessly broken, and gradually beat it into shape,” and he felt bad about it for years, until he noticed that painters and architects had a name for what he was doing: sketching.

_Diagram: A pencil draws a circle, rubs it out until only a faint ghost is left, draws a star over the ghost, rubs that out too, and draws a house over both ghosts. Then the page clears and it starts again._

That’s where his most-quoted line comes from. “A programming language is for thinking of programs, not for expressing programs you’ve already thought of. It should be a pencil, not a pen.” He also said hacking at its best is creating the spec, “though it turns out the best way to do that is to implement it.”

Countless paintings, he wrote, when you look at them in x-rays, “turn out to have limbs that have been moved or facial features that have been readjusted.” The painter changed their mind on the canvas, and the earlier version is still under there.

My git logs look like that now. On November 5, 2026 I built [Nothing But Corners](https://www.joekarlsson.com/work/nothing-but-corners/), a DVD screensaver where the logo hits a corner every single time. Here are 8 of that day’s 15 commits, in order:

```text
feat: DVD logo that only hits corners
feat: Rename to Nothing But Corners, add click-to-spawn, bigger corner hits and real cheers
feat: Brake late into corners and ricochet out with squash and stretch
feat: Overload at 50 logos with an anime-style implosion
feat: Replace the implosion with a ki blast that fires a giant logo into a corner
feat: Giant logo hits two corners, with a bigger dome explosion and a shatter explosion
feat: Giant logo tours all four corners, stops in the middle, then crawls into a fifth
feat: After the tour, the giant swells into a leviathan that drifts into two corners at a slow, steady pace
```

Working like this, I can get into an artistic flow. It’s about what’s being represented and what the impact is, as opposed to the process. It’s the same thing I wrote about in [The Cognitive Case for Play](https://www.joekarlsson.com/blog/cognitive-case-for-play-in-technical-work/): the best work happens where mistakes are cheap, and agents make a bad sketch cheap.

[linger](https://www.joekarlsson.com/work/linger/) is a sketch where the code was only there for the poems. It’s seven poems that only finish if you scroll slowly. Each line starts as a few words floating in white space, and the rest fills in while you hold still. It’s plain HTML, CSS and about a hundred lines of JavaScript.

## Starting over: Bechdel.io

Graham noticed that painters leave a trail of work behind them, and each painting builds on the ones before it. “Maybe it would be good for hackers to act more like painters, and regularly start over from scratch, instead of continuing to work for years on one project, and trying to incorporate all their later ideas as revisions.”

In 2015 my sister and I built [Bechdel.io](https://www.joekarlsson.com/work/bechdel-io/), which [reads a movie’s screenplay](https://www.joekarlsson.com/blog/bechdel-test-script-parser-works/) and checks it against the Bechdel Test. My commit messages from that December include “editted procfile3”, “editted procfile4” and “editted procfile5”, which tells you how deploying to Heroku was going. Eventually it died there, like a lot of my old apps (RIP).

This year I started it over. In one day it became a static site, and I deleted the server, MongoDB, the old React app and Docker. One script, `npm run analyze`, turns screenplays into the site’s film data, and that’s the whole backend now.

Restructuring it and doing data analysis on it felt like painting, like seeing the project in a new light. Getting new data to play with was easier than ever, too, after the small set of films the original covered.

## Ceglowski’s objection

Not everyone bought Graham’s analogy. In 2005 Maciej Ceglowski, who had painted oils full time and also wrote code, answered him with [Dabblers and Blowhards](https://idlewords.com/2005/04/dabblers_and_blowhards.htm): “So let me say it simply - hackers are nothing like painters.” He went after the sketching story too. Fifteenth-century painting, he wrote, had “a superprecise underdrawing and underpainting that were covered with thin glazes of color.” That’s not spewing broken code and beating it into shape.

Ceglowski is describing how fifteenth-century painters worked. That isn’t how I paint. As I wrote in [my newsletter](https://www.joekarlsson.com/newsletter/taste-matters-more-with-ai/), I paint mostly by feel, going by what feels right and looks right, and a lot of the time I keep going until I overwork a piece, just to find out where the limit is.

Some painting is process art, where how it was made is the artistic expression. I don’t know if code can be that in the AI era, unless the point you’re making is about AI itself.

_Diagram: A scaffold of poles and planks appears in two quick beats. Then a pencil draws one window in a single bay, crooked, rubs it out, draws it crooked again, rubs it out, and finally draws it square with a cross in the middle. Then everything clears and it starts again._

I do plan when I start a new project, but usually at a high level. The devil’s in the details, and that was true of infrastructure and code before agents and it’s true today. Scaffolding is easy. The details are the tricky part, and that’s where I think agents struggle, especially with anything visual.

## Static types came back

Graham’s sketching argument came with a jab at static typing. He wanted “a language that lets us scribble and smudge and smear, not a language where you have to sit with a teacup of types balanced on your knee and make polite conversation with a strict old aunt of a compiler.”

In August 2025 TypeScript became the most-used language on GitHub by monthly contributors, and [GitHub’s Octoverse report](https://github.blog/news-insights/octoverse/octoverse-a-new-developer-joins-github-every-second-as-ai-leads-typescript-to-1/) tied that to agents: developers are “shifting toward typed languages that make agent-assisted coding more reliable in production.” In the [2026 Python typing survey](https://engineering.fb.com/2026/10/27/developer-tools/python-typing-survey-2026-ai-tools-checker-landscape/), the share of respondents who said type hints make AI-generated code more accurate or reliable went from 18.5% to 38.4% in a year.

I’m using TypeScript more than I used to. It used to be kind of a pain in the ass, even after it got popular, but now it’s an easy way to enforce a higher standard.

## Beautiful code nobody reads

Graham’s argument for beautiful code starts with a bush. When Leonardo painted the portrait of [Ginevra de’ Benci](https://en.wikipedia.org/wiki/Ginevra_de%27_Benci), he put a juniper behind her head and painted every leaf, even though “No one will look that closely at it.” Graham’s point was that great software works the same way: “If you look inside good software, you find that parts no one is ever supposed to see are beautiful too.”

That’s the part I miss. With agents, code has become more of a black box to engineers, and having beautiful code is less important than it was, which is a bit of a loss.

I try to read as much of it as I can, but reading every line isn’t feasible anymore, especially when you’re working on a team or collaborating on code. I read for the big things, I rely on my agents to spot problems too, and I keep backups. What I want is to understand the flow: where things are, and how to solve a problem if something goes wrong.

Clean code still pays off in a practical way. It isn’t always shorter, but my coding style has changed to favor token efficiency, which usually means splitting things up, cutting duplication as much as possible and consolidating abstractions. Fewer tokens means a smaller bill, and price was the main reason I [switched my default coding agent](https://www.joekarlsson.com/blog/breaking-up-with-claude-code/).

## How beginners get good

Graham’s line on learning is “hackers start original, and get good, and scientists start good, and get original.” You learn to hack the way you learn to paint, by doing it. Most hackers, he wrote, “learn to hack by writing programs of their own at age thirteen.”

I think people vibe coding without understanding programming are going to have a hard time. I feel lucky that I understand what’s going on, so I can use agents with confidence and securely, without being oblivious to what’s happening.

I don’t know how to get good besides going in deep on how things actually work, and I don’t think that’s changed. It’s the argument I made in [Ship the Ugly Pot](https://www.joekarlsson.com/blog/ship-the-ugly-pot/): the way to good work runs through a pile of bad work. But I also don’t know if I would be able to resist having an instant cheat button always available to me.

## Photography and painting

Graham ended on a pattern he saw in painting, theater, engraving and the novel: a new medium appears, and people explore most of what it can do in the first couple of generations. He thought hacking was in that phase in 2003. His last line: “How cool hacking turns out to be will depend on what we can do with this new medium.”

Graham also has a footnote about photography: “The greatest damage that photography has done to painting may be the fact that it killed the best day job.” Most of the great painters in history paid their bills with portraits. Photography didn’t kill painting, though. I have painter friends, and it’s still a viable career, or at least a hobby. I don’t think AI is going to kill programming, or the art of making beautiful code, either.

![Joe Karlsson at his desk, chin on hand, with a microphone in front of him](https://www.joekarlsson.com/images/about/collage/studio.webp)

Joe  
Karlsson

I write about my homelab, AI tools, databases, and the weird stuff I build on the side.

[More about me →](https://www.joekarlsson.com/about/)

[Bluesky](https://bsky.app/profile/joekarlsson.com) · [LinkedIn](https://www.linkedin.com/in/joekarlsson/) · [GitHub](https://github.com/JoeKarlsson)
