When I first started programming at a young age, it was becuase it was fun. There was something actually magical about being able to create something from nothing, just thoughts turning into something you can interact with and share with others.
There's joy in learniing new concepts, joy when something finally clicks and makes sense to you, joy when you help someone with code you'd wrote.
That's what programming is about.
Now, you watch people describe what they want to AI with thousands of softwares, copy and paste and output, and call it "development". It's tiring.
## Lack of Soul
Most people can immediately tell when software has been vibe coded. There's no soul, no human fingerprint, no evidence that someone actually cares about the problem they're claimiing to solve.
It's like looking at a drawing that was fully traced by someone else. While it's technically "correct", it's completely hollow. It may work, but there's no one behind it. There's no struggle, and therefore no learning.
## You're not learning anything
When you let AI solve a problem for you, or asking it to implement a new feature for you, you're robbing yourself of the feeling.
You spend hours going down insane rabbit holes, documentation, etc. to solve a tedious problem. Struggling this way is how you actually learn, how you develop your problem solving ability, questioning if one approach may be more suitable than the other. Again, you're never thinking about the issue.
## Technical Debt
AI doesn't know everything about your codebase. While you may be able to provide it with rules, context, etc, it doesn't know the full story.
Generated functions are often completely foreign to everything else in your codebase. It creates inconsistent style, etc that fits in with nothing else. AI won't know that you changed something to avoid a specific issue, or that a previous implemenation caused problems.
You end up with a codebase that looks like it was written by a bunch of strangers that have never spoken to eachother.
When you solely rely on generated code, and it breaks, which it eventually will, you're stuck debugging code that you do not understand.
## It's Mediocre
LLMs are trained on millions of line of publically available code, it just outputs statistical averages of what code for a specific function may look like. But great code isn't average.
Great code is thoughtful, it's optimized for your specific use case, it makes sense, it should explain itself to anyone looking at it for the first time.
Generic solutions that work aren't great, code that technically functions but isn't elegant isn't efficient or maintainable. It's mediocre.
## "Shipping Fast"
Everyone states to just "ship fast" and release stuff, rather than understand what you're actually sharing. You will not keep a traction, and you definitely won't keep a solid userbase.
You're trading the joy of creation for the hollow satisfaction of just completing a task. You're choosing to remain as skilled as you are today instead of learning and growing. You're building ontop of foundation you don't comprehend and just pray it all holds together.
"Vibe coders" are not developers. They're self-proclaimed "prompt engineers" with an ego.