I used to get pretty frustrated when I was learning how to program. I'd change something in one part of my code and something would break in a completely unrelated part. I once told my wife that programming a computer is like changing the windshield wiper in the car... and suddenly the engine won't start.
I have to say, though, that while I'm a pretty awful coder I absolutely LOVE it. Programming is like solving little puzzles, and I love being able to play and tweak the stuff I write.
When I got started in the business over 30 years ago, I taught myself how to program a Commodore 64 in 6502 assembly language. At first, I only learned a few basic commands, but my limited vocabulary really put a damper on what I could do -- then I started to learn other commands and each one was like discovering I had a new superpower.
I remember how excited I was to show off my first assembly language game to an actual programmer. (An "Asteroids" style shooter, as I recall.) He said, "Not bad for a first effort. What Assembler did you use?"
I said, "Sorry... Assembler? What's that?"
With a strange look on his face he replied, "It's a utility program that allows you to write machine language code with labels, line numbers, etc. If you didn't use an Assembler how on earth did you write this?"
Feeling kind of stupid now I said, "I, um, used a machine language monitor". (This is a tool programmers use to change memory locations in the computer to either code or graphics.)