Disagree with so many assertions put forth here. You don't _have_ to turn you brain off when coding with an LLM. It's not some intelligence dementor. If your brain turned off while you were vibe coding thats honestly just a you problem and I wish everyone would stop boogeymanning an obvious improvement in the ability to better yourself just because a lot of people don't choose the betterment route.
I've never been more informed or understood more about my code, pipelines, and stack than now- and its 100% due to AI reasoning about my projects, and me making an effort to learn.
The people struggling with this most are also the ones that never got to grips with human delegation either.
At least in my circle it's the classic leads/seniors (that predate the scrum "everyone's the same" thing) that are managing to get the most real mileage out of this.
But when you lead there’s a level of trust in the people who are going to implement. You may still have a high level view of what’s going on, but that’s different from sweating the details. It also is different from bottoms up building those details where consequences become clear in thought.
I’ve noticed the pressure to keep velocity and move forward means I’m less sure of those details compared to before. LLMs are also inconsistent in the work they do - some of it is brilliant, other parts are idiotic. It’s totally different than what you’d get when leading humans.
> But when you lead there’s a level of trust in the people who are going to implement.
"Trust but verify". This is why you have QA processes, testing, checklists etc. All the sanity checks that got thrown away in the web tech rush pre-AI.
You state this as if the only way you personally would manage this would be to craft each line yourself after deep contemplation, which may be true for you.
But it's not a universal at all. You have to apply engineering thinking to human and LLM organization, and part of the damage caused by scrum has been to ignore this entirely. How can you produce a system where you can bound the output to be what is understood? It must be possible because managers all over the earth do it all the time.
This is like saying if you stop exercising just because you are driving everywhere then it is a you problem. On an individual level it may be useful advice, but on a societal level we see how it plays out — rising obesity rates and children shut in bedrooms with their screens. It turns out if you stop getting exercise from your daily routines, many people will just not get any exercise at all!
Of course you can make a conscious effort to keep using your brain while you vibe code. But if you have to consciously exercise your brain then it means the people, who are lazy on average, will just not do that and let their thinking deteriorate instead. We already see what happens if we let students "learn with AI." It turned out they would rather just let AI do their homework than become more informed about their course material. I don't see how software engineering will fair any better.
> You don't _have_ to turn you brain off when coding with an LLM. It's not some intelligence dementor. If your brain turned off while you were vibe coding
You have too, because that's the definition of vibe coding. If you use an LLM to assist you, but still keep your brain on, that's not vibe coding.
That's the definition I am aware of, yes. It's also in the term, that you let a vibe (a force coming from the outside) decide what your work lead to, as opposed as to deciding where it should arrive at and leading into that direction.
> I've never been more informed or understood more about my code, pipelines, and stack than now...
Would you mind clarifying if this includes code, pipelines, stacks, etc... on which many other people are simultaneously working on in a group setting? Or are these all things that you alone are working on as an individual?
My experience has been that AI makes me tremendously more productive as an individual working alone. Put 20 people (all empowered by AI) on a project however, and it quickly falls to shit.
I have not worked on a project with 20 AI-assisted contributors. I have worked on a team with 4. While smaller, I can already see that the code churn, and conflict resolution is more a kin to a larger team. However, we also have been introspective about how we can interoperate with these new disruptive tools -- ritualizing the LLM's ability to create and maintain documentation and perform code reviews has been indispensable. Perhaps 20 on a project is unsustainable, and even unnecessary.
I've running local models; before having a coding harness, i'd basically do the same misteps the AI does; add the same logging lines, and trace with the errors are, etc. This was exhausting so no docs and tests were rarely if ever created.
Now, to actually get the AI to do anything complex, it's basically required to both write docs and write tests because solidifying behavior only works when there's AI tests it can run to verify some behavior I've verified once.
Then there's things I'm never going to remember the AI had to do; recenly it was "blitting" to /dev/fb0 and it was trying to remember which encoding was which and what order, etc. Things I simply do not want to have to get a detail account of nor is it something I need to remember above the statement "some video drivers have their own RGB, BGR encoding standards" and "an image has a bit depth and size" etc.
These things I would have learned doing it myself, but I would also had to learn where it all breaks and how to interoperate between pillow and video drivers, etc. If I ever do this again, i'll still point the LLM at it with or without this library, and it'll do the same abstract reasoning.
So my knowledge is compact because I don't need to know the implementation for this video display code; I just need the tests and docs and I'll point the LLM at it if I need to extend it.
You're not wrong, but there are levels to understanding.
For example, when studying maths or physics, it is very common to feel like you've understood everything, until you get to the exercises, and need to apply that understanding, and it's only then that you consolidate the knowledge and begin to truly understand in depth.
I like AI enhanced coding, but I do sometimes worry that we're not getting enough of that depth anymore.
Even at a basic level when asking the AI how to do something in a new language, sure it saves time, but I no longer have to manually scan documentation and get the incidental discovery of "oh, that function also exists, cool" which then sticks in my memory for later.
It's like using SparkNotes for classic novels, there's value in the friction of having to wrestle with the source material yourself. Whether that's more valuable than what the AI brings to the table I'm not sure yet.
You're technically right on your first point, but I think this is missing a broader issue... this entire technology incentivises its users to put as little effort (and cognitive effort, at that -- so, thought) as possible to go from a vague idea of something they want to a somewhat-working thing. That's how it's being sold, that's how it's being marketed, and that's how it's arguably being built from an interface point-of-view.
Is it possible to use it in a more involved way? Certainly. I try to do that. But it's challenging, because ultimately even taking a more collaborative approach, this thing puts out a lot of slop, and then I have to deal with going over the output and just spending most of my day in code review mode vs an author that doesn't ever learn from feedback.
The most frustrating thing for me beyond the feedback black hole is that when things do inevitably go wrong, trying to point out the concrete issue and instructing the LLM to do better around it is challenging; a lot of the time directives (even those in a global CLAUDE.md!) are just ignored either outright or as the context grows, or fail to be passed down to subagents; negative prompts are discouraged because of the pink elephant effect, so I have to jump through hoops to try and frame a "never do $thing" constraint as an affirmative prompt (which is then often ignored). That aside, english is a godawful language for specifying things compared to programming languages. It's just a really frustrating experience overall.
I agree, so many things to disagree in the article.
However, I think you are missing that people are lazy. We all are to some extent, some more than others. Putting effort in doing something, well, takes effort. In my experience most people given the opportunity to do a mediocre job turning their brain off or an excellent job at the expense of great brain effort, they would take the former. And this is happening left, right and center now with LLMs.
And the skill atrophy is real, or at least, I am witnessing it real time on a bunch of coworkers.
I agree with you, you don't HAVE to turn your brain off and produce slop, but people do. And at scale, it diminishes greatly the impact of the self-improvement that you, or a minimal subset of developers are doing.
> If your brain turned off while you were vibe coding thats honestly just a you problem
No. There are multiple studies showing that skills atrophy is an actual thing. If your brain does not turn off while you are vibe-coding, keep it up and it soon will.
I never said you have to turn your brain off to feel the limitations.
Actually, for more complex work I think it's pretty common to spend a long time crafting some elaborate prompt, and then arguing with the agent for 10-20 turns, getting a "passable" plan, accepting it then arguing with the agent every step of the way because it's doing it wrong. It's incredibly frustrating, even with models like Fable.
Even after that, I'll often find out during later sessions that some feature that was supposed to be deprecated was actually silently left in "because I wasn't sure you wanted it completely gone" or something.
I agree that exploring a codebase through prompts is actually quite nice! But the mental model you get from that is almost always warped - you have to supplement that with reading the code, where 9 times out of 10 you will find some kind of discrepancy that you're unhappy with.
Your experience is night-and-day from mine. Both myself and the AI correct and remove each other's gaps in understanding. There is never what I would call arguing. Disagreements are resolved by back and forth discussion and reaching consensus.
This sounds like not the best workflow. If your prompt is that long, you may not be spending your time very efficiently.
Splitting problems into smaller problems is huge. You want a concrete idea that you still own. Only tell an agent to do something you know it can nail - this will likely be one subsystem. The subsystems and how they talk is on you.
I agree, I tend to give a high-level concept for what I want done first, and then break it into smaller tasks. That said, there's almost always a misunderstanding within the smaller tasks anyway, which I have to test to find out about, then ask the agent to fix.
This does not match my experience at all. I use Fable as an orchestrator, and describe the end goal I want to achieve. It investigates the current state of affairs, and determines the smaller work units needed. We discuss each one, and eventually ticket it out in Linear. By that point, each ticket has all the relevant details, scope, decisions and acceptance criteria.
Then I have it write prompts for implementation agents based on the ticket. These agents are almost always Opus, except for the most complex issues. The prompts contain broader contextual details (like what other tickets might be worked on in parallel, the boundaries, operational/environment constraints, and so on). Each implementation agent starts in plan mode and uses a skill I created called "super plan". Super plan has the agent write the plan and then have it adversarially reviewed by three subagents, and hardened based on their feedback. I then read that plan and greelight it. Once the agent is done with the implementation, it then uses three subagents to do a code review of different aspects (like test quality, regression risk, security, etc.) and incorporate the changes. Then it does a live QA in the browser (if there are UI changes) to make sure the feature has good UX and the UI works as expected at different breakpoints and so on.
Then the Fable orchestrator does one last code review and gives a ship/no-ship verdict, along with a 1-10 rating.
This works incredibly well, and is almost completely hands off. I make all the major decisions and review the results. I never find myself "arguing" with the orchestrator. I might sometimes get frustrated at the implementation agent but that's mostly for UI fidelity issues and honestly pretty rare these days.
So like I get what you're saying but an LLM helping you code is just a personal search engine/autocomplete.
"Vibe coding" to me and others is just going "claude program me a wife that didn't leave with the kids and make no mistakes" and just rawdogging the output.
I scanned the article, never made it to the bottom, didn’t find the point the author was trying to make.
Howabout just learning to code better as a human without using AI. Just like learning a craft. Just refuse to use AI. Not possible because of peer pressure? Well then stop worrying and continue to vibe.
Either stop or stop complaining but don’t make excuses or write long articles that ramble and rant … sorry but I don’t understand what’s so hard about stopping.
It might not be so much of a peer pressure than “industry pressure” soon. You can keep hand-crafting it all you want as a hobby, but selling your crafts will be totally different matter
Industry consists of humans, humans can change this collectively. It's still peer pressure. If you don't resist, don't complain.
You won't be able to sell your craft, correct. That means keep your day job. If your day job requires vibe coding, then that becomes your day job. If you don't like it, quit. Live on the street and by your moral beliefs. Or else, sell your soul.
That's the stark choice that plenty of folks have faced and will face. There is nothing special about being a coder anymore - welcome to the factory floor.
The fear that I have that I end up in a team that don't care that I hand code my stuff and let their shit everywhere in the code, so that hand coding isn't possible anymore in a team. It's the same with frameworks. Building a webinterface with a framework is really easy, but the result is just bullshit compared to plain php. It looks good, but your load und wait time goes straight up.
Plenty of people don't care, they don't care because they don't like their boss, they don't like the company, they don't like the product, they don't like themselves. AI and vibe coding is just another excuse.
Professionalism and being a professional means accepting the situation and getting on with the job.
After all, that's why folks get paid: to forget the pain of being stuck in a shit job, eight hours a day, fives days a week (if not more), until they're 65 - 9 to 5, to 65 - 925265, I use that as my passcode just to remind myself.
Man, it's wild how I have no original thoughts. I've been pulling on this thought this morning, complete with checking in on how CodeSpeak and Tessl are doing.
> spec-kit created a LOT of markdown files for me to review. They were repetitive, both with each other, and with the code that already existed. Some contained code already. Overall they were just very verbose and tedious to review. [...] To be honest, I’d rather review code than all these markdown files.
The hardest part of any of this extraction is that modern code is already an extremely dense representation of how the computer should work. You mostly can't change the code without changing behavior.
I bet Scryer works for his use case, and it's a joy to dogfood. I also bet it fully breaks down the moment a 2nd developer, who cares about different things, joins the team.
>Writing code by hand will always be around for bespoke and novel, complex work.
That sentence is probably the key.
There is zero chance of this stopping overall.
Much like with artists 90% of the commercial stuff - copy/ads with generic guy in suit picture - will be AI that is "good enough".
Less concerned about the code quality and more the labour market dynamics. If this goes anything like translation & creative space did then there is going to be a brutal shakeup where competition for remaining "real" seats gets intense
> Engineers can finally address security and tech debt!
I’ve been gradually moving test coverage up, updating packages with CVEs (even if in some cases it’s more like a migration), fixing more bugs, writing load testing solutions, fixing badly made architectural choices and recently even migrated a codebase away from Oracle onto PostgreSQL and figured out some pretty good settings for the DB itself with the aforementioned test tool. Oh and introduced Testcontainers to actually do proper DB tests.
None of this would have happened without agents that churn even while I sleep, but somehow that is still more work cause I have to iterate on their output a lot and come up with additional ProjectLint rules whenever something new comes up. It’s like burnout². Obviously I also bear the blame when the slop inevitably goes wrong despite efforts to keep it manageable, so maybe touching nothing would be better.
That is what I have learned over the last year. I still only have so much mental bandwidth. I can definitely do more now, but I have become relatively disciplined about what I nudge along each week with agents and it's okay if it doesn't happen in 2 days or 3 days. The efficiency gains are there. Agentic work is horrible for stealing our attention and the way it encodes in our brain as unfinished threads that occupy mental bandwidth. I keep it all in tasks now like everything else. Even "Go prompt agent X.". I have several projects I just prompt once a day with a thinking agent. And I only work on things that have some meaningful result driven outcome that aligns with my overall goals. No more "I am doing this because I can projects" or if I do start those they are much smaller and constrained. It helps. I still feel like I could be doing more, but I think it is a fundamental misalignment of how agentic workflows hijack our brain's reward system and I am extremely cautious about it now.
> Much like with artists 90% of the commercial stuff - copy/ads with generic guy in suit picture - will be AI that is "good enough".
Eh, wouldn't be sure. Every time I see slop in such a context, it makes my day worse. And usually ensures I wouldn't go to that business, or at least unconsciously biases me against it.
This piece is more thoughtful than the title initially led me to believe. However, I feel like it's sort of like advocating for us all being able to read/write binary (using a bit of an extreme to prove a point). While there might certainly be benefits to understanding less abstract layers, I don't think it's necessary or even necessarily helpful. That said, I don't think the answer is "turn your brain off completely" but I think that there should be tools that facilitate thoughtful ways of vibe coding with natural language, which is basically another abstraction layer from writing the code and tests yourself.
I'm making the case that we should make tools for the higher abstraction, not a lower one. You said it yourself: why should we read/write binary? We don't, we shouldn't. It might be useful in some cases, but working with assembly is much easier.
Intent is more natural to us than code, for the same reason assembly is more natural than binary.
I think a big issue is that the companies pushing AI want it to replace people entirely. So the software around it is designed with that mindset.
I'd really like something that works more like pair programming. Where you share an editor session with the AI, and it's much more interactive. eg. It says "I'm thinking about doing X here, what do you think?". Then you give a response and it continues. Or you can see it doing something silly and immediately stop it and correct something either with a prompt or by manually editing yourself, before letting it rip again. Or just ask it "why are you doing it that way?". Maybe with some control over the speed it's going, for when you feel confident about what it's doing.
Claude has made some positive changes over time where it asks you more when there are different approaches it can take. But I feel like I'm not being brought along with my mental model as much as I would like. A lot of the time it spits out a whole pile of code and then I have to go and build up the mental model after the fact, and correct a lot of what it's done.
The current approach is good a lot of the time though, when you're not really changing anything architectural and just want it to bash out code while you do somehthing else.
Economics will dictate that working bespoke on coding will simply not be profitable anymore. Great article but there is no stopping this trend at this rate.
I would guess that most HN users are employees. By far the largest dictator of your day to day life is your employer. Sentences such as this one from the article
"Hopefully, many developers will slowly rediscover their love for programming when they can apply it to problems that actually interest and challenge them"
Simply to not understand this dynamic. The economics will dictate what will happen and NOT much else.
If things were based on pure economics in a vacuum, there would be no good SF based tech jobs. There'd be middling salaries for developers across the country, and probably actually the bulk of the work would actually happen in say latvia or laos. Instead, we have weird layers of cultural assumptions that keep many of these jobs onshored to the bay area in particular, for no reason at all really. Even with the AI tidal wave, companies still want butts in seats in SF for some reason.
I'm not saying it's economics in a vacuum. I'm suggesting that it is LARGELY economics.
> There'd be middling salaries for developers across the country, and probably actually the bulk of the work would actually happen in say latvia or laos
Yes that's what happened and it's called offshoring. If you're in the US or Europe it happened to manufacturing too. It's in China for economic reasons. That doesn't mean there isn't any manufacturing going on in your country.
That is, assuming you believe "vibe coding" is actually more efficient than hand-coding. If your users simply accept bugs that can't be fixed because doing so would lead to a day-long discussion with your AI, then it is true. Human language is one of the worst ways to describe software.
IMHO and IME, we need new programming language(s).
I started on Pascal and C/C++. Then I moved to Python. It freed my mind from types, and I was able to think more high-level about the data structures.
After another decade and half, I discovered Haskell. Turns out the types were not the problem; the lack of proper type inference was.
So it turned out to be a usability issue of C/C++. Writing type explicitly everywhere is just bad UX.
My point is this. LLM's allow you to program and reason about code in a natural language. It clearly has some advantages over programming in traditional programming languages. But it has a significant disadvantage that natural language is not semantically sound. (And as a result, you get what people incorrectly call indeterminism of LLMs.)
I believe we need better programming language in which we can also express metalogical properties of programs, as if we expressed them in natural language, but with soundness guarantees. This new language would then become the new source code.
This language needs to have primitives for fuzzy and modal logic, and there need to be some algorithm that can typecheck (check if the statement is consistent) and type-infer (if the statement is inconsistent or ambigous, fill-in the likely parts, possibly interactively).
We know such a formal system must exists, because a very close variant of it has already been implemented (or discovered?) within LLM.
We essentially need to discover true metaprogramming - writing programs that manipulate programs. From Curry-Howard isomorphism, we know there is analogy between program execution and reasoning. So it is time to start using same language for both. (I am looking into using Triage Calculus for this.)
I enjoyed the article, I think you're right that the tooling to get out of making things too automatic is definitely lacking. AI coding is cool if you have something in a certain valley of simple enough for it to get but not so complex or low level that it will screw it up, but commercial models don't really do the following yet:
1. malware development
2. anything security tooling related
3. reliable assembly
4. reliable and somewhat more obscure programming languages like blockchain programming langs or distributed programming with elixir
I feel that https://maldevacademy.com has been keeping my skills relatively fresh, it's fun in the discord where sometimes we try using models to do this stuff and it just chokes
On the other hand I "vibe coded" (Although I've heard more nuanced distinctions in terminology here about doing it right rather than just letting it rip automatically or without much thought) a fairly large and profitable software project in about a month recently that would have probably taken me over three if I hadn't used claude.
In the end and as you mentioned, these things are just tools and if you're busy complaining about them rather than finding what they can't do yet and having a bit of fun with working within those limits, you might be able to find a good niche to make better use of your time and avoid the skill atrophy
Thanks, yeah I just went with the most controversial term as the catch-all which just means: you prompt an agent as your core workflow.
For me as well, I do projects for clients that would have taken me months, and I deliver them in a fraction of the time. It's amazing and totally helped cure my burnout (which I had for over a year before I found Claude Code.)
While my CONTEXT.md's are a hodgepodge of general ideals and specific do's/dont's, my AGENTS.md are demonstrable.
I can instrument to observe the instructions being executed.
* Delegation
* Execution (better rules than rtk)
* Response
* Logging
When I want to turn off the printf style confirmations, manually editing saves the tokens. Using RFC 2119 (language) doesn't make a substantial difference. I'm in search of something better.
For many people coding isn't just a means to an end but a pleasure in itself. Coding by hand, the raw intellectual challenge to my mind has been one of the greatest 'jobs' you could have. Earning money for what is essentially 'solving puzzles' is amazing!
With vibe coding that's out the window and a race to the bottom to remove as MUCH intellectual human input is at hand. To reiterate Human intellectual input is what AI is attempting to do away with or reduce as much as possible.
That's pretty much how I feel. I've been extremely lucky in that, for the last ~15 years, work often hasn't felt like work as a result. I also think I was (am?) _average at best_ but continually saw improvement, found new tricks, etc. and was kept engaged.
If I wind up stocking shelves at Tractor Supply, like I keep threatening to (because I have no interest in feeding bots with markdown), I'm sure I'll be in for a rude awakening.
Anecdotally at least I've seen devs who have checked out by completely flipping careers or doing something zany such as living off grid. Unfortunately like most things your options are limited to your economic circumstances.
I am much later in my career, and I have established many skills that have atrophied which I have restored in need and/or desire over a span of decades. I think it is fair for younger people to be much more cautious with AI assisted coding tools (e.g. Claude Code, Codex) and their impact upon their skills. But understand that some atrophy may not be bad and simply a symptom of focus. If you want to stay a master juggler, keep juggling. But you can also ask yourself, do I need to be master juggler? You will still be able to juggle regardless.
True vibe coding (as in, using an LLM to write software end to end without understanding what's going on under the hood) just doesn't work in the long term, so it will likely stop itself. No one who's serious creates software this way.
That said, I don't understand why it seems like it has to be all or nothing. Just architect the software yourself and tell the LLM to modify small chunks of code that you understand. Or maybe not even small, but a body of code where you understand what it does and can understand what the LLM is changing. Don't tell it to implement a feature - tell it to implement a function. If you can't do this, then you're a wannabe who's using LLMs to LARP as an actual programmer.
It is not always the case that there is a way to adapt to a certain thing.
How can the immense investment in AI pay off? AI is doing away with human intellectual input.
There are 25 million developers globally, AI efficiency may mean in the future we need only 15 million. That 10 million saving is the return on investment. Those 10 million developers aren't adapting sorry.
Disagree with so many assertions put forth here. You don't _have_ to turn you brain off when coding with an LLM. It's not some intelligence dementor. If your brain turned off while you were vibe coding thats honestly just a you problem and I wish everyone would stop boogeymanning an obvious improvement in the ability to better yourself just because a lot of people don't choose the betterment route.
I've never been more informed or understood more about my code, pipelines, and stack than now- and its 100% due to AI reasoning about my projects, and me making an effort to learn.
The people struggling with this most are also the ones that never got to grips with human delegation either.
At least in my circle it's the classic leads/seniors (that predate the scrum "everyone's the same" thing) that are managing to get the most real mileage out of this.
But when you lead there’s a level of trust in the people who are going to implement. You may still have a high level view of what’s going on, but that’s different from sweating the details. It also is different from bottoms up building those details where consequences become clear in thought.
I’ve noticed the pressure to keep velocity and move forward means I’m less sure of those details compared to before. LLMs are also inconsistent in the work they do - some of it is brilliant, other parts are idiotic. It’s totally different than what you’d get when leading humans.
> But when you lead there’s a level of trust in the people who are going to implement.
"Trust but verify". This is why you have QA processes, testing, checklists etc. All the sanity checks that got thrown away in the web tech rush pre-AI.
Sure, but that doesn’t mean you understand the details of implementation.
You state this as if the only way you personally would manage this would be to craft each line yourself after deep contemplation, which may be true for you.
But it's not a universal at all. You have to apply engineering thinking to human and LLM organization, and part of the damage caused by scrum has been to ignore this entirely. How can you produce a system where you can bound the output to be what is understood? It must be possible because managers all over the earth do it all the time.
This is like saying if you stop exercising just because you are driving everywhere then it is a you problem. On an individual level it may be useful advice, but on a societal level we see how it plays out — rising obesity rates and children shut in bedrooms with their screens. It turns out if you stop getting exercise from your daily routines, many people will just not get any exercise at all!
Of course you can make a conscious effort to keep using your brain while you vibe code. But if you have to consciously exercise your brain then it means the people, who are lazy on average, will just not do that and let their thinking deteriorate instead. We already see what happens if we let students "learn with AI." It turned out they would rather just let AI do their homework than become more informed about their course material. I don't see how software engineering will fair any better.
> You don't _have_ to turn you brain off when coding with an LLM. It's not some intelligence dementor. If your brain turned off while you were vibe coding
You have too, because that's the definition of vibe coding. If you use an LLM to assist you, but still keep your brain on, that's not vibe coding.
> because that's the definition of vibe coding.
That's _your_ definition of vibe coding.
> Karpathy described it as a form of coding where you "fully give in to the vibes, embrace exponentials, and forget that the code even exists"
If that's not "turning your brain off", what is?
That's the definition I am aware of, yes. It's also in the term, that you let a vibe (a force coming from the outside) decide what your work lead to, as opposed as to deciding where it should arrive at and leading into that direction.
What is your definition? Is there any difference between AI assisted development and vibe coding to you?
Feels like a No True Scotsman fallacy.
How so?
The property Scotsman is existing a priori and then a causality to behaviour is assumed. But here the term is defined by behaviour.
There's multiple ways to program using LLMs, so using different words for different styles is a useful distinction.
Of course, you absolutely can build a No True Scotsman argument on top of that distinction, but I don't think that's what GP was doing.
By that logic every appeal to the truth is a No True Scotsman fallacy.
I agree. It’s actually more exhausting in some ways.
> I've never been more informed or understood more about my code, pipelines, and stack than now...
Would you mind clarifying if this includes code, pipelines, stacks, etc... on which many other people are simultaneously working on in a group setting? Or are these all things that you alone are working on as an individual?
My experience has been that AI makes me tremendously more productive as an individual working alone. Put 20 people (all empowered by AI) on a project however, and it quickly falls to shit.
I have not worked on a project with 20 AI-assisted contributors. I have worked on a team with 4. While smaller, I can already see that the code churn, and conflict resolution is more a kin to a larger team. However, we also have been introspective about how we can interoperate with these new disruptive tools -- ritualizing the LLM's ability to create and maintain documentation and perform code reviews has been indispensable. Perhaps 20 on a project is unsustainable, and even unnecessary.
I've running local models; before having a coding harness, i'd basically do the same misteps the AI does; add the same logging lines, and trace with the errors are, etc. This was exhausting so no docs and tests were rarely if ever created.
Now, to actually get the AI to do anything complex, it's basically required to both write docs and write tests because solidifying behavior only works when there's AI tests it can run to verify some behavior I've verified once.
Then there's things I'm never going to remember the AI had to do; recenly it was "blitting" to /dev/fb0 and it was trying to remember which encoding was which and what order, etc. Things I simply do not want to have to get a detail account of nor is it something I need to remember above the statement "some video drivers have their own RGB, BGR encoding standards" and "an image has a bit depth and size" etc.
These things I would have learned doing it myself, but I would also had to learn where it all breaks and how to interoperate between pillow and video drivers, etc. If I ever do this again, i'll still point the LLM at it with or without this library, and it'll do the same abstract reasoning.
So my knowledge is compact because I don't need to know the implementation for this video display code; I just need the tests and docs and I'll point the LLM at it if I need to extend it.
You're not wrong, but there are levels to understanding.
For example, when studying maths or physics, it is very common to feel like you've understood everything, until you get to the exercises, and need to apply that understanding, and it's only then that you consolidate the knowledge and begin to truly understand in depth.
I like AI enhanced coding, but I do sometimes worry that we're not getting enough of that depth anymore.
Even at a basic level when asking the AI how to do something in a new language, sure it saves time, but I no longer have to manually scan documentation and get the incidental discovery of "oh, that function also exists, cool" which then sticks in my memory for later.
It's like using SparkNotes for classic novels, there's value in the friction of having to wrestle with the source material yourself. Whether that's more valuable than what the AI brings to the table I'm not sure yet.
You're technically right on your first point, but I think this is missing a broader issue... this entire technology incentivises its users to put as little effort (and cognitive effort, at that -- so, thought) as possible to go from a vague idea of something they want to a somewhat-working thing. That's how it's being sold, that's how it's being marketed, and that's how it's arguably being built from an interface point-of-view.
Is it possible to use it in a more involved way? Certainly. I try to do that. But it's challenging, because ultimately even taking a more collaborative approach, this thing puts out a lot of slop, and then I have to deal with going over the output and just spending most of my day in code review mode vs an author that doesn't ever learn from feedback.
The most frustrating thing for me beyond the feedback black hole is that when things do inevitably go wrong, trying to point out the concrete issue and instructing the LLM to do better around it is challenging; a lot of the time directives (even those in a global CLAUDE.md!) are just ignored either outright or as the context grows, or fail to be passed down to subagents; negative prompts are discouraged because of the pink elephant effect, so I have to jump through hoops to try and frame a "never do $thing" constraint as an affirmative prompt (which is then often ignored). That aside, english is a godawful language for specifying things compared to programming languages. It's just a really frustrating experience overall.
I agree, so many things to disagree in the article.
However, I think you are missing that people are lazy. We all are to some extent, some more than others. Putting effort in doing something, well, takes effort. In my experience most people given the opportunity to do a mediocre job turning their brain off or an excellent job at the expense of great brain effort, they would take the former. And this is happening left, right and center now with LLMs.
And the skill atrophy is real, or at least, I am witnessing it real time on a bunch of coworkers.
I agree with you, you don't HAVE to turn your brain off and produce slop, but people do. And at scale, it diminishes greatly the impact of the self-improvement that you, or a minimal subset of developers are doing.
> If your brain turned off while you were vibe coding thats honestly just a you problem
No. There are multiple studies showing that skills atrophy is an actual thing. If your brain does not turn off while you are vibe-coding, keep it up and it soon will.
I never said you have to turn your brain off to feel the limitations.
Actually, for more complex work I think it's pretty common to spend a long time crafting some elaborate prompt, and then arguing with the agent for 10-20 turns, getting a "passable" plan, accepting it then arguing with the agent every step of the way because it's doing it wrong. It's incredibly frustrating, even with models like Fable.
Even after that, I'll often find out during later sessions that some feature that was supposed to be deprecated was actually silently left in "because I wasn't sure you wanted it completely gone" or something.
I agree that exploring a codebase through prompts is actually quite nice! But the mental model you get from that is almost always warped - you have to supplement that with reading the code, where 9 times out of 10 you will find some kind of discrepancy that you're unhappy with.
Why not optimize that process?
Your experience is night-and-day from mine. Both myself and the AI correct and remove each other's gaps in understanding. There is never what I would call arguing. Disagreements are resolved by back and forth discussion and reaching consensus.
This sounds like not the best workflow. If your prompt is that long, you may not be spending your time very efficiently.
Splitting problems into smaller problems is huge. You want a concrete idea that you still own. Only tell an agent to do something you know it can nail - this will likely be one subsystem. The subsystems and how they talk is on you.
I agree, I tend to give a high-level concept for what I want done first, and then break it into smaller tasks. That said, there's almost always a misunderstanding within the smaller tasks anyway, which I have to test to find out about, then ask the agent to fix.
This does not match my experience at all. I use Fable as an orchestrator, and describe the end goal I want to achieve. It investigates the current state of affairs, and determines the smaller work units needed. We discuss each one, and eventually ticket it out in Linear. By that point, each ticket has all the relevant details, scope, decisions and acceptance criteria.
Then I have it write prompts for implementation agents based on the ticket. These agents are almost always Opus, except for the most complex issues. The prompts contain broader contextual details (like what other tickets might be worked on in parallel, the boundaries, operational/environment constraints, and so on). Each implementation agent starts in plan mode and uses a skill I created called "super plan". Super plan has the agent write the plan and then have it adversarially reviewed by three subagents, and hardened based on their feedback. I then read that plan and greelight it. Once the agent is done with the implementation, it then uses three subagents to do a code review of different aspects (like test quality, regression risk, security, etc.) and incorporate the changes. Then it does a live QA in the browser (if there are UI changes) to make sure the feature has good UX and the UI works as expected at different breakpoints and so on.
Then the Fable orchestrator does one last code review and gives a ship/no-ship verdict, along with a 1-10 rating.
This works incredibly well, and is almost completely hands off. I make all the major decisions and review the results. I never find myself "arguing" with the orchestrator. I might sometimes get frustrated at the implementation agent but that's mostly for UI fidelity issues and honestly pretty rare these days.
[dead]
So like I get what you're saying but an LLM helping you code is just a personal search engine/autocomplete.
"Vibe coding" to me and others is just going "claude program me a wife that didn't leave with the kids and make no mistakes" and just rawdogging the output.
but that's just me.
Howabout: just turn off AI.
I scanned the article, never made it to the bottom, didn’t find the point the author was trying to make.
Howabout just learning to code better as a human without using AI. Just like learning a craft. Just refuse to use AI. Not possible because of peer pressure? Well then stop worrying and continue to vibe.
Either stop or stop complaining but don’t make excuses or write long articles that ramble and rant … sorry but I don’t understand what’s so hard about stopping.
It might not be so much of a peer pressure than “industry pressure” soon. You can keep hand-crafting it all you want as a hobby, but selling your crafts will be totally different matter
Industry consists of humans, humans can change this collectively. It's still peer pressure. If you don't resist, don't complain.
You won't be able to sell your craft, correct. That means keep your day job. If your day job requires vibe coding, then that becomes your day job. If you don't like it, quit. Live on the street and by your moral beliefs. Or else, sell your soul.
That's the stark choice that plenty of folks have faced and will face. There is nothing special about being a coder anymore - welcome to the factory floor.
The fear that I have that I end up in a team that don't care that I hand code my stuff and let their shit everywhere in the code, so that hand coding isn't possible anymore in a team. It's the same with frameworks. Building a webinterface with a framework is really easy, but the result is just bullshit compared to plain php. It looks good, but your load und wait time goes straight up.
Plenty of people don't care, they don't care because they don't like their boss, they don't like the company, they don't like the product, they don't like themselves. AI and vibe coding is just another excuse.
Professionalism and being a professional means accepting the situation and getting on with the job.
After all, that's why folks get paid: to forget the pain of being stuck in a shit job, eight hours a day, fives days a week (if not more), until they're 65 - 9 to 5, to 65 - 925265, I use that as my passcode just to remind myself.
Man, it's wild how I have no original thoughts. I've been pulling on this thought this morning, complete with checking in on how CodeSpeak and Tessl are doing.
I'll add this link to the pile: https://martinfowler.com/articles/exploring-gen-ai/sdd-3-too...
> spec-kit created a LOT of markdown files for me to review. They were repetitive, both with each other, and with the code that already existed. Some contained code already. Overall they were just very verbose and tedious to review. [...] To be honest, I’d rather review code than all these markdown files.
The hardest part of any of this extraction is that modern code is already an extremely dense representation of how the computer should work. You mostly can't change the code without changing behavior.
I bet Scryer works for his use case, and it's a joy to dogfood. I also bet it fully breaks down the moment a 2nd developer, who cares about different things, joins the team.
>Writing code by hand will always be around for bespoke and novel, complex work.
That sentence is probably the key.
There is zero chance of this stopping overall.
Much like with artists 90% of the commercial stuff - copy/ads with generic guy in suit picture - will be AI that is "good enough".
Less concerned about the code quality and more the labour market dynamics. If this goes anything like translation & creative space did then there is going to be a brutal shakeup where competition for remaining "real" seats gets intense
We now have more work, not less. Engineers can finally address security and tech debt! Surely businesses will see the value in that. Right?
> Engineers can finally address security and tech debt!
I’ve been gradually moving test coverage up, updating packages with CVEs (even if in some cases it’s more like a migration), fixing more bugs, writing load testing solutions, fixing badly made architectural choices and recently even migrated a codebase away from Oracle onto PostgreSQL and figured out some pretty good settings for the DB itself with the aforementioned test tool. Oh and introduced Testcontainers to actually do proper DB tests.
None of this would have happened without agents that churn even while I sleep, but somehow that is still more work cause I have to iterate on their output a lot and come up with additional ProjectLint rules whenever something new comes up. It’s like burnout². Obviously I also bear the blame when the slop inevitably goes wrong despite efforts to keep it manageable, so maybe touching nothing would be better.
That is what I have learned over the last year. I still only have so much mental bandwidth. I can definitely do more now, but I have become relatively disciplined about what I nudge along each week with agents and it's okay if it doesn't happen in 2 days or 3 days. The efficiency gains are there. Agentic work is horrible for stealing our attention and the way it encodes in our brain as unfinished threads that occupy mental bandwidth. I keep it all in tasks now like everything else. Even "Go prompt agent X.". I have several projects I just prompt once a day with a thinking agent. And I only work on things that have some meaningful result driven outcome that aligns with my overall goals. No more "I am doing this because I can projects" or if I do start those they are much smaller and constrained. It helps. I still feel like I could be doing more, but I think it is a fundamental misalignment of how agentic workflows hijack our brain's reward system and I am extremely cautious about it now.
I like your comparison. Stock photography is now pervasive, but that doesn’t mean use-specific photo shoots don’t happen any more.
> Much like with artists 90% of the commercial stuff - copy/ads with generic guy in suit picture - will be AI that is "good enough".
Eh, wouldn't be sure. Every time I see slop in such a context, it makes my day worse. And usually ensures I wouldn't go to that business, or at least unconsciously biases me against it.
Hope you're right! Think profit motive and general trend of enshitification will prevail here too though
Good enough is good enough
This piece is more thoughtful than the title initially led me to believe. However, I feel like it's sort of like advocating for us all being able to read/write binary (using a bit of an extreme to prove a point). While there might certainly be benefits to understanding less abstract layers, I don't think it's necessary or even necessarily helpful. That said, I don't think the answer is "turn your brain off completely" but I think that there should be tools that facilitate thoughtful ways of vibe coding with natural language, which is basically another abstraction layer from writing the code and tests yourself.
I'm making the case that we should make tools for the higher abstraction, not a lower one. You said it yourself: why should we read/write binary? We don't, we shouldn't. It might be useful in some cases, but working with assembly is much easier.
Intent is more natural to us than code, for the same reason assembly is more natural than binary.
I think a big issue is that the companies pushing AI want it to replace people entirely. So the software around it is designed with that mindset.
I'd really like something that works more like pair programming. Where you share an editor session with the AI, and it's much more interactive. eg. It says "I'm thinking about doing X here, what do you think?". Then you give a response and it continues. Or you can see it doing something silly and immediately stop it and correct something either with a prompt or by manually editing yourself, before letting it rip again. Or just ask it "why are you doing it that way?". Maybe with some control over the speed it's going, for when you feel confident about what it's doing.
Claude has made some positive changes over time where it asks you more when there are different approaches it can take. But I feel like I'm not being brought along with my mental model as much as I would like. A lot of the time it spits out a whole pile of code and then I have to go and build up the mental model after the fact, and correct a lot of what it's done.
The current approach is good a lot of the time though, when you're not really changing anything architectural and just want it to bash out code while you do somehthing else.
Economics will dictate that working bespoke on coding will simply not be profitable anymore. Great article but there is no stopping this trend at this rate.
I would guess that most HN users are employees. By far the largest dictator of your day to day life is your employer. Sentences such as this one from the article
"Hopefully, many developers will slowly rediscover their love for programming when they can apply it to problems that actually interest and challenge them"
Simply to not understand this dynamic. The economics will dictate what will happen and NOT much else.
If things were based on pure economics in a vacuum, there would be no good SF based tech jobs. There'd be middling salaries for developers across the country, and probably actually the bulk of the work would actually happen in say latvia or laos. Instead, we have weird layers of cultural assumptions that keep many of these jobs onshored to the bay area in particular, for no reason at all really. Even with the AI tidal wave, companies still want butts in seats in SF for some reason.
I'm not saying it's economics in a vacuum. I'm suggesting that it is LARGELY economics.
> There'd be middling salaries for developers across the country, and probably actually the bulk of the work would actually happen in say latvia or laos
Yes that's what happened and it's called offshoring. If you're in the US or Europe it happened to manufacturing too. It's in China for economic reasons. That doesn't mean there isn't any manufacturing going on in your country.
That is, assuming you believe "vibe coding" is actually more efficient than hand-coding. If your users simply accept bugs that can't be fixed because doing so would lead to a day-long discussion with your AI, then it is true. Human language is one of the worst ways to describe software.
IMHO and IME, we need new programming language(s).
I started on Pascal and C/C++. Then I moved to Python. It freed my mind from types, and I was able to think more high-level about the data structures.
After another decade and half, I discovered Haskell. Turns out the types were not the problem; the lack of proper type inference was.
So it turned out to be a usability issue of C/C++. Writing type explicitly everywhere is just bad UX.
My point is this. LLM's allow you to program and reason about code in a natural language. It clearly has some advantages over programming in traditional programming languages. But it has a significant disadvantage that natural language is not semantically sound. (And as a result, you get what people incorrectly call indeterminism of LLMs.)
I believe we need better programming language in which we can also express metalogical properties of programs, as if we expressed them in natural language, but with soundness guarantees. This new language would then become the new source code.
This language needs to have primitives for fuzzy and modal logic, and there need to be some algorithm that can typecheck (check if the statement is consistent) and type-infer (if the statement is inconsistent or ambigous, fill-in the likely parts, possibly interactively).
We know such a formal system must exists, because a very close variant of it has already been implemented (or discovered?) within LLM.
We essentially need to discover true metaprogramming - writing programs that manipulate programs. From Curry-Howard isomorphism, we know there is analogy between program execution and reasoning. So it is time to start using same language for both. (I am looking into using Triage Calculus for this.)
I enjoyed the article, I think you're right that the tooling to get out of making things too automatic is definitely lacking. AI coding is cool if you have something in a certain valley of simple enough for it to get but not so complex or low level that it will screw it up, but commercial models don't really do the following yet:
1. malware development
2. anything security tooling related
3. reliable assembly
4. reliable and somewhat more obscure programming languages like blockchain programming langs or distributed programming with elixir
I feel that https://maldevacademy.com has been keeping my skills relatively fresh, it's fun in the discord where sometimes we try using models to do this stuff and it just chokes
On the other hand I "vibe coded" (Although I've heard more nuanced distinctions in terminology here about doing it right rather than just letting it rip automatically or without much thought) a fairly large and profitable software project in about a month recently that would have probably taken me over three if I hadn't used claude.
In the end and as you mentioned, these things are just tools and if you're busy complaining about them rather than finding what they can't do yet and having a bit of fun with working within those limits, you might be able to find a good niche to make better use of your time and avoid the skill atrophy
Thanks, yeah I just went with the most controversial term as the catch-all which just means: you prompt an agent as your core workflow.
For me as well, I do projects for clients that would have taken me months, and I deliver them in a fraction of the time. It's amazing and totally helped cure my burnout (which I had for over a year before I found Claude Code.)
While my CONTEXT.md's are a hodgepodge of general ideals and specific do's/dont's, my AGENTS.md are demonstrable.
I can instrument to observe the instructions being executed.
* Delegation
* Execution (better rules than rtk)
* Response
* Logging
When I want to turn off the printf style confirmations, manually editing saves the tokens. Using RFC 2119 (language) doesn't make a substantial difference. I'm in search of something better.
[flagged]
vibe coding becomes much more tolerable when you disambiguate your agents with goals, constraints and heuristics up front.
> ... why would we even want to do this manually? All it did was lead to burnout and cynicism.
Speak for yourself. If anything is leading _me_ to burnout, it's this bullshit hype cycle.
For many people coding isn't just a means to an end but a pleasure in itself. Coding by hand, the raw intellectual challenge to my mind has been one of the greatest 'jobs' you could have. Earning money for what is essentially 'solving puzzles' is amazing!
With vibe coding that's out the window and a race to the bottom to remove as MUCH intellectual human input is at hand. To reiterate Human intellectual input is what AI is attempting to do away with or reduce as much as possible.
That's pretty much how I feel. I've been extremely lucky in that, for the last ~15 years, work often hasn't felt like work as a result. I also think I was (am?) _average at best_ but continually saw improvement, found new tricks, etc. and was kept engaged.
If I wind up stocking shelves at Tractor Supply, like I keep threatening to (because I have no interest in feeding bots with markdown), I'm sure I'll be in for a rude awakening.
Anecdotally at least I've seen devs who have checked out by completely flipping careers or doing something zany such as living off grid. Unfortunately like most things your options are limited to your economic circumstances.
This is what happens when you swap gatekeepers for drug pushers.
I am much later in my career, and I have established many skills that have atrophied which I have restored in need and/or desire over a span of decades. I think it is fair for younger people to be much more cautious with AI assisted coding tools (e.g. Claude Code, Codex) and their impact upon their skills. But understand that some atrophy may not be bad and simply a symptom of focus. If you want to stay a master juggler, keep juggling. But you can also ask yourself, do I need to be master juggler? You will still be able to juggle regardless.
True vibe coding (as in, using an LLM to write software end to end without understanding what's going on under the hood) just doesn't work in the long term, so it will likely stop itself. No one who's serious creates software this way.
That said, I don't understand why it seems like it has to be all or nothing. Just architect the software yourself and tell the LLM to modify small chunks of code that you understand. Or maybe not even small, but a body of code where you understand what it does and can understand what the LLM is changing. Don't tell it to implement a feature - tell it to implement a function. If you can't do this, then you're a wannabe who's using LLMs to LARP as an actual programmer.
[dead]
[dead]
[dead]
We can also go back to the telegraph
Vibe coding is the new way forward. Please adapt or you will lose so much
It is not always the case that there is a way to adapt to a certain thing.
How can the immense investment in AI pay off? AI is doing away with human intellectual input.
There are 25 million developers globally, AI efficiency may mean in the future we need only 15 million. That 10 million saving is the return on investment. Those 10 million developers aren't adapting sorry.
> Vibe coding is the new way forward. Please adapt or you will lose so much
This is a reaction to the title, by someone who did not read the article.
Title-vibed comment