Friday, October 10, 2014

Impostor Syndrome

I mentioned previously that I failed to publish one of my blog articles for over a year due to impostor syndrome, but then I realized that maybe some people don't know what that is or if I was even being serious.  So, first of all, yes, I was serious, sort of.  I do think I suffer from what's colloquially known as Impostor Syndrome, but not to the extremes that some do.  The basic gist of the problem is that I always worry that people will find out that I have absolutely no idea what I'm doing, despite having a fairly successful career as a software developer.  There's more information at Wikipedia if you're curious.  It's the opposite of the Dunning-Kruger Effect, in which incompetent people tend to overestimate their own level of competence, which sadly is what most really successful business people have from what I've seen over the years.  We, as a society, tend to reward overconfident incompetence instead of self-doubting excellence.  I've read that it's significantly more common in women than men, but I personally believe it affects far more developers than are willing to admit it, based on behavior I've witnessed over the years.  It could just be that more women are willing to admit to it.  I've decided to share my personal experience with this problem, what I've been able to do to overcome it to a degree, and how it still affects a lot of things in my career, usually for the worse, in the hopes that bringing more attention to the problem will help others who are similarly afflicted.  I'm going out on a major limb here and I hope that it doesn't collapse under my weight.

We've got wee, not so wee, and friggin huge

The sheer enormity of the volume of knowledge in Computer Science and software development is frankly overwhelming.  As the old adage goes, the more I learn, the less I know.  There are new developments constantly coming out, and it's impossible to keep up with them all, especially given my relative lack of formal education which has left me to pick up some of the more fundamental parts of the discipline in a more ad-hoc manner over the years.  I feel like I'm constantly catching up with where I should have been years ago.  It doesn't help that the landscape has changed drastically in that time. What was once considered PHD level material now seems to be considered by some to be basic knowledge.  Object-oriented programming, functional programming, reactive programming, aspect-oriented programming, set theory, graph theory, bayesian statistics, machine learning, AI, computer graphics, big data, distributed systems, operating systems, compilers, interpreters, security, encryption, dynamic typing, static typing, weak typing, strong typing, data structures, search algorithms, consensus algorithms, and on and on and on.  And that doesn't include all the peripheral knowledge like project management, agile methodologies, version control systems, bug tracking software, etc.  It's a lot to know, and it's seemingly more and more all required knowledge based on what you read from the peanut gallery.  And those are just a sampling of the things I either know or know I need to know, and I keep finding new examples all the time.  The backlog on my reading list is huge, and I don't have the time or energy to actually catch up.  It would take years of dedicated full-time effort, and that's without a job or a family to maintain.

This one goes to 11.  It's one louder.

So, that's the first part of the problem.  It's impossible to understand all these topics to a significant depth.  Some people are fine just skating by on the surface, understanding enough to talk about it, but I personally don't feel qualified to talk on a subject until I have really absorbed it.  And that takes time, and with things like programming, a lot of practice.  I'm stuck with an unfortunately limited subset of these topics that I really understand, and a larger subset that I sort of get but couldn't really speak to to any depth.  Some would say I'm lacking in some of the basics, but I also really know some of the not-basics, which makes it really difficult for people to gauge my competence level until they've actually worked with me.  My biggest concern is that I'll have a conversation like the one from Spinal Tap where Nigel keeps insisting that his amp is louder because it has an 11 on the knob, where others only go up to 10.  He knows enough about amps to know that higher numbers are louder, but completely misunderstands what the numbers actually represent and assumes that 11 is just louder.  Some people are content to pretend they understand the technology while spouting off incorrect information to people who don't understand it enough to call BS.  As Mark Twain said, "It is better to keep your mouth closed and let people think you are a fool than to open it and remove all doubt."  I opt to keep quiet, but when I hear people talking with confidence on so many topics, I falsely assume they actually understand what they're talking about and I feel lacking by comparison.  I project my ethics and thought processes on to others who don't necessarily share them.

How does he not get fired?

