m1es

Using AI in programming is like riding an e-bike

I’ve been wondering: is using AI in programming like cycling with a battery? Metaphors can be tricky, but I’d like to explore this one. I’ll be looking at satisfaction, performance and learning.

Satisfaction

I’ve been cycling for roughly a year on an electric bicycle. I wrote about that earlier. It made me feel good not needing my car, enduring the weather and doing some exercise. For the past few months I’ve been commuting on a racing bike and feeling even better. I’m actually exercising and it feels rewarding.

The everyday climb in the tunnel, the sometimes harsh winds, the sweating on a sunny day. To be honest: it’s a bit of what I long for. I feel great and I just don’t see myself using my e-bike anytime soon. When winter hits and weather conditions are terrible I see it as a great backup alternative now.

In my job I’m leading a backend development team. Although I’m super happy with our team, our culture, our focus on learning and our deliveries, there’s one thing I find most satisfying: spending time in ‘the zone’ when programming myself. I find those moments highly rewarding. And for me these moments can be compared to intense bicycle exercises, where utter focus makes you forget about everything else for a while.

Part of the reward comes from the struggle. From overcoming an obstacle. But what happens to that obstacle when we open up Copilot in VS Code? I think it’s like cycling on an e-bike. It’s not entirely your own accomplishment anymore.

Another part of the reward comes from actually successfully finishing your task at hand. Reaching the goal. Let’s talk about performance.

Performance

The commute takes a bit more time with my racing bike. This is partially because of a slightly lower speed, but mostly because of changing outfits. But to be honest, I don’t really look at the clock that much. The difference in time isn’t important.

When programming for a job the clock is ticking somewhere. You’re working on a budget or against a deadline. There are factors that make that, just like in a cycling competition, speed and performance do matter.

I’m certain that I’m a more productive developer because of the coding assistants available. It feels good not being stuck for long, progressing more easily and adding value in a shorter amount of time. And I’m pretty sure I’m not even the most progressive user of AI. I use Copilot with care, like a programming buddy. I ask it questions and have it generate code. I’m using the agent mode and I’m experimenting with agents in Github. It sometimes feels magical, other times I’m questioning if this all will ever really work at all. Then I remind myself that “today's AI is the worst AI you will ever use”, as Ethan Mollick puts it.

From a productivity standpoint there is no way around embedding AI in our programming workflows. At this point I feel in control and understand every line that’s generated. That’s now. But I worry too. What happens when my use of AI increases, as it inevitably does? Will there be a point that I can’t function without AI? What if so much code is generated and not every line of code is reviewed or understood anymore? Will it come that far? How will my mental model of our codebases be in a few years’ time? Will our codebases remain maintainable? I don’t have the answers. Which brings me to the next topic: learning.

Learning

I believe that the e-bike brought me to the racing bike. Without this first step, I would still have driven to the office by car every day. It’s the e-bike that showed me the other cyclists on the road. Over time I wondered if I shouldn’t do the same as these other cycling enthusiasts.

Doesn’t AI in the same way lower the barrier for potential programmers out there? It helps people without programming knowledge automate things and even create software applications. Some of these people will long for more, just like I did on my e-bike, and become motivated in understanding what it takes to be a programmer.

Also for me as an experienced developer I feel AI can be great for learning. Under the right circumstances, that is. Where you have time, focus, motivation and the ability to reflect. That’s not when I find myself asking the LLM the same thing over and over, just like I used Google to search for an answer on Stack Overflow. That’s not learning. That’s just another way of offloading mental effort and creating another dependency. When was the last time you tried programming without an internet connection?

But what if the programming landscape changes entirely? Like in the Software 3.0 era as depicted by Andrej Karpathy, where natural language becomes the new programming interface? To what extent do you still need to learn a programming language? Will it in the long run be motivating to use a non-deterministic oracle to generate deterministic code? Will learning to write great prompts be more effective than learning to code? Just like learning a high level programming language made many developers forget about low level programming languages?

I don’t know, but to me it already feels easier than ever to write software without understanding the fundamentals. And because of the non-deterministic character of the tool we are relying on, which even behaves differently with each new release, we might feel out of control after a while. From that point it’s going to be a steep learning curve, a really tough mountain to race up. Or not of course, and just go all-in on the e-bike forever.

Conclusion

On a rainy day the cycling roads are quiet. People find other ways to commute or they work from home. Comfort wins. We don’t like to struggle if we don’t have to. And for that reason AI is here to stay and comfort us all, in far more domains than just programming.

It would be foolish not to embrace the speed gains that AI offers in a professional context. I believe balancing ‘learning from AI’ with ‘depending on AI’ is going to be crucial in sustainable software development.

With the rise of AI I found new joy in programming. Interestingly, it’s not so much about the joy of exploring everything that AI has to offer, but more about supporting me in learning processes and helping me complete challenges with more ease.

It’s like how I discovered joy in cycling through my e-bike commute. I strongly feel I get more out of cycling on my racing bike and equally so I feel better mastering a skill like programming, than depending on an AI too much.

Use AI to learn. Keep pedaling yourself.