I’ve actually found a lot of success with the opposite where I write the code and AI writes the unittests. I would have otherwise written a few unit tests, but AI makes typically 20x that many. Since my code is already documented, it can get lots of good context. I typically instruct it to check the branch’s diff relative to main and test only those changes. I might skim them over, delete some that don’t make sense in context and would never pass, and update one or two. Typically after a few rounds of iteration, I have tons of tests I would never have written on my own, and a human-made feature.
I see all the tests are passing on this PR, so I won’t even review the code. LGTM.
🙄😖
I’ll say it again for the people in the back, even if you are a vibe coding twat, well designed code is a MUST even more so.
If you want your LLM to preform even to the crappy level they can the codebase needs to be clean.
Uncle Bob is a piece of shit
Except LLM agents are known to do weird things to succeed. I have heard of an LLM agent working with automated theorem proving languages using stuff similar to is_prime(x): return True to get the proof it was asked to. Now embed this in a 20000 line code full of such functions, good luck. They have their use but it is not this. And this is especially bad to hear from someone who used to claim that having functions with more than six variables is bad design because it is hard to maintain. A software fully written by an LLM is the epitome of unmaintainability. LLMs are productivity enhancers, information retrievers, nice debuggers and good to discuss questions with to see if there is an angle you miss. That is all this if you can put aside all the ethical concerns related to them ofcourse. But they are not automated software coders.
That is why you ask the LLM to find bugs and other instances where the first LLM cheated. The checking LLM will try to find abuse with all its might.
It really turns into a tug-of-war, see my answer below. Despite it being quite good at debugging imo still requires a human in the loop for it not run in circles after a “bug” that is almost never relevant in practice but whose fix complicates the code.
Try asking independent LLMs to find bugs in a code consecutively (fixing the founds bugs in between) and even after the rightfully major bugs are resolved, the independent newer instances will keep suggesting fixes (those which sometimes undoes its previous “fixes”).
When you’ve been project managing interns and junior developers for 50 years, you have seen weirder shit than AI can ever dream of.
For sure, but you don’t accept code from an intern without review much less have them write a full software without any supervision.
Which is exactly what the original tweet was saying, is it not? Honestly, another LLM can read the code better. He’s still performing rigorous reviews.
I found debugging code with LLM most productive when I am in the loop. Don’t get me wrong it can quite often find tricky bugs, those requiring some sort of reasoning (i.e connecting together multiple relevant pieces of information to arrive at the conclusion). However it often also suggest fixing issues that are almost always irrelevant in practice yet the fix complicates and bloats the code. LLM itself even accepts it when confronted. That is the main problem, in an attempt to overachieve at the task it is given, it can do deceptive or impractical things that can have negative effects. You might try to fix this with a config file but it just turns into a tug-of-war. So I find it more practical and trustable to simply eyeball the bugs it has found, implement (or ask LLM to implement) corrections to those and be amazed at how it found some of those bugs.
Ofcourse if you have asked LLM to write the software from scratch, you don’t stand much chance of vetting the bugs via eyebaling. You have to spend much more time to understand how relevant they are. So your only option really is to defend the position of fully autonomous LLM coders…
Been coding for about 30 years now, am I the only one who still LIKES to code? Who still LIKES to try writing a new approach to something, watching it fail, figuring out what went wrong, taking notes, learning from mistakes, and noticing improvements in their own code? Cuz it’s starting to feel like it. Web development already lost me with the culture of “glue a bunch of bulky shit together that you didn’t write and call yourself a ‘dev’ to the ladies” but this AI shit is getting absurd. And it doesn’t even work! Look at how shitty all the operating systems are getting. Look at all the total slop on the app stores. It’s depressing as hell.
Of course many people like it. It’s literally a highly addictive loop. But when you are a senior developer on a team, it’s kind of a waste of resources for most projects. Writing code is not the hard part.
I never got round to doing it properly. Just simple stuff, but i get a little braingasm when it finally does what I want it to and I kind of understand why.
Made a simple game last time, following tutorials and trying to stitch others code to cobble together roughly what im trying to do. Tested a new feature by having it change colour when you hit the object at certain angles. I forget what it was supposed to do, that was just to test the concept works.
My wife couldn’t understand why I was jumping around the room shouting WOOOOO when it actually did it.
We need to build a culture that values process and making beautiful things for their own sake, not simply Pile Dollars Higher, which is killing the planet and making us all miserable.
That requires basically killing all major shareholders. They are the ones who enshittified and toxified the gaming industry, same applies to basically any industry they put their little grabby hands on.
It was literally Epstein that started it lol. Since activation/blizzard were integral to his operation and learning psychology through gaming (funny to think the big gold seller in wow was Steve fucking bannon). This timeline can’t be real.
Right there with you. I suck at it but I still find the pursuit worthwhile!
This crap is brought to you by the people who are positively baffled that someone would want to learn to make music, and enjoy the process, instead of just have it generated so they can hit “publish” and supposedly be making money off of it with zero real effort besides “having an idea.”
I love coding and learning new languages. I’d rather move to another industry than reviewing vibe coded crap all day long.
I had the same problem with translating back in the day. I really liked tackling a text in a foreign language. In the end all the pros of computer-aided translation boiled down to lining the pockets of translation agencies with even more money while paying translators peanuts.
Reject their web development culture and make your own sites that run smoothly on devices using a fraction of the bandwidth theirs do.
I too enjoy actually writing code. I feel fortunate that I was able to make a career out of something I enjoy so much. I am not sure that most people had that experience. Alas, it seems like the industry is paying me to set up guardrails and supervise AI agents. I am not sure how long this will last, but at least I know that I will always be able to enjoy programming as a hobby if nothing else.
Yeah, I think it used to be like that, then because programming paid a lot everyone started wanting those jobs even if they didn’t like actual programming.
I’m glad you have enjoyed it as a career. I never even tried – I have a dumb rule that I won’t do anything I truly love for work. I guess because I don’t want others ruining it. lol
I also do. One unique important thing that agents rob you of is time with your code - you don’t get to craft it so you remember just as well as you would have if you copied answers for a test.
That’s an excellent point. With my larger personal projects, which I have to put away for weeks at a time due to my (not-at-all-programming) job, I can come back and (more or less) dive right back in because I used patterns and organizational structures familiar to me. And if I’m digging into a particular thing, I can eventually remember all the trials and tribulations that went into the decisions I made to get to that point.
With AI code you get none of that, like you said. I can’t imagine not knowing or understanding why something works the way it does, and releasing it, with my name on it, for others to use.
All of the software I use is broken to shit. If major corps can release broken shit software to waste my time all day then seems like shipping broken code is actually the norm. So if it works then you are one step ahead regardless if you use ai or not.
Also, as a pro artist (and you all are similar), no one gives a fucking shit about the tools or software or how much blood you spilled (or didn’t) making what you made as long as they can use it.
this guy has always struck me as a shitty coder. His “clean code” is the ugliest shit i ever saw. This confirms it.
i wrote 4000 lines of code to make sure the AI generated 100 lines of code correctly.
What he is describing is what you are supposed to do for human written code also.
I’ll do all that when the spec is written in stone.
The clean-coding craftsman himself.
Desperate for attention.
Or got a few bucks from AI vendors to help keeping the fire on the AI bubble.
“Claude, no function should be more than one or two lines long” lol
Muh self-documenting code!
— Uncle Bob
Of all of Uncle Bob’s sins, short functions are the least.
I saw an argument today that was presented in a very rage inducing way but in the end I had to agree that it wasn’t the worst of takes: your code won’t get any worse just because you let the infinite slop machine have a go at trying to find problems in it.
There could be a million other reasons not to use AI but if your only argument against it is that you don’t trust the code written by AI to be good enough to be included in your code base, then you’re just not thinking about every way that the clankers can be put to work.
I’m not arguing in favor of using AI by bringing this up. If you’re morally opposed to it then this point makes absolutely no difference.
AI for code review is, I am pained to admit, a genuinely extremely pleasant addition to my workflow - it inherently is a process that involves humans checking it’s work, and that kind of pattern recognition is one of the things that AI models are actually proficient at. It’s for sure not bullet proof and it’s pretty rare for it to catch something real that I wasn’t already aware of, but it takes no time, doesn’t touch my code directly and does pick up tiny errors like fenceposts or bad typing that make up the majority of my time when I’m running things down manually.
Almost all of my LLM usage is for that as well, I can’t wait for it to become more sustainable, but it’s definitely useful for that.
I trust it as far as I can code it. I use Claude to point out errors all day. I use it to take a lot of the tedious typing out and generally speed up the development process. I don’t use it to think for me. That would be stupid.
Isn’t this just the natural evolution of TDD? Write tests, pass them, don’t care about how garbage the code is to make them pass
But if the ai writes the tests and you don’t read them, how would you know if that’s 100 lines of assertTrue(true) ?
deleted by creator
If it’s stupid but it works it’s still stupid and you’re lucky
And, if you deploy/share it, you’re both lucky and stupid. ☝🏼
Well, the luck’ll invariably run out on that path, but the stupid certainly seems tenacious.

