I took my first college programming class in 2007, and had been dabbling with programming long before that.
As I was learning the ins and outs of Visual Basic (lol), it was impossible to imagine the changes that would come to the technology landscape in a relatively short time. A year later I was learning Objective-C to write apps for the new iPhone, and eighteen years later I’m using an iPhone from 30k feet to instruct an LLM coding agent on my desk at home to fix a visual bug in an app I’m working on.
Eighteen years isn’t a very long time, and we’ve gone from “there’s a real web browser on it” to “you can create apps from thousands of miles away by writing normal sentences instead of fixing missing semicolons.”
Okay, enough marveling, quick disclaimer: this isn’t my grand unified take on AI. I don’t have one. I’m still uneasy about plenty of it.
LLMs aren’t perfect. There are real ethical concerns, unanswered questions about the impact on humanity and the environment, strange labor dynamics, copyright questions, and a whole bunch of other things that I don’t think anyone has fully sorted out yet. I’m not brushing any of that off as unimportant, but I also don’t have the answers.
In spite of those thoughts in the back of my head, building with LLMs right now feels pretty good in ways I didn’t really expect.
One of the things I keep thinking is how much of programming used to be waiting for my hands to catch up with my head.
I don’t mean that in a “typing is the hard part” way. Typing has never really been the hard part. But so much of building software is surrounded by little bits of friction: remembering exactly how an API works, wiring up boilerplate, finding the right file, fixing the CSS thing that should take thirty seconds but somehow eats an hour, getting a local environment into the correct state, or fixing build issues while the idea in your head slowly loses momentum.
At least for me, there are a lot of small ideas that never make it past the “that would be neat” phase. Not because they’re impossible, or even difficult, but because the startup cost is just a little too high. The app I’d use twice a month. The tiny utility for my own weird workflow. The one-off script. The half-baked feature for a side project. The “what if this page worked more like this?” thought that shows up while I’m drinking my coffee and disappears by lunch.
Instead of an idea going into the notebook graveyard, I can try it. Probably badly at first. I can ask for a rough version, look at it, recoil a little, explain what feels wrong, try another direction, delete half of it, tighten the layout, rename the confusing thing, and keep going. The first answer is rarely the final answer, but that’s fine. The point is that the first answer exists.
When the distance between “I wonder if…” and “huh, there it is” gets shorter, I try more things. I throw more away. I polish little corners that I probably would have left alone. I chase ideas further than I used to, because each step costs a little less than it did before.
To be clear, this does not mean the machine is magically doing the important part. If anything, using LLMs has made the importance of taste and judgment more obvious. The model can produce code. Lots of code. So much code. More code than anyone asked for, and often with the confidence of someone who has never once had to maintain anything.
The hard part is knowing when the thing is overbuilt. Knowing when the interface feels wrong. Knowing when a function is too clever, or a layout is almost-but-not-quite there, or when something solves the stated problem technically while completely missing the point. You still have to know what you’re trying to make. You still have to care whether it feels good.
The bottleneck has moved: less time spent remembering how to express an idea to the computer, and more time deciding whether the idea is any good in the first place.
I like that tradeoff.
Said another way: It’s easier than ever to start something, but it’s still hard to complete it. Maybe harder in some ways, because now you can get to the messy middle so quickly. The first 80% of a project has always been more fun than the last 20%, and now the first 80% shows up fast enough that you can almost trick yourself into thinking the hard part is gone.
But it isn’t gone. Once the idea starts to take shape, I can see what was wrong about my initial assumptions. I can notice the awkward parts, the missing pieces, the places where the idea didn’t account for the edge cases. Coding used to take long enough that I could keep noodling while I worked. Now I get to the next thinking checkpoint so quickly that I have to stop and think again.
I don’t know where all of this goes. I don’t know what the right long-term answers are to the very real problems around these tools. I don’t know how much of my excitement will last once the novelty wears off.
But I know this much: I’m building more, abandoning fewer ideas, and having a ridiculous amount of fun while doing it.