Developer and refugee from Reddit

  • 4 Posts
  • 329 Comments
Joined 2 years ago
cake
Cake day: July 2nd, 2023

help-circle

  • I actively hate the term “vibe coding.” The fact is, while using an LLM for certain tasks is helpful, trying to build out an entire, production-ready application just by prompts is a huge waste of time and is guaranteed to produce garbage code.

    At some point, people like your coworker are going to have to look at the code and work on it, and if they don’t know what they’re doing, they’ll fail.

    I commend them for giving it a shot, but I also commend them for recognizing it wasn’t working.



  • That’s still not actually knowing anything. It’s just temporarily adding more context to its model.

    And it’s always very temporary. I have a yarn project I’m working on right now, and I used Copilot in VS Code in agent mode to scaffold it as an experiment. One of the refinements I included in the prompt file to build it is reminders throughout for things it wouldn’t need reminding of if it actually “knew” the repo.

    • I had to constantly remind it that it’s a yarn project, otherwise it would inevitably start trying to use NPM as it progressed through the prompt.
    • For some reason, when it’s in agent mode and it makes a mistake, it wants to delete files it has fucked up, which always requires human intervention, so I peppered the prompt with reminders not to do that, but to blank the file out and start over in it.
    • The frontend of the project uses TailwindCSS. It could not remember not to keep trying to downgrade its configuration to an earlier version instead of using the current one, so I wrote the entire configuration for it by hand and inserted it into the prompt file. If I let it try to build the configuration itself, it would inevitably fuck it up and then say something completely false, like, “The version of TailwindCSS we’re using is still in beta, let me try downgrading to the previous version.”

    I’m not saying it wasn’t helpful. It probably cut 20% off the time it would have taken me to scaffold out the app myself, which is significant. But it certainly couldn’t keep track of the context provided by the repo, even though it was creating that context itself.

    Working with Copilot is like working with a very talented and fast junior developer whose methamphetamine addiction has been getting the better of it lately, and who has early onset dementia or a brain injury that destroyed their short-term memory.


  • Like I said, I do find it useful at times. But not only shouldn’t it replace coders, it fundamentally can’t. At least, not without a fundamental rearchitecturing of how they work.

    The reason it goes down a “really bad path” is that it’s basically glorified autocomplete. It doesn’t know anything.

    On top of that, spoken and written language are very imprecise, and there’s no way for an LLM to derive what you really wanted from context clues such as your tone of voice.

    Take the phrase “fruit flies like a banana.” Am I saying that a piece of fruit might fly in a manner akin to how another piece of fruit, a banana, flies if thrown? Or am I saying that the insect called the fruit fly might like to consume a banana?

    It’s a humorous line, but my point is serious: We unintentionally speak in ambiguous ways like that all the time. And while we’ve got brains that can interpret unspoken signals to parse intended meaning from a word or phrase, LLMs don’t.










  • I don’t think that comparison is apt. Unlike with music, there are objectively inefficient and badly-executed ways for a program to function, and if you’re only “vibing,” you’re not going to know the difference between such code and clean, efficient code.

    Case in point: Typescript. Typescript is a language built on top of JavaScript with the intent of bringing strong and static type-checking sanity to it. Using Copilot, it’s possible to create a Typescript application without actually knowing the language. However, what you’ll end up with will almost certainly be full of the any type, which turns off type-checking and negates the benefits of using Typescript in the first place. Your code will be much harder to maintain and fix bugs in. And you won’t know that, because you’re not a Typescript developer, you’re a Copilot “developer.”

    I’m not trying to downplay the benefits of using Copilot. Like I said, it’s something I use myself, and it’s a really helpful tool in the developer toolbox. But it’s not the only tool in the toolbox for anyone but “vibe coders.”


  • I’m of two minds on this.

    On the one hand, I find tools like Copilot integrated into VS Code to be useful for taking some of the drudgery out of coding. Case in point: If I need to create a new schema for an ORM, having Copilot generate it according to my specifications is speedy and helpful. It will be more complete and thorough than the first draft I’d come up with on my own.

    On the other, the actual code produced by Copilot is always rife with errors and bloat, it’s never DRY, and if you’re not already a competent developer and try to “vibe” your way to usablility, what you’ll end up with will frankly suck, even if you get it into a state where it technically “works.”

    Leaning into the microwave analogy, it’s the difference between being a chef who happens to have a microwave as one of their kitchen tools, and being a “chef” who only knows how to follow microwave instructions on prepackaged meals. “Vibe coders” aren’t coders at all and have no real grasp of what they’re creating or why it’s not as good as what real coders build, even if both make use of the same tools.