The first time I programmed a computer I was in high school. I learned to write small Visual Basic programs in an elective class called Computer Programming. Instantly, I “got it” (though at the time it wasn’t crisply articulated in my mind): that a program was a machine that operated on information rather than matter; that writing code was like building such a machine; and that the computer could automate any informational work that could be precisely described to it. Writing code was the way to conjure informational machines.

As I learned, there was a long while where I didn’t really know what I was doing. I didn’t grasp recursion or object orientation too well at first. As I did my many assignments and projects, I was feeling my way through the dark. In those days I did plenty of guess and check debugging. And this continued as I exposed myself to new languages, paradigms, and technologies. I didn’t always immediately know whether or not some code I’d cobbled together would do the thing I wanted, but I knew what I wanted it to do. I could explain it pretty clearly in English, and I could tell whether the goal had been sufficiently satisfied when I ran the program and the tests passed. This was not exactly fun, but it triggered some reward circuit in my brain. Run the code: it fails; tweak this part: it fails differently, interesting; move that there: it works!

These two paths intertwined and developed into a love of building: first, the slow satisfaction of inventing something useful that essentially existed only in the world of ideas, and second, the pleasant thrum of hitting goal after goal.

Once I’d actually more or less figured out what I was doing, the shine wore off a bit. I understood that software could merely appear to run correctly while containing subtle logical bugs. And that the trial and error approach is often slower in the long run than RTFMing. The systems I was building with other people were valuable, but creating professional grade software took a really long time and required a lot of diverse expertise. I don’t think I became disillusioned, but rather the reality of the labor of software engineering set in. I saw that it wasn’t much of a game.

Lately, though, I’m starting to feel like the advent of agentic AI and vibecoding has reignited in me some of the appeal of creating software. I recently saw this take somewhere: “vibecoding is like gambling”. It was meant to be derisive, and it’s kind of true, but it’s that chance aspect that makes vibecoding fun. You ask the agent to do something repeatedly, feeding it back resultant errors and additional context, and nudging it till it gets the right answer. It reminds me of the pleasure I felt long ago when I would stay up late just fiddling with a program until it ran.

With generative AI, I can turn ideas into programs much faster than before and without the chore of learning some API I may never need again, or some library that will be obsolete the next time I reach for it. Seeing a working prototype takes minutes instead of days, and the fast feedback loop between my brain and the UI gets me easily into a flow state (I felt similarly when I worked in Clojure). It feels empowering and exciting. For the time being, I’m energized by the new AI-backed software generation tools.

To be clear, what I get out of vibecoding is orthogonal to craft, which is a different kind of pursuit. I don’t know whether or to what extent craftsmanship is compatible with AI-assisted coding. I think it still requires some clarity of thought to work with these new tools effectively, and there is a bit of an art to it. But I also have to imagine that with more powerful foundational coding models and more capable agentic systems, the human developer will be even further removed from production. There are all kinds of implications for what this will mean for the career of software engineering, which I’ve written about before. For knowledge workers generally, on a long time horizon, this de-emphasis on production may turn us from creators into curators; rather than build the system we may just tune the system, by thumbing up or down its decisions. On the other hand, maybe it could allow us to unleash our imaginations.