It doesn't help people with this problem that many developers exhibit a tendency which has been labeled as "feigning surprise" (see Hacker School Rules), in which they pretend to be shocked when someone doesn't know something that they have learned.  This has a severe negative emotional impact on people who already think they are impostors.  It makes them want to speak up less, and just retreat into their safety zone.  I personally think this can be pretty tightly coupled with impostor syndrome, but I can't necessarily prove it, it's just a hunch based on my own experiences.   I think, at least in some cases, that the person feigning surprise is not consciously faking it but is actually surprised that someone else doesn't know something they do.  They feel like they're a fraud, and certainly the other person shouldn't also be a fraud.  It's like a weird combination of nihilism and narcissism that doesn't make any logical sense to others, and it comes across as demeaning and only serves to worsen the problem.

This is an NP hard problem

I think a lot of my opinions on interviewing in my previous post revolve around this problem, honestly.  I tend to clam up in interviews when they hit an area I don't understand extremely well, out of fear that I'll say something extremely stupid on the subject and just cast away all doubt as to my imposterosity.  In reality, often times, they're purposely testing how the subject reacts to a situation in which they don't know the answer. Despite my logically understanding this, my psychological reaction is to flee inward rather than reveal my ignorance, so I look even worse by not working it out with the interviewer.  My whole career is just a house of cards waiting to crash down as soon as someone realizes I really don't understand all of the intricacies of directed acyclic graphs and paxos consensus algorithms. This can come across as incompetence in interview settings, and I've done poorly on a number of interviews and lost jobs because of it.

Nevermind the man behind the curtain

Given how interviews are conducted, I'm amazed every time I get to a new job how much it's basically like the old job.  I've had a couple times where I finally felt like I got in; I was now part of the elite who worked at these places with these ridiculous interviews.  I sure fooled those guys; they're gonna feel pretty silly that they hired me once they realize I'm not a demigod.  Come to find out that my new coworkers were basically of the same competence level as my old ones; some good, some not so good. I imagine it's that way at places like Google, Microsoft, and Amazon, despite all their pretense of hiring only the best of the best.  They still make stupid decisions and release the same crappy, bug-filled software as the rest of us.  They just don't do it in the open, so people romanticize that things must be perfect behind their shroud of secrecy.

I'm good enough, I'm smart enough, and dog gone it, people like me

So, what can someone with impostor syndrome do to combat it?  There are a few things I've found that have helped me immensely, but each is a constant battle.  Just being aware that I have this problem, and that it's a known, not-uncommon issue has helped tremendously.  I can objectively look back over my career and realize that I have actually done well at most jobs I've had. When I left one job, my boss told his boss that they were losing their best developer,  and at another job I was kept on after nearly everyone was let go in order to help transition things to the parent company. Even at the places where I felt completely unworthy after the difficult interview, yet somehow managed to land the job, I ended up being well-respected and valued because of my pragmatism, my attention to detail, and my ability to ramp up quickly.  You would think that would be validation enough, but I tend to dismiss those things because those people obviously didn't see how much I was struggling.  When I feel especially fraudulent, I remind myself of those experiences so I can feel more calm and confident, and it helps.

Another thing that has helped immensely is setting aside time to actually research areas where I feel I'm lacking. If I can at least have a cursory knowledge of an area, enough to actually have a decent conversation on the subject, I feel a lot less incompetent.  This has proven the most difficult, because it's often led to going down a rabbit hole of related subjects that I can never possibly learn to the degree I would prefer.  Nevertheless, it's still been a boon, and I feel like I'm in a much better position than I was a few years ago.  I'm working on being less dismissive of my own ideas, as it's turned out that I've had some good ideas over the years that have worked out pretty well, but I still have a tendency to discount my opinions or second guess myself.

Oh, he comes from a broken home.  So... no coffee then?

I guess that's all the advice I have.  There's no miracle cure here, but it is manageable.  Be objective, be logical, and remind yourself that you actually have done a good job from time to time.  Most of all, remember that nearly everyone else is faking it just as much as you are, if not more.  Some people are just better at hiding it than others.

No comments:

Post a Comment