The other day I had to write some presumably boring serialization code, and I thought, hmm, I could probably describe the approach I want to take faster than writing the code, so it would be great if an LLM could generate it for me. But as I was coding I realised that while my approach was sound and achievable, it hit a non-trivial challenge that required a rather advanced solution. An inexperienced intern would have probably not been able to come up with the solution without further guidance, but they would have definitely noticed the problem, described it to me, and asked me what to do.
Are we at a stage where an LLM (assuming it doesn't find the solution on its own, which is ok) would come back to me and say, listen, I've tried your approach but I've run into this particular difficulty, can you advise me what to do, or would it just write incorrect code that I would then have to carefully read and realise what the challenge is myself?
In the instance of getting claude to fix code, many times he'll vomit out code on top of the existing stuff, or delete load bearing pieces to fix that particular bug but introduce 5 new ones, or any number of other first-day-on-the-job-intern level approaches.
The case where claude is great is when I have a clear picture of what I need, and it's entirely self contained. Real life example, I'm building a tool for sending CAN bus telemetry from a car that we race. It has a dashboard configuration UI, and there is a program that runs in the car that is a flutter application that displays widgets on the dash, which more or less mirror the widgets you can see on the laptop which has web implementations. These widgets have a simple, well defined interface, and they are entirely self contained and decoupled from everything else. It has been a huge time saver to say "claude, build a flutter or react widget that renders like X" and it just bangs out a bunch of rote, fiddly code that would have been a pain to do all at once. Like, all the SVG paths, paints, and pixel fiddling is just done, and I can adjust it by hand as I need. Big help there. But for the code that spans multiple layers of abstraction, or multiple layers of the stack, forget about it.
The caveat is that user approach makes all the difference. You can easily end up with these bad experiences if you use it incorrectly. You need to break down your task into manageable chunks of moderate size/complexity, and then specify all detail and context rigorously, almost to the level of pseudocode, and then re-prompt any misunderstandings (and fail fast and restart if LLM misunderstands). You get an intuition for how to best communite with the LLM. There’s a skill and learning curve to using LLMs for coding. It is a different type of workflow. It is unintuitive that this would be true, (that one would have to practice and get better at using them) and that’s why I think you see takes waving off LLMs so often.
For other stuff that I know like the back of my hand, not so much.
At least for the CRUDs that I make, I really don't think I need a better model. I just wanted it to get much cheaper.
* When it gets the design wrong, trying to talk through straightening the design out is frustrating and often not productive.
* I've learned to re-prompt rather than trying to salvage a prompt response that's complicatedly not what I want.
* Exception: when it misses functional requirements, you can usually get a session to add the things it's missing.
My best experiences have been to break it into small tasks with planning/critique/discussion between. It’s still your job to find the corner cases but it can help explore design and once it is aware they exist it can probably type faster than you.
I tend to do a fine tune on the reviews they produce (I use both along with CodeScene), but I suspect you'll probably luck out in the long term if you were to just YOLO the reviews back to whatever programming model you use.
What I have learned is that when it gets the design wrong, your approach is very likely wrong (especially if you are doing something not out of ordinary). The solution is to re-frame your approach and start again to find that path of least resistance where the LLM can flow unhindered.
A. I feel personally and professionally attached.
B. Yea don’t do that. Don’t say “I want a console here”. Don’t even say “give me a console plan and we’ll refine it”. Write the sketch yourself and add parts with Claude. Do the iiital work yourself, have Claude help until 80%, and for the last 20% it might be OK on its own.
I don’t care what anyone claims there are no experts in this field. We’re all still figuring this out, but that worked for me.
Myself, I get a good mileage out of "I want a console here; you know, like that console from Quake or Unreal, but without silly backgrounds; pop out on '/', not '~', and exposing all the major functionality of X, Y and Z modules; think deeply and carefully on how to do it properly, and propose a plan."
Or such.
Note that I'm still letting AI propose how to do it - I just give it a little bit more information, through analogy ("like that console from Quake") or constraints ("but without silly backgrounds"), as well as hints at what I feel I want ("pop out on '/'", "exposing all major functionality of ..."). If it's a trivial thing I'll let it just do it, otherwise I ask for a plan - that in 90%+ cases I just wave through, because it's essentially correct, and often better than what I could come up with on the spot myself! LLMs have seen a lot of literature and production-ready code, so usually even their very first solution already accounts for pitfalls, efficiency aspects, cross-cutting concerns and common practice. Doing it myself, it would likely take me a couple iterations to even think of some of those concerns.
> I don’t care what anyone claims there are no experts in this field. We’re all still figuring this out, but that worked for me.
Agreed. We're all figuring this out as we go.
I later worked out a simpler version myself, on paper. It was kind of a waste of time. I tend not to ask for solutions from whole cloth anymore. It’s much better at giving me small in-context examples of API use, or finding handy functions in libraries, or pointing out corner cases.
1. Using a well know but complex algorithm that I don't remember fully. AI will know it and integrate it into my existing code faster (often much, much faster) than I could, and then I can review and confirm it's correct
2. Developing a new algorithm or at least novel application of an existing one, or using a complex algorithm in an unusual way. The AI will need a lot of guidance here, and often I'll regret asking it in the first place.
I haven't used Claude Code, however every time I've criticized AI in the past, there's always someone who will say "this tool released in the last month totally fixes everything!"... And so far they haven't been correct. But the tools are getting better, so maybe this time it's true.
$200 a month is a big ask though, completely out of reach for most people on earth (students, hobbyists, people from developing countries where it's close to a monthly wage) so I hope it doesn't become normalized.
The cascading error problem means this will probably never be true. Because LLMs are fundamentally guess the next token based on the previous tokens, whenever it gets a single token wrong - future tokens become even more likely to be wrong which snowballs to absurdity.
Extreme hallucination issues can probably eventually be resolved by giving it access to a compiler and, where appropriate, you could also probably feed it test cases, but I don't think the cascading errors will ever be able to be resolved. The best case scenario will eventually it being able to say 'I don't know how to achieve this.' Of course then you ruin the mystique of LLMs which think they can solve any problem.
The same insight (given enough time, a coding agent will make a mistake) is true for even the best human programmers, and I don’t see any mechanism that would make an LLM different.
LLMs do not function like this at all. Rather all they have is a series of weights to help predict the next token given the prior tokens. Cascading errors is a lot like a math problem. If you make a mistake somewhere along when solving a lengthy problem then your further calculations will also continue to be more and more wrong. The same is true of an LLM when executing its prediction algorithm.
This is why an LLM does give you a wrong answer it's usually just an exercise in frustration trying to get it to correct itself, and you'd be better of just creating a completely new context.
I’m not saying Claude Code is perfect or is the panacea but those are really different products with orders of magnitude of difference in capabilities.
Aider feels a little clunky in comparison, which is understandable for a free product.
Longer answer: It can do an okay job if you prompt it certain specific ways.
I write a blog https://generative-ai.review and some of my posts walk through the exact prompts I used and the output is there for you to see right in the browser[1]. Take a look for some hand holding advice.
I personally tackle AI helpers as an 'external' internal voice. The voice that you have yourself inside your own head when you're assessing a situation. This internal dialogue doesn't get it right every time and neither does the external version (LLM).
I've had very poor results with One Stop Shop builders like Bolt and Lovable, and even did a survey yesterday here on HN on who had magically gotten them to work[2]. The response was tepid.
My suggestion is paste your HN comment into the tool OpenAI/Gemini/Claude etc, and prefix "A little bit about me", then after your comment ask the original coding portion. The tool will naturally adopt the approach you are asking for, within limits.
[1] https://generative-ai.review/2025/05/vibe-coding-my-way-to-e... - a 3D scene of ancient pyramid construction .
[2] https://news.ycombinator.com/item?id=44513404 - Q: Has anyone on HN built anything meaningful with Lovable/Bolt? Something that works as intended?
- is this code that been written many times already?
- Is there a way to verify the solution? (think unit test, it has to be something agent can do on its own)
- Does the starting context has enough information for it to start going in the right direction? (I had claud and openhands instantly digging themselves holes, and then I realized there was zero context about the project)
- Is there anything remotely similar already done in the project?
> Are we at a stage where an LLM (assuming it doesn't find the solution on its own, which is ok) would come back to me and say, listen, I've tried your approach but I've run into this particular difficulty, can you advise me what to do, or would it just write incorrect code that I would then have to carefully read and realise what the challenge is myself?
I've had LLM telling me it couldn't do and offered me some alternative solutions. Some of them are useful and working; some of them are useful, but you have a better one; Some feel like they made by a non-technical guy at a purely engineering meetings.
This interaction is interesting (in my opinion) for a few reasons, but mostly to me it's interesting in that the formal system is like a third participant in the conversation, and that causes all the roles to skew around: it can be faster to have the compiler output in another tab, and give direct edit instructions: do such on line X, such on line Y, such on line Z than to do anything else (either go do the edits yourself or try to have it figure out the invariant violation).
I'm basically convinced at this point that AI-centric coding only makes sense in high-formality systems, at which it becomes wildly useful. It's almost like an analogy to the Girard-Reynolds isomorphism: if you start with a reasonable domain model and a mean-ass pile of property tests, you can get these things to grind away until it's perfect.
Overall though, I doubt a current SotA LLM would have much of an issue with understanding your request, and considering the nuances, assuming you provided it with your preferred approach to solving problems (considering ambiguities, and explicitly asking follow up questions for more information if it considers it necessary-- something that I also request in my default prompt).
In the end, what you get out is a product of what you put in. And using these tools is a non-trivial process that takes practice. The better people get with these tools, the better the results.
I’ve requested a solution from Sonnet that included multiple iterative reviews to validate the solution and it did successfully detect errors in the first round and fix them.
You really should try this stuff for yourself - today!
You are a highly experienced engineer and ideally positioned to benefit from the technology.
Short answer: Maybe.
You can tell Claude Code under what conditions it should check in with you. Having tests it can run to verify if the code it wrote works helps a lot; in some cases, if a unit test fails, Claude can go back and fix the error on its own.
Providing an example (where it makes sense) also helps a lot.
Anthropic has good documentation on helpful prompting techniques [1].
[1]: https://docs.anthropic.com/en/docs/build-with-claude/prompt-...
In any case, treat AI-generated code like any other code (even yours!) -- review it well, and insist on tests if you suspect any non-obvious edge cases.
Not really. What you would do is ask the model to work through the implementation step by step with you, and you'd come across the problem together.
I've seen Claude Code run in endless circles before, consuming lots of tokens and money, bouncing back and forth between two incorrect approaches to a problem.
If you work with Claude though, it is super powerful. "Read these API docks and get a scaffolding set up, then write unit tests to ensure everything is installed correctly and the basic use case works, then ask me for further instructions."
If your project has only one task that can be completed, then yeah. Maybe doing it yourself is just as fast.
Related to correctness, if the property in question was commented and documented it might pick up that it was special. It's going to be checking references, data types, usages and all that for sure. If it's a case of one piece having a different need that fits within the confines of the programming language, I think the answer is almost certainly.
And honestly, the only way to find out is to try it.
Most of the time, with the latest models, in my experience the AI picks up what I am doing wrong and pushes me in the right direction. This is with the new models (o3, C4, Grok4 etc). The older non-thinking ones did not do this.
That way it hs no context from writing it itself nor does it try to improve anything. It just makes up reasons why it could be wrong. It goes after the unusual parts it would seem which answers the question reasonably.
Perhaps more sophisticated models will find less obvious flaws if that is the only thing you ask.
Here is an article I wrote a while back: https://omarabid.com/gpt3-now
GPT 4.5 was able to detect a Rust ownership issue, something which requires "ahead of time" thinking.
I also agree that the RL environment including custom and intentional tool use will be super important going forward. The next best LLM (for coding) will be from the company with the best usage logs to train against. Training against tool use will be the next frontier for the year. That’s surely why GeminiCLI now exists, and why OpenAI bought windsurf and built out Codex.
That said, it also changed areas of the code I did not ask it to on a few occasions. Hopefully these issues will be cleaned up by the impending release.
It told me to stop pasting code and that it can access GitHub, so tonight I'll try it on a public repo.
Except I'm never gonna give Elon money, I don't care how good his model is.
Between claude code and gemini, you can really feel the difference in the tool training / implementation -- Anthropic's ahead of the game here in terms of integrating a suite of tools for claude to use.
When I have a difficult problem or claude is spinning, I usually would use o3-pro, although today I threw something by Grok 4 and it was excellent, finding a subtle bug and provided some clear communication about a fix, and the fix.
Anyway, I suggest you give them a go. But start with claude or gemini's CLI - right now, if you want a text UI for coding, they are the easiest to work with.
It is model agnostic however.
Generally i trust it to do a good job unsupervised if given a very small problem. So lots of small problems and i think it could do okay. However i'm writing software from the ground up and it makes a lot of short term decisions that further confuse it down the road. I don't trust its thinking at all in greenfield.
I'm about a month into the $100 5x plan and i want to pay for the $200 plan, but Opus usage is so limited that going from 5x to 20x (4x increase) feels like it's not going to do much for me. So i sit on the $100 plan with a lot of Sonnet usage.
Error rate over time increases dramatically.
There's also a $100 version that's indeed the same as the $200 one but with less usage.
It does.
I think it may be that $20/month gets you access to Opus 4 via https://claude.ai but not in Claude Code.