Saturday, May 31, 2025
Coding with AI: The Good, the Bad, and the Weird


Disclaimer: The opinions expressed in this post are my own and do not reflect the views of my company.
For the past year or so, I've been pair programming with an AI assistant integrated into my code editor. It's like having an extremely fast (and extremely confident) junior developer sitting next to me. This new coding buddy can churn out boilerplate code in seconds and even suggest solutions before I've fully formed the question. But it also has a knack for making things up as it goes along, which has led to some interesting late-night debugging sessions.
In the developer community, these AI coding tools have quickly gone from novelties to everyday assistants. In fact, a survey of hundreds of developers found that over 90% are now using AI to help with their work. I'm one of them. And while I'm impressed by how much these generative code assistants can do, I'm also keenly aware of their limitations. So, I’d like to share my personal reflections on how AI has made my life easier, where it has made it more... interesting (to put it nicely), and why I believe it's a powerful tool – but no magic solution.
How AI Helps Me Code
I'm not ashamed to admit it: I'm thoroughly enjoying the ways AI has made coding easier for me. Here are some of the positive experiences I've had using an AI coding assistant in my daily workflow:
- Writes the boring code for me: Whenever I need to create boilerplate (think repetitive getters and setters, or basic CRUD functions), the AI can generate it in a flash, saving me from the tedium of typing it out myself. This has been a game-changer when I'm setting up new modules or data models – the mundane stuff I used to dread now gets done in seconds.
- Offers instant examples and suggestions: If I'm unsure how to use a certain library function or algorithm, I can simply write a quick comment or prompt, and the AI often fills in a plausible code example on the spot. It's like having Stack Overflow built into my editor (minus the lengthy forum threads). This on-demand guidance has helped me recall syntax and explore new APIs without breaking my flow.
- Speeds up prototyping: When I'm trying out a new idea, I sometimes ask the AI to whip up a quick implementation or scaffold for me. It might not be perfect, but it's usually a decent starting point that I can then tweak. This has saved me hours I might have otherwise spent writing boilerplate setup code from scratch.
- Finds alternative solutions: Occasionally, the AI suggests an approach or optimization I hadn't considered. It's a bit like brainstorming with a colleague who has read every coding blog on the internet. For instance, I was about to write a custom sort function when the AI suggested a built-in method that handled my case – boom, ten lines of code saved and a cleaner solution implemented.
In short, the AI assistant acts like a tireless pair programmer who handles the mundane stuff and sometimes even surprises me with a clever tip. In fact, some studies suggest that letting AI shoulder the boring, repetitive parts of development can free up mental energy and make coding more enjoyable. I can definitely relate – when I'm not bogged down writing boilerplate, I have more time (and patience) to focus on the tricky, interesting problems. It’s a productivity boost and a morale boost rolled into one. But before you think this all sounds like a dream come true, let's talk about the flip side, because it's not all sunshine and passing test cases.
When AI Falls Short (or: The Weird Stuff)
For all the time my AI assistant saves me, it occasionally sends me on wild goose chases or introduces brand-new headaches. If my AI were human, this is the part where I'd gently explain the difference between being confident and being correct.
One evening, for example, I was integrating a third-party API and asked the AI to help handle an error case. It confidently generated some code invoking a function that looked legit – the syntax was perfect, the logic made sense at first glance. But then my program crashed, complaining that this mysterious function didn't exist. I spent 15 minutes combing through documentation and searching online, only to discover that the AI had essentially invented a solution out of thin air. It turns out the function it suggested wasn't part of the API (or any API, for that matter). My AI buddy had hallucinated. (Yes, hallucination is the official term for when an AI model just makes stuff up, like recommending a code library or API that doesn’t exist. Comforting, right?)
That wasn't a one-off incident. Here are a few other fun categories of AI misfires I've run into:
- The Confidently Wrong Answer: Sometimes the AI will provide a solution that looks plausible, complete with a convincing explanation or comments, but it's just flat-out incorrect for the problem at hand. It's like getting a very convincing answer to a question you never asked. Debugging code that was written incorrectly but with great confidence can be oddly tricky – you find yourself second-guessing your own knowledge because "the AI sure sounded certain."
- Phantom References: As mentioned, I've had the AI suggest importing libraries or calling functions that simply don't exist. It will cite them with a straight face as if they've been there all along, causing me to question my sanity (and my spelling) until I realize the model just made something up. This is where that hallucination concept comes in – the AI doesn't actually know in the human sense, it just statistically predicts what looks like a good answer, even if that means fabricating an entirely fake package name.
- Overkill Implementations: There are times I ask for something simple and get an over-engineered monstrosity in return. I might request a basic utility function, and the AI responds with a sprawling, abstract factory pattern plus a singleton for good measure. Sure, it compiles, but it's far more complex than any human would write for the task. It's as if the AI occasionally flexes its "creativity" in all the wrong ways, leaving me to trim the fat. (Did I really need a factory and two builders just to parse a JSON file? No, no I did not.)
- Context Blindness: If the AI doesn't have enough context or misinterprets what I'm trying to do, it can go off on a complete tangent. I've seen it mix up frameworks (pulling in, say, some Node.js-style code when I'm clearly in a Python project) or assume the wrong language entirely based on a variable name. It’s a reminder that the AI isn't truly "thinking" – it's just pattern-matching on the cues it’s given. And if those cues are ambiguous, the results can be pretty bizarre.
Most of these issues aren't catastrophic — more often they're a source of amusement and occasional facepalms. But they underscore an important point: you cannot blindly trust the AI. Every time my trusty assistant produces an especially strange or complex snippet, I know to take a step back and review it with a critical eye. If something looks too good (or too odd) to be true, it probably is. After all, even a cutting-edge AI can be wrong, and it will be wrong with supreme confidence. We've all seen what happens in other fields when people trust AI output without verification – from news articles riddled with AI-introduced errors to a lawyer embarrassingly submitting a brief full of fictitious case law. The stakes might be lower in my day-to-day coding, but the lesson is the same: always double-check what the AI gives you.
So yes, my AI pair programmer has a mischievous streak. That leads to the next key realization: as helpful as this tool is, it doesn't replace the need for actual human understanding.
Not a Magic Wand: You Still Have to Think
Using an AI coding assistant doesn't mean I get to turn off my brain and let the machine do all the work. (If only it were that easy!) In my experience, the best results with these tools come when I use them to augment my own understanding, not replace it. The AI can suggest code, but I'm the one who has to read it, debug it, and decide if it actually makes sense in my project.
No matter how advanced it gets, an AI assistant is not a substitute for having a solid grasp of the programming language or the problem at hand. If I ask it to implement something in an area where I have zero familiarity, there's a good chance it will produce something that sounds plausible yet is fundamentally flawed – and I might not catch it. On the other hand, if I basically know what I need to do and just want a quick way to do it, the AI usually excels. It’s a tool that amplifies your skills; it doesn’t create skills out of thin air.
I've heard anecdotes (and met developers) who turned off these tools after finding that blindly following AI-generated code led them into messes. One colleague joked that they spent more time fixing AI-suggested bugs than writing their own code. That happens when you treat the AI's output as gospel. The key is to use it judiciously and never lose sight of the fundamentals. Personally, I've set a few ground rules for myself when using AI in coding:
- Trust, but verify: I never accept an AI-generated snippet without reviewing it. That means reading through the code, checking that I understand it, and testing it. If the AI suggests a clever one-liner or a new library function, I verify that it's actually correct (and that the library actually exists!) before I rely on it.
- Guide the AI and stay in control: I treat the AI like a well-meaning but fallible assistant. I give it clear instructions and context to get better results, but I don't assume it will magically figure out the whole solution. It's great for suggestions and boilerplate, but I'm still the one architecting the solution. If the AI's output doesn't fit, I'm not afraid to override or rewrite it.
- Keep learning: I don’t let the AI be a crutch that stops me from learning new things. In fact, I often use its suggestions as clues for what to learn next. If it uses an unfamiliar function or approach, I'll look that up in official docs or trusted resources. This way, the AI can even highlight gaps in my knowledge, which I can then fill. My goal is to ensure that I understand the code we produce together.
By following these rules, I've found that the AI truly becomes a powerful extension of my own abilities, rather than a replacement for them. It feels less like cheating and more like collaborating. I still get the final say on every line of code that goes into our codebase. And honestly, that’s how it should be – the AI may drive for stretches, but I'm keeping my hands on the wheel.
Staying Grounded Amid the Hype
With how fast AI coding technology is evolving, it's easy to get carried away with hype. Every week there’s a new article proclaiming that AI will revolutionize programming or make developers obsolete. I’ll admit, I’m amazed by the progress too – the tools I’m using today are noticeably better than the ones from a year ago, and who knows what they'll be like next year. The pace of improvement is real, and it does feel a bit like science fiction sometimes.
That said, I like to stay grounded. Yes, the AI is incredibly useful, but it's not magic. It doesn't truly "understand" my project’s requirements or the users’ needs. It won't come up with a brilliant new app idea or refactor my entire codebase into a work of art on its own. Those higher-level tasks – understanding what to build, why to build it, and how it should ultimately behave – still firmly rest with us human developers. The AI, in its current form, is more like an assistant that automates the grunt work and suggests tips based on patterns. It's an advanced assistant, no doubt, but it's not about to replace a senior engineer when it comes to making judgment calls or creative problem-solving.
I push back when I hear people talk as if today's AI is infallible or autonomous. Overconfidence in these tools can backfire spectacularly (as we've seen in other domains and even in some coding security incidents). In reality, using AI for coding is a skill in itself – one that requires understanding the tool's strengths and weaknesses. We have to remain the responsible adults in the room, sanity-checking the AI's outputs and integrating them wisely into our projects. In other words, despite all the hype, we still have to do the thinking.
At the same time, I'm genuinely excited about how quickly AI coding assistants are improving. The fact that I can auto-generate chunks of code or get instant answers to technical questions is already something I wouldn't have imagined possible just a few years ago. The hype can be overblown, but the underlying advancements are very real. My approach is to appreciate those advancements without expecting the AI to perform miracles. It's a powerful tool today, and it’s getting better, but it's not almighty (and that's okay).
Conclusion
Working with an AI coding assistant has been a bit like training a hyper-intelligent puppy: it's eager, surprisingly clever at times, but occasionally makes a mess that I have to clean up. Overall, it has undeniably improved my development workflow – automating the boring parts, accelerating prototyping, and even teaching me a few new tricks. But it has also reinforced some age-old truths about programming. Chief among them: there's no substitute for understanding what you're doing.
Instead of fearing that AI will take my job, I've found that it changes my job in subtle ways. I write a little less boilerplate by hand and spend a little more time reviewing and thinking critically about code. I still design, debug, and problem-solve as much as ever – possibly more. The AI handles the rote stuff so I can focus on the complex stuff, but I always have to stay engaged. In that sense, using AI feels like having a nifty power tool: it can make you a lot more productive, but you need to know how to use it properly or you might hurt yourself.
So, will AI eventually write all our code while we sip coffee and watch? I doubt it (and I wouldn't trust it if it tried!). What I do believe is that AI will continue to grow as an invaluable assistant for developers, taking on more of the tedious workload and maybe even helping us catch mistakes. As for me, I'm happy to have this tool in my toolbox, but I'm keeping my skills sharp and my expectations realistic.
In the end, AI might be my coding co-pilot – but I'm still the pilot. And to be honest, with an AI riding shotgun and helping out, coding has never been more interesting (or occasionally weird)! 🚀