My take on vibe coding

Tzu-Mao Li

There is probably not much new below, given that it is such a hotly debated topic. I keep it here in case people want to know where I stand and so I don't have to explain the same thing over and over again. I wrote the text below on April 9th, 2025 when I first tried out Cursor. I have since then tried out more variants of vibe coding with varying amount of human intervention and my conclusion remains mostly the same. (Basically, talking to computers in natural languages sucks and is not fun.)


I tried out "vibe coding" (using Cursor if anyone is interested) for an hour or so yesterday to prototype a browser-based Slay the Spire clone.

My immediate impression was that "this is not fun at all for me". I got in to the whole programming business trying to hand code HTML/JS of some websites for fun when I was 9-10 years old, so I know that if I was able to hand code a website like the one below I would be incredibly excited. But after building the website using Cursor by mostly prompting my way through it, I felt very very little sense of achievement from the result.

Firstly, using natural language to program is very very frustrating. Programming languages are beautiful because they are both concise and precise abstraction of the problem we want to solve. Changing the UI of the website below through natural languages requires very tedious and ambiguous instructions (e.g., "the draw pile on the bottom right is too big and overflows outside of the game table, can you expand the game table so that the draw pile is contained" -- this prompt didn't fix the UI btw). I do think using precise programming languages is better, but that's even beyond the point: it's just not fun having to describe what I'm thinking using an ambiguous natural language. I got interested in CS because talking to computers is more fun than talking to human, but now it seems to go backwards and I have to talk to computer like I'm talking to human...

Secondly, throughout the process I have very little incentive to read the generated code, and I don't have a good mental model on how the code base is built. By the time I do want to understand the logic flow of the code (because of a bug introduced by Cursor), the codebase has grown so large that I don't want to read it anyway. This really feels like a realization of a quote from Joel Spolsky: "It's harder to read code than to write it.". Since reading requires a global context, and writing incrementally builds that context locally. In fact I would justify it further and say that "writing code is more fun than reading code", so vibe coding actively kills the part of coding that is fun, i.e., writing.

Anyway, for the boring programs it can reliably one shot (which I'm not sure what exactly are), I do think these things can be useful to some degree, but I'm worried that we are heading towards an age where programming is no longer fun for people like me. So I guess I have grown old at this point.