I consider myself a bad hobbyist programmer. I know a decent bit about programming, and I mainly create relatively simple things.
Before LLMs, I would spend weeks or months working on a small program, but with LLMs I can often complete it significantly faster.
Now, I don’t suppose I would consider myself to be a “vibe coder”, because I don’t expect the LLM to create the entire application for me, but I may let it generate a significant portion of code. I am generally coming up with the basic structure of the program and figuring out how it should work, then I might ask it to write individual functions, or pieces of functions. I review the code it gives me and see if it makes sense. It’s kind of like having an assistant helping me.
Programming languages are how we communicate with computers to tell them what to do. We have to learn to speak the computer’s language. But with an LLM, the computer has learned to speak our language. So now we can program in normal English, but it’s like going through a translator. You still have to be very specific about what the program needs to do, or it will just have to guess at what you wanted. And even when you are specific, something might get lost in translation. So I think the best way to avoid these issues is like I said, not expecting it to be able to make an entire program for you, but using it as an assistant to create little parts at a time.
Well since I just program for a hobby, I am able to complete things to the point that they meet my own requirements. If I need error handling for something, I can just ask the LLM to add error handling, it typically works out quite well.