Vivek Haldar

Programming with LLMs: Part 1

Some thoughts on the anti-LLM sentiment in the programming community, sparked by this article. This is a lightly edited version of this video on my YouTube channel.

TL;DR: I disagree with the article, but I want to make it clear that this isn’t a critique of the author. I’m more interested in diving into the ideas and arguments because I feel it reflects a lot of the anti-LLM (Large Language Model) sentiment we see today, particularly in the programmer community.

So, let’s dive in.

The Common Argument Against LLMs

Right at the top of the article, the author concedes that they’re making a stronger version of the common argument against LLMs. Now, the usual argument against using LLMs for programming is that they’re not as good at generating code as some claim. It’s all hype, they say.

People who claim massive productivity gains often point to how quickly they created an app using an LLM. The critics argue that these folks are just blowing smoke. Sure, there’s room to debate where current LLMs are good at generating correct code and where they fail. That’s a fair discussion. There are certainly areas where an LLM won’t be of much help—like when you’re trying to code an entirely new algorithm.

But, of course, there are other areas where LLMs can be a massive productivity boost.

A Stronger Rejection of LLMs

Here’s where the author steps things up a notch. They’re not just saying LLMs aren’t useful. They’re going further, claiming that even if LLMs were good, they still wouldn’t use them.

This is a much more personal, almost aesthetic, stand against LLMs. That’s what I found interesting.

Programming as Art vs. Commercial Endeavor

Now, we get to the meat of the argument. The author treats programming as an art form, stating that programmers have an infinite canvas to express their creativity, which makes programming a form of self-expression. I think this is the crux of a lot of anti-LLM sentiment in the programming world.

I also think they’re conflating two separate things. One is using programming as a means of self-expression, like the author is saying here. The other is using programming as a means to an end—to accomplish a task, run a business, make a profit, and so on. These are two very different endeavors.

Programming as an artisan or an artist is a personal activity. Programming as an industrial or commercial activity is about efficiency, productivity, and scale.

If we’re discussing how LLMs can or can’t help, I think it’s crucial to separate these two types of programming.

You Are Not an Artisan

This reminded me of an old blog post by Venkatesh Rao from over a decade ago, titled You Are Not an Artisan. It’s a fascinating read, and I recommend it, but let me highlight some relevant parts here.

The piece talks about how modern workers often view themselves as artisans, even when working in industrial or commercial contexts. One key point in the article is about how artisans confuse “economically essential variety” with “economically optional variety.”

To paraphrase: if uniqueness in a product mainly makes the producer feel special but doesn’t lead to profitable differentiation, it’s optional, like latte art. In contrast, economically essential variety must be handled to make a market profitable.

The author of the Hacker News article seems to be approaching programming more like the former—as an artisan craft—while many of us in the LLM space see it as the latter: a commercial activity that’s about solving problems and achieving goals.

The History of Techno-Primitivist Thought

There’s a lot of what I call “techno-primitivist” thinking in these arguments. Throughout the history of programming, there’s always been a nostalgic school of thought that resists new developments and clings to older ways of doing things.

The last big wave of this was in the 90s and early 2000s when IDEs (Integrated Development Environments) were gaining popularity and replacing plain text editors. There’s a famous article from that time called Does Visual Studio Rot the Mind? by Charles Petzold (2005). In it, the author rants against IDEs, arguing that tools like IntelliSense (autocomplete) sap our programming intelligence.

Sound familiar? It’s the same kind of sentiment we hear today in the anti-LLM crowd.

In both cases, there’s a yearning for the past—for a time when there were no APIs, classes, properties, or IDEs—just the programmer and the code.

Programming Tools Throughout History

The author also makes an interesting point comparing using LLMs to asking an artist to paint for you. But if we look at the history of art, this isn’t so clear-cut. Take conceptual art, for example.

One famous case is the work of American artist Sol Lewitt. His wall drawings were often executed by other people based on high-level instructions he provided. So who’s the real artist here—the one giving the instructions, or the people executing the work?

In programming, too, this raises the question: if I give an LLM instructions and it writes code for me, am I still the programmer? I would argue that even if you’re approaching programming from an artist’s point of view, you should use all the tools at your disposal to push your artistic vision further.

The March of Abstraction

The entire history of programming is about automating and abstracting away lower-level tasks. We’ve gone from binary code to assembly, to compilers, to higher-level languages, and beyond. Each step involves creating black boxes to simplify our work.

Using LLMs for programming is just the next step in this evolution. These tools allow us to tackle much larger, more complex tasks than we could have done before.

My Personal Experience with LLMs

Personally, my experience with LLMs has been overwhelmingly positive. I’ve used them both for work and for personal projects, and they’ve saved me tons of time. I’ve been able to complete projects that wouldn’t have fit into a weekend before, but now they do, thanks to LLMs. It’s been awesome.

To borrow a quote from Don Draper in Mad Men: Always look forward.

I hope this gives you something to think about. If you’re pessimistic about LLMs, I’d love to hear why and learn about your experiences. If you’re already using LLMs to speed up your programming or explore new things—welcome to the party. It’s the wild west out here, and we’re all figuring out what’s possible with these tools.