Impostor Syndrome in Programming
medium.com
medium.com
When I am told by my software developer friends how quickly I've learned in the last year and when I get lots of users using my projects that reinforces the idea that I would be a great developer. But then when I apply for jobs and just keep getting rejection after rejection, it wears me down and makes me feel like an imposter who isn't cool enough to join the club you know?
Being good at shipping products doesn't make you a good bolt turner. It's something to be proud of, to be sure. But it's not something that translates into interview success at most places.
I would advise some mock interviews, etc. with those friends (assuming you have friends who have the insight of a hiring manager in whatever you're looking at) and see where you fall.
However I think that in many other environments, especially early stage, a "great software developer" is someone that makes sure the user's problems are met and that is definitely measured by usage.
You can expand your knowledge and hone your skills practically without limits, and there's no reason to stop just because you're out of school/landed a job. Most good developers never stop, and have been doing this for their whole careers, some for decades - while you've been at it for a year. I don't want to discourage you - it's a good start, but it's just a start.
I feel like I've done enough side projects to prove I'm at least not a complete hopeless case.
I've concluded that we aren't going to fix this. When even PhD's appear to have this same experience, you know it isn't a matter of education. For a long time I thought perhaps licensing / certification like other professions including engineering, but there are too many economic forces against that happening.
So, we're going to continue to bifurcate into companies that have the means to interview, hire, and manage software development and those that are essentially a cargo cult version of those activities. You have to basically accept that a large segment of the market for tech workers is going to belittle you, mistreat you, and it's up to you to either jump through their hoops or work really hard to find places that aren't like that.
Like the old exercise where you have to write instructions for making PB&J. I know how to make a peanut butter and jelly sandwich but when I have to explain it, clearly, and in minute detail I’m forced to acknowledge the gaps - the steps my brain just skips over and takes as a given. But PB&J is easy so even when I might struggle with articulating the mechanics of it to someone else I don’t doubt my ability. That changes quickly though as complexity increases.
I’ve baked a lot of bread and I’m intimately familiar with how my bread dough rises differently depending on lighting, the temperature of my house, and even the material I cover the dough with while it proofs. But a lot of that happens without too much active thought - I just kind of know how to adjust my mental math for these factors. I’m not sure I could clearly and succinctly articulate this knowledge to someone else. And even now I’m having imposter syndrome wondering if someone here will tell me it’s clear I have no idea how yeast actually works... and maybe I don’t!
That's fundamentally a trap question. It's like when you keep asking "why?" until the answerer runs out of explanations because we've inevitably reduced things to quantum mechanics. I think the exercise is a useful demonstration of why the code you write doesn't necessarily do what you think you wrote, but as an exercise (or, god forbid, an interview question) I don't think it's that useful.
These days, my answer (after the usual contextual questions if this were a PM/dev interview) would be "I would tape a GoPro to my head and record a video of me making PB&J. If there's any ambiguity, I think 99% of people would be able to fill in the blanks."
1. 95%+ confidence, usually meaning I've done it before, or I've seen it with my own eyes, or I am experienced in this space to the level of depth that matters for this conversation. I won't qualify my level of confidence. If I'm wrong, then I'll investigate and confirm, admit that I was wrong, and we all learn something new.
2. 80% confidence, I'll say "I think it's ____, but you should verify."
3. 60% or lower confidence, I just leave it at "I don't know, let me look it up".
I think the other key is not to try to go into more depth than you know. For the example in the blog post, if someone said "So, how does React Native works? How does one write Javascript and then magically turn that into Java and Objective-C?" my response would be "Well, not quite, it adapts the native OS API's so that your JavaScript can manipulate native UI components." If they ask further, I would say "Honestly I haven't dug much further because I never needed it."
You don't need to be worried.
What I do fear is that everybody else is judging me when I don't know the answer immediately, without spending any time researching, to every question.
I think there's little to fear here. Most people's judgement of you doesn't matter that much. Hopefully you have a good enough relationship with the rest that you can communicate realistic expectations with them.
But I find myself surrounded be people who imply that it should take about a half hour to read everything...
I think this comes down to communication as well. Are they implying this? Are you inferring this? And, on the other hand, do these people really know how long it should take? In my experience, they often don't.
It's usually more along the lines of anxious, concerned looks coupled with phrases like, "how long will it take you to learn it", or "well, what part don't you understand", or "Have you tried asking Bob, he knows that".
And it stuck with me. I worked for a startup that got acquired by Atlassian last week, wrote their Jira Server integration which helped land Uber as a customer. But I still wasn’t a “real programmer”.
This sounds stupid, but I never became a “real programmer” in my head until I developed a Minecraft mod. I got into programming because of Minecraft and I was always amazed by the modding wizards. I tried and failed when I was 13-15 to make mods.
I recently took a crack at it 6 years later and it came easily. I realized that the modders weren’t wizards because I could do it now too.
I beat imposter syndrome by going back and doing the things I couldn’t when I started programming. Makes you realize how far you’ve come and less like a fraud.
On the other hand, I got to know that I'm not as bad as I thought. Instead I'm good. But, still even after all this. There are times when the Imposter Syndrome kicks in.
Experience can come from knowing enough concepts to make stuff work, but also knowing where to look to fill in the gaps should you need to do. It's also knowing when to fill in those gaps, and when to leave them because it's not important right now.
I would say imposter syndrome is the anxious feel not knowing all the gaps and questioning yourself. Some people are impacted by this, others are not.
If you adopt a growth mindset, you see these gaps as advances in your craft, and not a measurement of your inexperience.
The real question to ask is what about that trigger is causing your to feel uneasy and become anxious. This is usually a more complex question to answer. If you can get to a point of exploring that question objectively and without judgment of yourself, you can path the way to overcoming imposter syndrome.
I think teaching and writing are also good ways of getting over it. Once you explain a concept to people you will know you don't have gaps in your knowledge to arrive at a working understanding.
I think of it as a feeling everyone feels at some point if they care about doing a good job. If you never feel it, you are probably playing it too safe and aren't growing as fast as you could be as a result.
For those not familiar with Dunning-Kruger, it's the cognitive bias where people overestimate their ability when they have little knowledge. But on the flip side, the more knowledge you have, you can end up underestimating your ability. Which, in this case, can look like imposter syndrome.
To paraphrase Paul Graham, great hackers don't seem to wonder why they are so smart, but rather wonder why everyone else seems so incompetent.
The trick is just to not tie, your identity, who you are, your sense of self worth to how good you are as a programmer. As long as you can avoid that embrace the imposter syndrome and let it drive you to improve, for knowledge is like compound interest, a little bit more now will result in a substantial return on investment in the future.
If nobody is giving someone good feedback about their work, then it's impossible for them to feel like an impostor. There are many great developers out there who rarely get positive feedback about their work and they have no idea what people are talking about when they mention 'impostor syndrome'.
You'd be surprised by how many people fall through the cracks of the system; these people will never understand this idea of 'impostor syndrome'. I've been coding for over 15 years, both in my spare time and full time job. I've worked 7 days a week on open source. I've build several significant, scalable systems. In addition to my open source side projects, I've worked for at least a dozen different companies of all sizes in different industries and different countries.
The main theme of my career has been one of feeling constantly undervalued. I'm confident today precisely because I've been constantly undervalued in the past and this adverse environment has been the main driver for me to improve.
Recently, I started getting excellent feedback for my work, but it's not because I suddenly became a better developer, it's just that I changed companies too often to get noticed before and also I got very lucky that the people I work with now are smart enough to notice and have enough money in their pockets such that their opinions are taken seriously.
Don't know if this will be of any help to anyone, but I thought I'd share a different perspective.