Programming with AI: A Different Paradigm

I often land in the "Sometimes I wish you never showed up" camp. A new perspective on navigating the world of programming with AI.

810 words4 min readpost 003

I was in the first 1 million users of ChatGPT, and I've been using some LLM to program since that time. It was one of the first things I used them for, back when you would have to get them to give you things little by little, one function at a time. I used them at first as a novelty really. They seemed to slow me down more than help back then. As of recent, I've been applying it more and more until one day, I stopped writing code. I don't know when that was specifically, but I know it feels like forever ago. Life definitely changes after you stop writing code.

I recently had a friend tell me he started using Claude to program, and this floored me. He said it's like he's playing with "God Mode" on, and I agree. Of course, he was slow to adopt because he cared about his own abilities and was cautious. I should note this friend is definitely a good programmer, which likely slowed his adoption of this even more. This brings up a good point though. If a guy as smart as he is was avoiding it, maybe I adopted it too quickly?

That question sent me down the rabbit hole of AI programming in general. I'm not alone in feeling this ever growing sense of uselessness with AI coming to eat my lunch, growing stronger and stronger by the day. As I see it, you have two options, fight and resist or accept that it'll be here and adapt. I've chosen the latter, although, I often land in the, "Sometimes I wish you never showed up," camp of the former. Either way, that leaves us with a question on what to do when we use it.

Something that helped me was looking at it in shipping mode vs. learning mode. In shipping mode (where I mostly live), you're trying to just get the thing out the door. This usually means leaning heavily on AI and just getting the job done. As for learning mode, it's about understanding. Oddly enough, I still use AI here. It makes a great reference tool and research aggregator. You can get it to help you break apart concepts in any manner, and unlike in person teachers, they don't get frustrated (or they don't show it in a manner I can detect at least).

When you're trying to figure it out for yourself, ask, "what am I trying to get out of doing this programming/project?". Generally, if you have something new in front of you or want more information, you're learning. On the other hand, if you're just trying to get to the end goal (the magic wand), you're in shipping mode. Identifying which is key to defining your relationship with programming at that time. It's important to really sit with this as picking wrong can be detrimental. If you're needing to ship but you treat it like learn mode, you're leaving things on the table and your competition will outrun you. On the other hand, if you're needing to learn but you keep shipping, you might show up later with a huge knowledge gap, making the feeling of being behind sting 10x more.

What's one to do then when AI can do everything you used to do in programming, 100s of times faster? Again, I think the bulk of the benefit here is in setup. If I could convey just a few things to do, it'd be these. One, don't let things go without having your eyes on them. Make sure you have ways to at least glance at and check things that are going out, especially writing and UI elements. Second, build with tests in mind. When I work with Claude, I have an ever growing test suite for a project that Claude runs before we ship, meaning the small mistakes tend to shake themselves out. Third, when in doubt, try a few options. I have Claude build me artifacts that have an easy "flip" between option. It's how I landed on the design for the site you're on now even. Human taste is something that we can and should still bring to the table.

Ultimately, I think it's a skill in and of itself, that is, generating good code with LLMs. The best engineers are using them, and I think we all should as well. As for where to begin, that's definitely speculation. As always, I think getting in there and seeing what works is the way to go. If I had to give a more broad prediction, system design is where all the gains are to be had. We're just abstracting up one level further still. Every advancement in programming comes about like this. Long gone are the days of punchcards or Assembly. This is just that next step.

Stay sharp,

Josh

← All posts · Back to the front