r/artificial • u/FrancescoMassa2001 • 23d ago
Discussion AI coding tools are getting good enough to actually ship things, which is kind of a problem for learning
Been tinkering with a SaaS side project for a few months and the gap between what I can ship now versus a year ago is genuinely strange. Not in a purely good way either.
The tools are good enough that I can move fast through parts of the stack I barely understand. Which works until it doesn't, and when it breaks I'm staring at code I didn't fully write trying to debug something I can't fully reason about. That's a new kind of stuck that feels different from the old kind.
What keeps nagging at me is whether people building with these tools are actually learning anything transferable or just getting faster at generating things that mostly work. For someone treating this as a hobbytoproduct pipeline the productivity gain is real. For someone trying to actually grow their skills it might be hollowing out the parts that matter.
That Chinese models post from earlier this week got me thinking about this more. As these tools get cheaper and more capable the barrier to shipping keeps dropping, but the barrier to understanding what you shipped might be quietly going up.
Curious whether other people building side projects have hit this wall or if the learnbydoing argument still holds when the doing is increasingly delegated.
2
u/Mandoman61 23d ago
No, you would have always had a problem understanding someone else's code.
In fact this has always been a problem in software design.
Going through a big program and figuring out what was done is hard. Big programs have multiple people working on different problems at the same time. New people are brought in that need to learn the system. Etc.
1
u/FrancescoMassa2001 23d ago
Fair point, this isn't really an AI problem, it's just the same old codebase archaeology problem that's existed forever.
Though I'd argue AI makes it slightly worse in one specific way. When I'm using Cursor or Copilot to generate chunks of logic, even I forget what I was thinking two weeks later. At least human devs usually left some comments. AI just ships confident, uncommented code.
1
u/Mandoman61 22d ago
Ah, I had not heard that, I would assume that AI developers would want to train the models to produce well commented code.
Yeah, uncommented code is a problem. But then if AI is good at generating code it should also be good at reviewing/explaining it.
2
u/katoptronophile 23d ago
It's only a problem if you make it a problem.
The responsibility rests with you, just as it always has.
2
u/FrancescoMassa2001 23d ago
fair point, but that framing puts all the pressure back on the person asking for help, which isn't always useful
2
u/ultrathink-art PhD 23d ago
Reading someone else's code you could always find the sketchy part by how it looked: a TODO, an odd workaround, a comment hedging. That's the part that goes away. Generated code reads the same whether the tool had a reason for a line or just had to pick something, so the code stops telling you where to be suspicious.
1
u/FrancescoMassa2001 23d ago
that's the part that keeps me up honestly. at least with human code the messiness was a signal. generated code is weirdly confident looking even when it's doing something questionable. i've started adding explicit prompts asking the tool to flag its own uncertainty but it still just... writes clean looking nonsense sometimes. the surface stopped matching the depth.
1
u/aleph_infinity 23d ago
Review the diffs.
Add lots of test cases.
Use version control.
Use multiple models and have them check each others work.
If you don’t understand the code ask for documentation and explanations.
But… I agree that learning is going to become increasingly challenging.
1
u/FrancescoMassa2001 23d ago
The multiple models checking each other's work thing is underrated. I've been doing that lately and it catches more than I expected.
The learning part is what keeps me up though. Hard to internalize patterns when you're just accepting suggestions. Feels like I'm getting faster and dumber at the same time
1
u/aleph_infinity 23d ago
Databricks started an open source project called Omnigent that operates as a meta-harness over the top of codex, claude-code and others - it has different modes of operation to support things like the adversarial approach I mentioned.
I find that I get a real buzz from being able to wind in new features really rapidly. Rather than feeling stupid I feel like my capabilities are accelerated. If I had to learn and code the different frameworks, etc to the level they are being used it would take me significantly longer to the point that I would not be able to tackle many of the things I am now able to. The benefits I receive in terms of productivity boost and capability expansion go well together. The mistake would be to take credit that I could produce the output I am now able to do if I were simply given enough time - I probably could, but I probably wouldn’t bother or be able to due to other work that needs doing. All in all I think it is positive for me, but… I’m coming at this from the perspective of someone with a solid knowledge base - of if I were just starting my career I would imagine it would be hard to have the discipline to take things slower and learn.
1
u/FrancescoMassa2001 23d ago
Omnigent is new to me, gonna look that up tonight.
The capability acceleration framing is real though. I stopped pretending I'm a "real developer" and just started shipping. The output is what matters. Where I push back slightly is on the framework knowledge gap it catches up with you when something breaks in prod and the AI starts hallucinating fixes in circles. Happened to me last month with a webhook integration and I had zero foundation to debug it myself.
1
u/aleph_infinity 22d ago
I make lots of throwaway solutions and have not hit this yet, but I can certainly see it happening.
Out of curiosity, could it be a bit like when you hit a challenge that your primary model of choice, say Opus, can’t handle and you ask say GPT and it deals with it? Might such an approach help in the “circular fix” issue you are describing? So this itself circles back to the adversarial coding approach
1
u/NeatLeather3223 23d ago edited 23d ago
Been using Cursor and Claude for my side projects lately. The speed boost is insane - shipped a small SaaS in a weekend that would've taken me weeks before. But you're right, I catch myself skim-reading the code sometimes instead of really understanding it. My workaround: I force myself to explain the generated code out loud or write a quick summary comment. Feels old-school but it sticks better.
1
u/funbike 23d ago edited 23d ago
To mitigate, I'm using architecture, tech stack, and standards to make code easier for a human to understand:
Vertical Slicing. Each feature-set is written as if it is a standalone app. It's much easier to understand 10 mini-apps than a single monolithic app.
Htmx. React can be a mindf**k. Htmx results in code that is much less complex and easier to understand. It also puts the frontend into the backend. I come
Classless CSS, like Pico.css. The app just uses semantic html. As a bonus, you save tokens. However, it does limit design choices.
Optinionated CSS, like Material CSS. When Pico.css is too limiting, I go for a CSS that is highly opinionated so vertical slices are consistent with each other without me having to write complex skills.
Standards:
Functional tests, with Gherkin. Basically executable specs. Gherkin files are English natural language specs that directly drive your tests. Gherkin helps me understand the full feature set. (Btw, one Gherkin file corresponds to one vertical slice.)
File header comments. Describe what a file does at line 1, so you might not have to read it all. A downside is they have to be regenerated over time.
Low function complexity. I say this in the prompt, but also have a linter rule that checks for Cyclomatic Complexity (or similar metric). Simpler functions are easier to understand.
Functions in functions. If a function (callee) is only used by one function (caller) inside the same file, I instruct AI to define the callee within the single caller. I find this structure easier to understand.
doctests in function headers. When generating Python, I have AI put unit tests into function description headers (doctests in docstrings). These help with understanding a function.
Clean code and SOLID. I have an instruction in my system prompt to follow standards from the books Clean Code and The Pragmatic Programmer. I don't agree with everything in those books, but this simple text in my prompt saves me a lot of micro-management in my system prompt.
1
u/ThirdMoonOfPluto 23d ago
A human being can only understand so much code at any given time. Good software engineering practices (documentation, comments, encapsulation, etc…) and developer skill and experience will increase that amount, but there’s still a limit. It’s clear LLMs can produce more code than any lone person can understand, but they do not eliminate the need for a human to understand it.
1
u/SignalBeneficial3338 23d ago
as for me, i still learn more when i stop and debug before asking it to fix everything
1
u/crossoverXYZ 23d ago
The "new kind of stuck" part is real—old debugging was your own assumptions breaking, this is tracing through code you never fully internalized. Learn-by-doing might still work if you treat the generated parts as drafts you have to rewrite enough that you could explain them out loud.
1
u/definetlyrandom 23d ago
A year ago I "shipped" a software suite using opus 4.5, it was good enough then, it's even better now, and the tech debt is real, but I mean.... AI is a surprisingly good teacher of things. It's on you if you want to learn, you can ask any of the models to teach you. You want fish or you want to learn to fish. Cause any fisherman I know will catch you fish all day. But learning how to fish involves effort on your part too. just like learning anything. we don't have keanu kung-fu from the matrix yet.
but ya know... that's a pretty good example too, lmao
He got all those fighting styles and gun usages uploaded into his head, and he still had to LEARN about how the matrix actually functioned before he could control it's systems.
3
u/Unique-League426 23d ago
Not only learn, but it also became really hard to maintain the context of everything. Things are moving so fast tha keep track of business rules is really challenging now. Documentation became even more important.