From the outside, it would appear I was on the textbook path of programming. Started making websites at 15. Took programming and web design classes in my tech-oriented high school. Was accepted by my first choice school and majored in Computer Engineering. Had great internships at a tech giant. Wrote code that was used by millions of people. Graduated with distinction. Cofounded a software startup.

And yet despite doing everything right, I didn’t think of myself as a good programmer.

On the inside, a different narrative played out. I got into university due to affirmative action. I had a good GPA because we didn’t have “weeder” classes and I didn’t take the really hardcore CS courses. I got my job because my interview only covered things I knew. I got excellent performance evaluations because I was given manageable assignments. I did well in school and work projects because friends who were good programmers helped me out.

I managed to get that far through sheer dumb luck and managed to keep everyone from finding out I’m not great at programming. I was constantly in fear that I would encounter some task I wouldn’t be able to code or a bug I couldn’t resolve, despite a track record of successfully using new languages and frameworks, completing projects and meeting deadlines.

Despite outstanding academic and professional accomplishments, women who experience the impostor phenomenon persist in believing that they are really not bright and have fooled anyone who thinks otherwise. Numerous achievements, which one might expect to provide ample objective evidence of superior intellectual functioning, do not appear to affect the impostor belief.

Some research suggest that women are more susceptible to Impostor Syndrome. I don’t think it’s conclusive generally, but within a field like computing where women are vastly underrepresented, it is especially likely for someone in the minority to feel like she got in by some fluke and doesn’t truly belong there.

In my head I held a definition of a good programmer, and I didn’t fit it. My repertoire of keyboard shortcuts was relatively pathetic. I was not a fount of esoteric details of various programming languages. I could not expound on the pros and cons of two competing technologies with religious fervor. I did not try to implement algorithms in academic papers for fun. I did not skip meals to code. And surely the nail in the coffin was that I had not watched a single episode of Star Trek.

Good programmers like that seemed to know so much, and in comparison, I knew so little. I simply could not see how I could ever become someone with these qualities. So I concluded that I couldn’t be a great programmer, and told myself that being a programmer was not what I was meant to do anyway. So as we settled into different roles in my first startup, I took on marketing. I still wrote code, but it was just easy frontend stuff, not real programming.

One day, a coworker — someone I considered a good programmer, someone who could recite the ANSI C Standard  told me he was impressed with the JavaScript I wrote. It started to dawn on me that I might have had it all wrong.

Recalibrating my worldview

There are two characteristics of coding that can make programmers feel like they’re really struggling, when actually they could be doing just fine. The first thing with programming is that you’re almost guaranteed to have to learn new things as you’re doing it. The rate at which technology is changing is incredible. This can have the effect that one is constantly feeling behind, and that there is an ever-growing amount of stuff to learn.

The second characteristic that’s somewhat unique to programming is that it consists of near constant failure. Unlike learning other skills where one can expect to be reasonably competent after sufficient practice, programming largely consists of constantly failing, trying some things, failing some more, and trying more things until it works. One of the biggest differences between experienced and novice programmers is that experienced programmers know more things to try. Watching people who are just starting to code made me realize how extremely defeating this phenomenon can be.

Without recognizing that this is just what normal programming is, it is easy to think that one is not very good at it, even when results indicate otherwise. I was so overwhelmed by all the things I didn’t know that I dismissed the things I had quietly mastered over the years. In fact, I had slowly amassed my 10,000 hours.

Over time, I saw that there was no invisible barrier separating me and a good programmer. I can broaden my definition to include myself.

Impostor Syndrome instilled in me a deep fear of failing. I was afraid to speak up or ask questions for fear of saying something stupid, and people would find out I didn’t really know my stuff. The stakes were even higher because as the only female engineer on nearly every team I’ve been on, I felt saying something stupid would be representative of my gender. I quietly avoided doing things I didn’t think I’d be good at, even though the only way to get better is to do them. I had put things I could do and things I wasn’t good at into separate mental buckets, and saw these artificial groupings as static and impermeable. That was the biggest loss for me, not learning and doing more things because I was afraid I couldn’t.

Two years ago I returned to coding fulltime. Guess what, I’m much better at coding than marketing. I picked up iOS, Ruby on Rails, and brought myself up to speed on the newest frontend frameworks. Learning and shipping lots of code, along with supportive friends and coworkers, gave me confidence to believe that I might actually be good at this coding thing.

After more than ten years, I’m finally ready to believe I’m a good programmer. Just like people kept telling me all along.