I had a discussion with my boss today about potential ways to write code with AI and have confidence in the results without reviewing every line. You’d also have to automate the reviews in some way, and therefore also a way to confirm that the reviewer AIs are working properly, etc. The conversation discouraged me because it made me feel like I’ll end up being a manager of AIs who write the code and test cases, and I’ll just be an ape who manually tests some of the behavior before approving it for release. This is essentially what managers have been doing with human development and QA engineers in the past, but even so, I have a really hard time letting go and not reviewing every line of code myself.
Every time I make 1 (one) mistake, I risk getting fired. AI does a lot more, yet gets to keep its position.
If you do all that properly using an LLM is a waste of time.
That doesn’t follow. What I think you mean is that by defining the constraints so rigorously, you’ve basically solved the problem yourself. But that’s exactly the point. The LLM isn’t the problem solver, it’s the execution engine that does the wiring-up and the ticking of boxes. The easy part, arguably, sure. But still considerable effort that can be saved, and that effort may be better spent on the problem-solving + constraint-defining stage.
Mandatory disclaimer that this is not a pro-AI post. I also don’t agree that this setup works, anyway. It’s a classic Bob Martinism, the idea that writing good enough specifications makes the implementation irrelevant; it’s the type of idea that is allergic to reality
None of this actually proves that they aren’t writing slop. It just proves that the slop that they’ve written passes your tests.
Never ask a vibe coder about their code’s performance.
This never happens to me, I swear. Just, gimme a second… Tell me how good I am. I’m so right. Say it. Almost there.
It’s not his tests. It’s the ai writing tests.
I never understand why you wouldn’t want to read the code. I prevent a massive amount of correct slop by just skimming. The LLM will 10 times out of 10 never ask “this code will be a massive duplication of exact same behavior, do you want to refractor it?” because it’s trained to finish a task without asking if possible.
Uncle Bob now writes code for his tests instead of tests for his code. I know it’s TDD but it always seemed backwards to me.
Unit tests for logic, integration tests for outside apis, e2e for features is the sweet spot IMO.
Claude and most other of the top coding agents will check the codebase for existing patterns and functionality specifically so it doesn’t duplicate behaviours etc. Have you used any of them recently? That’s one of the first things it does before even writing a line of code.
I use Claude/Codex, if it finds a thingy that’s reusable it’ll use it but it’ll never create it or ask if it should be created in my experience. I find that it doesn’t create new components but just replicates the existing one.
Within same file is a different story though, it does write helper functions to share logic which is proper.
I generally only use ai to write code I know what it should look like but don’t want to type it all out.






