In that case, it's way better to simply write the code yourself.
IMHO the best of both worlds option is agents working with deterministic CLIs. Where the agent does the reasoning (and text generation) but uses CLIs to carry out all of the actions (issuing refunds, unblocking accounts, or whatever).
It's possible to get very reliable and consistent work out of agents when they're using well written prompts with well designed CLIs.
Although you can certainly do a better-and-worse job of preventing these kinds of issues.
Some people might use skill-based scripts, MCPs, or some kind of raw access to a database. My point is that well designed CLIs are the optimal programmatic interface, for many reasons.
Wait raw access to the database? That’s one of the options for issuing a refund?
At Big Tech Company I Work At the LLM is quite happy to make raw API calls. If it thinks the data is big, then it'll write a Python tool to do it.
The reason crafted backing CLIs are useful is you can guide the LLM towards stuff that is immediately useful rather than hoping the nondetermism can separate the wheat from the chaff.
Take CI: is it interesting to know which tests passed? Maybe, but probably not. What is really interesting is what failed. Instead of having the LLM go out and talk directly to the CI system, write an intermediate CLI that filters out less actionable stuff by default, and have a flag that'll deliver the full dump if necessary.
It's a skill to do this stuff, and it's a lot of hard won experience than something I think is easily teachable. You kind of have to feel out your model and how it "thinks" about solving problems.
And then a new model version comes out and you have to learn it all again!
But that's not worth trillions of dollars...
We are slowly waking up to the fact, which was always true, that “coding” is just a fanciful preparatory task in order to appease the spirits properly so that we may invoke the spirit of what we are actually after: a live, running process that does useful things. Code is completely useless when separated from that fact.
Typing it is a complete waste of time unless getting up close and personal with it will result in some kind of useful and actionable improvement in you or your understanding. Knowing when it does and when it does not have this property is a skill of its own.
I believe this is the general belief about basically every human skill, that if you stop doing the technical fundamentals you get worse at understanding the activity. The question is whether coding is like sailing a square-rigged wooden ship, which became completely useless knowledge after the invention of the steam engine, or if it's like playing an instrument, which while technically unnecessary after the advent of MIDI and other tools, absolutely hurts your ability to arrange, compose and perform if the skill is neglected.
For my money: I think the AI scenario is more like the latter, but "humans are worse at coding" isn't the consequence I see coming. I worry that in ten years we will be awash in software that's impossible to understand. I don't think that's happened in any human industry ever. Someone has always understood how the machines are built, even if they're very remote from the users of the machine.
Like, perhaps, understanding that it is free of security and functionality bugs.
If you find yourself writing repetitive code you should consider adding a layer of abstraction. If your language isn't powerful enough you can write a code generator.
Code is obscenely low level.
No one has ever needed to do that for something that is new. And if it’s not new, you want to do it repeatedly with some guarantee of reliability. Not just in an uncontrolled manner.
That is why we have snippet systems, macros and code generators. And the best with code is to solve problem once and reuse the solution. Which we have done with libraries, frameworks and supporting software.
That is one of the things code does. It also communicates the developer's thoughts about how that process should work to others. If the latter is neglected, the code becomes very difficult to collaborate on. Very few lines of code that are written are "write once". Mostly they're changed, repeatedly, over time by many people. The live, running process is a very temporary entity by comparison. Yes, it needs to exist and do useful work. No, it is absolutely not the only thing that matters.
I would argue that this is nearly always the case. I don't think people really understand programs that they've only read at more than a very superficial level. This is why I tend to make (temporary) small changes, printlns, etc. when exploring a new code base: it aids greatly in understanding how a program actually works.
And it's even worse (in my experience) with LLM generated code, as it tends not to result in particularly understandable code. It is a lot like LLM generated prose: it often looks entirely reasonable at a surface level, but has a of weirdness/incorrectness hidden beneath the surface. But that surface level makes it very hard to avoid glossing over the details when reviewing the code. For this reason, I personally find it's much more effort to carefully review code than it is to write it.
Humans make mistakes all the time, but their code tends to naturally be structured for human understanding (to some degree based on skill/experience) because they themselves needed to understand it to write it.
I think LLMs are very useful tools, but after quite a lot of experience using them, I think it's generally better to use them as a sounding board, or to help you get unstuck or remove points of friction. Using them to write all of your code (at least for me) seems like a net negative.
I also think it's extremely easy to overestimate how much time they save. It feels like they're a productivity boost because it takes less intense focus to implement something. But I've experienced several instances where actually writing the code myself would have been both quicker and have resulted in better code.
All that being said, it can also be really hard to not write all of your code with agents once you get used to it. There's also a kind of slot-machine-like effect where you write a prompt, excited for the result, and when it doesn't quite come out right, you think "ah just one more prompt and it'll be good." It's hard to see when you're actually doing it though.
It's also weird to me how much people think typing is what the LLM is replacing. Typing was never the hard part. It's the translation of the high-level idea into an unambiguous process that's hard. That's also the valuable part, that requires thinking through the edge cases and consequences of decisions, and that just gets glossed over when using an LLM unless you rigorously review what the LLM has done.
At the end of the day there's a real tradeoff to be made, and it's worth being conscious of what's being given up.
So, code?
Those costs don’t disappear and it’s truly naive to think they don’t matter. Take security issues, they may arise because what you thinks was the input is merely a subset of the true input range. And the extra possibilities lead to unforeseen behavior.
A lot of programming is about ensuring that the input and the output are the sets defined in the specs. And the rest is that the transition/relation is the right tradeoffs of performance, correctness, and costs.
Instead of using the LLM to create deterministic tools, we are using LLMs to replace them. It's completely backwards and I don't know why people (especially high ranking people in my company at least) seem to think that this is the way forward. No, I don't want a whole CI pipeline that is just LLM prompts. Yes it's very easy, but it's expensive, slow and prone to failure in ways you can't even predict.
Same things like using LLMs for the code review process. What would have been a simple linting rule is now a pass with an LLM rather than using the LLM to create the linting rule, which it is absolutely excellent at creating.
Yes, and we're also seeing lots of companies claiming they're using "AI" and it's just deterministic under the hood.
The agent paradigm will eventually give way to experiences that are a hybrid of deterministic and non deterministic and you won’t even know the llm was involved or visible.
The issue is, they don't want to provide "better" support but "cheaper" support. Imagine a trained agent that understands the big picture. Now imagine a company investing in humans to use AI to retrieve knowledge that the human can easily identify as being relevant or not, and using that knowledge to better aid the customer.
Right now AI is being sold as a "we don't need support personells" instead of "how can we provide better service." For a lot of products, better service will probably not matter as "cheaper" products will win most of the time.
Most people don't want to pay for better. They want to pay the same for something better, which is what companies are not investing their time in figuring out how to use AI properly for I think.
A lot of people want to pay for better, but that is hard. Better is more expensive, most of the time, but being more expensive is no guarantee for being better. It feels like the correlation is very weak. Most expensive products are just expensive, not good.
If there was a reliable way to identify the "better" thing, I and a lot of other people would go for that every time we can.
Instead of refining their approach, or challenging their current knowledge base for discovery of inefficiencies or baseless assumptions, they'd rather hit an "easy" button.
I understand the desire to NOT do work. I understand the desire to spend quality time and free time with family. And I understand the idea that familiarity breeds contempt.
What I don't understand is the willingness to replace a deterministic language/framework/approach with a probabilistic slop machine.
The AI psychosis is a real thing.
Regardless which task is handed to him, he "discusses" it first with Claude and very often comes back with like "The AI said... X"
These people just destroy their ability to read and understand the systems they're working with. I actually see it as them making themselves redundant. Because if you can't understand anything without Claude, and Claude doesn't even give the right answers, then what are you worth?
I bet lemmings are grateful they were left behind.
It beggars belief that people think that they should rush in some uncertain direction, like some drawbridge is going to be lifted the moment people work out what the right direction is. It's utter stupidity.
Of course I will do that, I get paid for doing that.
Most of the times I can convince that AI is not necessary by showing small PoC flow with AWS diagrams of data flows. This works well especially if the ask comes from technical people.
Other times the C-level interjects (CEO, CFO, sometimes even CTO) and demands that AI should be there. I literally had CEOs send me instagram reels of some AI shovel-sellers to demonstrate that I am wrong and AI is the way to go. No point arguing after that because I have no problem implementing whatever AI they want rather than losing a paying project.
Now that’s real value.
These models do not have any experience. They're not sentient. And are in no way capable of being "smart", let alone becoming "smarter".
<b>Included in your plan limits until Jun 22</b> <br><br>Fable takes 2x the usage of Opus.
<b> Switch models when a message is flagged</b><k <br> When safety measures flag a message, automatically switch to a different model to keep chatting. When off, your chat will pause instead. <a href="https://support.claude.com/en/articles/153636
target="_blank" rel="noopener noreferrer" > Learn more</a>
...and this was presumably generated with the flagship model from the world's most prestigious LLM company.Ok wait maybe not the next one but surely the one after!
Hasn’t happened yet and there is no evidence it will.
I’d actually love it if LLMs could skip the slow high level lanaguages entirely and just churned out some weird LLM bytecode that was closer to the metal. I don’t want to read it or understand it at all. Here’s my spec, build it and notify when done. I want to ship stuff not build or dick around with code. Basically like when I go to a shop because I want a table, I don’t care if some carpenter “crafted” it or a machine mass produced and spat it out. It’s cute, but most people just want stuff and don’t care how it’s built.
It's possible to say that LLMs producing code may be the same category of thing, but the non-determinism and ephemerality of it all makes it difficult to imagine.
My job is safe because I’m the only person at the company that actually understands what the actual code is doing and I’m the one that gets the calls at 2am and weekends.
“Weird LLM bytecode”
Why not just generate object code for the target mschine directly?