First and foremost, mdbritt's answer is spot-on, and I love it. But I would add one thing to it.
Programming ability requires a fundamental understanding and acceptance of the simple notion that a computer does exactly what you tell it to do, and nothing more, even if what you tell it to do is grossly incorrect. It will do so very quickly, and very efficiently because you told it to do so. Computers do not hiccup, they do not burp, they do not wig out or anything else. They do what some programmer told them to do.
So when the computer crashes, when the memory leak occurs, when the bug rears its nasty head for the twentieth or thirtieth time, it is not because there is a gremlin in the machine. It is because you, the programmer, programmed it to be so. Or, some programmer who developed the software your software is using (even if it's a device driver) did so.
Software development is science, not magic.