I like the concept of "inevitable grittiness"! I think languages like Lean actually do a very nice job of pushing the grittiness out to the boundaries of your program. Everything else can stay pure, and in domains that are amenable to mathematical reasoning (compilers, DSP, etc) it feels like a natural fit. I don't think you have to go all in, either. I ported the compiler project I'm working on from TypeScript to Lean and recently spent a weekend making all the functions total and implementing a few basic theorems. On a basic level it feels like writing Haskell, but there's a lot more room to grow with it.
"you haven’t done any of the hard thinking you would normally do in writing the code yourself"
It's true, I spend less time solving problems that arise naturally from the process of implementation. But implementation errors have a poor signal-to-noise ratio. For every error that exposes a real design problem there are 10 others that involve routine fixes: type errors, scope issues, import resolution, dependencies. There's a common argument I see being thrown around, which is "how will junior engineers develop into senior engineers if they don't get reps in with implementation?" But to me it feels like "programmer" and "architect" are becoming more and more orthogonal as the models improve in capability. If my goal is to be an architect, getting more reps in as an architect is in my best interest, and letting the agents do the dirty work frees up space for me to spend the mental effort where it counts. And anecdotally, the scope of projects I've started taking on has scaled roughly linearly relative to how much work I'm able to delegate, while the mental engagement has stayed constant.
| type errors, scope issues, import resolution, dependencies.
I write code myself and use the LLM to find mistakes then fix them manually. I recommend inverting the conventional wisdom on LLMs:
1. Don't use it to write code. It's a terrible
programmer. But it's an intelligent rubber duck
and a solid analysis tool.
2. Write the code yourself. It'll go faster than
figuring it out as you go along. It's just typing
if you have a plan.
3. Use an LLM to sanity check what you wrote.
It can find potential design issues or future
problems or breaks from convention. Decide based on
your experience how much you want to address these
issues before moving on.
Is this as fast as AI writing the code? Not at first but possibly over time. Maybe faster. Certainly better quality.
Plus you don't lose any of your skills in the process.
You're still doing the gruntwork necessary to keep your skillset.
And the token cost is a small fraction of what it takes to get LLMs to write good code.
> Don't use it to write code. It's a terrible programmer.
I see this sentiment often, and I’m honestly not sure where this comes from, as it’s really not been my experience. I feel like this must come from people feeling threatened and just moving the goals posts, or not knowing how to use the tools effectively.
> I see this sentiment often, and I’m honestly not sure where this comes from, as it’s really not been my experience
If you see people saying it often, but you are convinced they are just feeling threatened, what AI generated software would point to to say, "Look at this! Definitive evidence that they are just coping!"
Well, for one thing, I’d point to all the other anecdotes of developers being made 10x more efficient due to LLM use.
But really I’m just comparing against my personal experience. Once I learned how to use the tools well, and what to expect (and what not to), I’ve found LLMs to be very powerful.
>If you see people saying it often, but you are convinced they are just feeling threatened, what AI generated software would point to to say, "Look at this! Definitive evidence that they are just coping!"
This is a trap. Anyone who answers this will see the goalposts being moved yet again.
95% of our code at a top in market global fintech is now written by agents. We make it write good code, and it does.
I see your sentiment quite often here on HN¹, I'm honestly not sure what kind of experience you may have had with automatic program writers. LLM code absolutely sucks.
1 - I wonder why my other social circles are so different.
I am really curious about this because my experience is completely different. Can you elaborate a bit more on how you use LLM's for coding? Are you doing one-shot coding? Vibe coding (not looking at code)? Small focused one-step-at-a-time with yourself verifying? Anything else?
It's a mistake to let AI write code unsupervised by a human. I tend to let it write code and then iterate on it. Sometimes myself (because explaining would take longer than actually doing it) sometimes I prompt the AI to improve specific points.
30+ years of experience here writing everything from JIT high-performance compilers to professional game engines to mission critical biz servers:
Claude Code is excellent at writing (C++) code. Especially multi-threading code. However I still need to verify everything because it will occasionally make mistakes.
I don’t consider myself an expert, but I’ve been programming for the last 6 years, and of those 6 years I’ve spent almost all my spare time programming during this period except for a 1 year hiatus.
This includes personal projects with a decent amount of users, and 1 sold project. I’m not the best programmer, but I wouldn’t say I’m bad at all.
Question to you, have you actually used a leading model like Fable when it was available? I did. I was seriously impressed.
I’ll be honest I find it hard to take anyone seriously who says they can program better or faster than a model with those capabilities. That has not been my experience.
Architecting - yes people are still better overall. LLMs tend to go with the average middle of the road result. But in terms of output, raw speed, and getting something working? No way am I better than an llm.
Happy to be enlightened and told I’m completely wrong. Maybe I am an idiot. That is a possibility.
But how about I give you a task, and I give Claude that same task, and we compare results against execution speed? I’ll happily be the judge of that.
People are generally bad at judging themselves, and for some reason even worse about judging their agents' output.
I've heard a million people say their LLM workflow produces amazing code. But I have never actually seen the amazing code allegedly being produced. Where are the people saying "I love when my coworkers send me AI-generate PRs"?
that’s like saying a book is only worth reading if each sentence is beautiful
To me I couldn’t care less as long as the overall story is coherent, and I care more about the idea density in the book.
Lord of the rings is a great book because of the ideas, not because Tolkien is the best writer ever.
Same with AI. I couldn’t care less if some of its code is crap, if it is dense with ideas and generally good execution. If it writes crap code sections I can “beautify” myself.
Plus LLMs are only going to improve… they have improved so much since ChatGPT 3. It’s insane.
And the arguments saying they haven’t can’t be taken in good faith
So can just copying from Stack Overflow, or taking from Open Source repos
There have always been reasons why we didn't prefer to do that in the past, but I guess laundering it through LLMs is fine. And that's just the tip of the ethical ice berg
High volumes of unvetted code is a bad practice. If the code winds up working out fine then congrats you won the slot machine. It's still a bad practice and very, very stupid to become reliant on
And by the way, I had been programming for longer than you have before I even graduated high school, if that matters
One of the things I've started doing is to write the high level scaffold myself, create stubs (with comments) and have it fill out the details. I haven't done this for long, but I feel like my mental model of the code rots less, and I can review code faster.
I used to do this in the past, when these models were not all that capable, now there is a huge temptation to leave everything to the model. But long term I lose track of whats going on, and have a hard time even communicating with the model about the changes I want. Just a total decay of my mental model of the system, and it's really hard to recover from that state.
I like to start out by creating the overall structure of my application: the module structure, high level components, feature boundaries. That way these decisions are already made for the LLM, and it can focus on filling in logic within the structure provided.
It works quite well for me, a lot better than when the LLM makes these decisions.
Definitely agree. And once you factor in the review time + time spent fixing LLM bugs, I'm pretty sure this inverted process is actually faster than using the LLM to write code
This is half question, half thought experiment: What exactly is it that makes us think „great, I can delegate coding to the agent, and focus on architecture myself“, instead of „great, I can delegate coding to the agent, and I can delegate architecture to the agent, and I can focus on <third thing> myself“?
And how many levels up can you construct this sentence before things go south?
What I‘m implying with this question is, of course: What makes us so confident that these things are not also better architects than us?
After all there is a huge corpus on how to architect applications correctly, and that’s in the training data just as much as Python best practices and C++ style recommendations.
I'd say this is relative to the novelty of the problem domain. At work I'm often solving problems that have fairly standard solutions, e.g. Python scripts to automate build and execution workflows. For this stuff I'm often happy to delegate architecture, and in general, since I spend a lot of time working with legacy code, the solutions the models develop are both clearer and more maintainable than what was already there. The personal project I'm working on (small research compiler for stateless computation) has sparse precedent, and because of this I spend a lot more time hashing out architectural questions with the models. I think of it as a collaborative enterprise.
You can delegate architecture to agents, as long as you know different architectures and decide which one is the most fit for a given scenario. AI can choose one but it will usually pick the one that is more present in the training corpus.
React + NextJS is a terrible architectural decision for most projects that LLMs recommend all the time.
Business has tried and mostly failed to do this since the beginning of programming. Architects that stop coding long enough tend to become shitty architects as their abstractions increasingly become disconnected from the concrete requirements of the actual problem space rather than the idealized version in their head.
ironically llm prove the its not possible to just think "abstract thoughts" . we cannot remove concrete "implmenation" facts like paris is capital of france and retain just abstract "countries have capitals"
I think the interesting part here is that the black box gives us a starting point. And it's not a true black box: if a model is generating Lean, we can examine the entire source, iteratively refine by refactoring into smaller self-contained units, and the compiler gives us the certainty that our decomposition is correct.