I have no idea what I'm doing.
That statement seemed important enough to stand on it's own. I typed it out with the intention of describing that this blog is running on Jekyll which runs on Ruby, and my aim is to learn as little of both as necessary to run this blog. I loathe and don't understand Ruby (possibly related facts), but I realized that "I have no idea what I'm doing" also captures a deeper feeling I have about programming as a process.
I don't mean I feel incompetent. I have a sense of direction, and I often make good choices, but those are essentially gut feelings. I think many people (even developers) believe programming is all logical, that we come to very methodical conclusions, and a solution can be objectively rated better or worse than any other solution. I've been developing for about 11 years, most of that time professionally, and I'm pretty sure most of what I do is intuition-based.
I say "pretty sure" because the human brain doesn't come with a reflection library. I just know that when I come up with a solution to a problem, it's likely that the idea simply popped into my head. It seems obvious, but you can only step through the logic of an idea after you've thought of it. So where did that idea come from?
It probably came out of a combination of natural aptitude, past experiences, and clues you gathered from bad ideas. The more you write code, the more problems start to feel familiar. You start to gain an intuition which raises red flags when it sees warning signs that you're going down the wrong path. However, this reaction is fundamentally emotional, not logical. You probably don't even remember the specific experiences which went bad, or why they went bad. You just know that your gut is telling you it won't turn out well.
I think any developer who believes emotion isn't a big part of his or her decision making process is kidding his or herself. Of course, sometimes you do remember exactly what went wrong, can articulate it, can logically evaluate it, and use it to teach others, but that's probably 5% of the time for me. It may be higher or lower for others.
Perhaps, if I blogged about some of problems I solve, I could increase that number to 6%.