Friday, September 30, 2016

Myths of Genius, Fear of... everything


I recently found myself struggling with a great deal of anxiety centered around my career as a software developer.  So much so, in fact, that I began to research what it was I was feeling.  I discovered a great deal about the nature of my fears and doubts, and I hope that sharing my circumstances and introspection here might prove just as valuable to readers as my usual technology related posts.



The Promotion


I often tell people, half jokingly, that I'm a junior developer masquerading as a senior developer.  From an objective standpoint it really isn't an unreasonable assertion... I mean I've been a professional programmer for less than three years and was christened a "senior" developer barely more than a year into that.

I almost didn't apply for the senior position.  It seems like the worst kind of arrogance, classic Millennial entitlement.  "I was just promoted 6 months ago, there are other developers with more experience than me, who actually have a CS degree..." I told myself, but I figured if nothing else it was good interviewing practice.  And besides, you can't win if you don't play, right?  So I convinced myself there was no harm in throwing my hat into the ring.

Much to my surprise, I was selected for the position.  When I was offered the job, I was told my leadership abilities, soft skills in general really, were a big factor.  "You can teach anyone to program" was basically the message.  Well, they may or may not have picked the best candidate, but deep inside I wasn't really convinced that I was the right guy.  How could I be?

I swallowed my doubts, took the job, and told myself "I will become a senior developer!  I will become a developer worthy of this position!"  I was going to learn design patterns, front end frameworks, half a dozen programming languages, machine learning, software architecture.... and on and on.  Because that's what senior developers are.  They are alpha nerd geniuses...

So I had a lot of work to do to become "worthy" of my title.  Suffice it to say, I put a teensy bit of extra pressure on myself...



Myths and Absurd Expectations


I'm going to go out on a limb here, and say it's probably perfectly normal to want to succeed in a new position (wow, way to be brave Troy...).  The devil about software development is, what does it mean, from a career standpoint, to be successful?  What does it mean to be a good programmer?

Somewhere along the way, I developed a terribly misguided expectation for myself, which is not uncommon in our field it seems, that in order to be a good programmer, and in particular to be worthy of the title of senior software developer, I had to be better than just "good".  I had to be a genius.  I needed to have real CoSci training (good thing for Open Courseware and, these days, Coursera and edX), I had to understand design patterns, every front end framework ever created, at least 5 programming languages, UX design, machine learning and AI, ... and the list went on and on.

Not only did I think I needed to know all this stuff to be a good programmer, I needed to know it as soon as possible.  Because until I did know this stuff, I was a fake.  I was a fraud.  I felt it in the deepest recesses of my being, and I knew it was only a matter of time before I was found out.  I knew I would be exposed, and it was a race that I had to win.

This notion that programmers are supposed to be geniuses is not something new or unique to me.  It's such a thing that a couple guys from Google did a presentation about the "myth" at a conference a few years back (good watching, btw).  There is a book by O'Reilly (probably the first I've seen without an animal sketch on the front) called "Team Geek", written by the same two guys, and the first chapter is also called "The Myth of the Genius Programmer".

In the book, the authors point out that we programmers tend to look up to these figures in our industry... Torvalds, Gates, Jobs, etc.  and put them on this pedestal.  We think to ourselves "If I could just think of that one great idea, I could be a billionaire software tycoon too!"  Even if our dreams aren't that grandiose, the hero worship still sets the bar for personal achievement impossibly high.  Their concern is mostly in how this can lead to programmer insecurities and subsequent behaviors that are counterproductive in a team environment.

It isn't just about idolizing the guys who got the business piece right.  It's also this prevalent notion that, even separate from being a tycoon, there is this elite strata of super genius programmer, "real" programmers, and if we just had the secret sauce, we could be one too.  I saw a question on Quora "How does one become a genius programmer"... some of the answers seemed to buy the premise that being a good programmer means being a genius, while plenty of others point out that being good doesn't mean being a genius.  Same thing on a reddit thread that basically asked if Facebook, Google, and company only hire geniuses.  At the heart of the matter is this same absurd myth, that the "good" programmers, the ones worthy of the time of day, are all genius coder-ninjas.

For me, the consequences were a little different. I didn't suffer from the compulsion to hide my code from everyone, but this could easily be attributed to the fact that the way our organization is run, it's a moot point.  Nobody really ever looks at anyone else's code anyway, so why worry?  Instead my insecurities sat in my chest like a lump of lead.  I spent hours upon hours researching and learning, at work, at home... binge watching PluralSight, staying up until midnight or later taking online classes, trying to learn more programming languages (despite the fact that I knew I wouldn't use them in my current position... like... e v e r).  I was expanding my knowledge of my ignorance faster than I could expand my knowledge.  The stress was turning my hair grey, and it seemed like the more I learned, the more hopeless the whole endeavor felt.  I looked into the void, and saw a death spiral.  And that was terrifying.


Fear Leads to Truth


I found myself struggling with this anxiety.  The more I learned, the more I pushed myself, the deeper my fear became.  It made me grouchy at home, depressed at work.  How could I possibly learn enough... be smart enough, to be a good programmer, and not just a convincing fraud?

I finally did the one thing I'll actually admit to being good at: I googled it.  Surely I'm not the first software developer who struggled with anxiety, right?  Thankfully, this set me on the path to better understanding what it was I was feeling.  I did find a number of resources that, if nothing else, helped me feel that I wasn't such an outlier.  A thread on quora about anxiety concerning a programming interview, and a metafilter thread by a PhD for crying out loud... expressing some of the same feeling of fear and being overwhelmed.  The breakthrough, though, was a blog post by developer Adam Culp, called "Developer Anxiety, we’re not alone".  It covered much of the same ground as the others, but it included one little tidbit that really, truly captured what I was feeling:  Impostor Syndrome.

Stumbling across this tidbit put a name to the feelings I was experiencing, and as Patrick Winston liked to say in his AI class, giving a name to something gives us a certain power over it.  I felt like, despite my achievements, despite the praise of my colleagues, that I was a giant phony.  Now, it turns out "Impostor Syndrome" is not limited to software developers, but is something experienced by folks in every walk of life.  Athletes, artists, managers... one of the most helpful articles on the subject was written by a writer, telling how he learned to deal with the Impostor Syndrome.  His story really spoke to what I was feeling.

I'm sure there are other factors at play as well.  In my search for answers regarding my anxiety I also found an article about developer depression.  The blog post linked in that article relates the story of a developer who was over-stressed and underpaid, gets laid off, then ends up in a position with crap conditions and gets shot down all the time.  While working in any bureaucracy can be a pain, I'd been somewhat inured to the effects of it after spending a stint in another agency under the idiot boss from hell.  Being the lone wolf on projects, and having to frequently switch projects, did get frustrating at times, but the developers still maintained a good sense of camaraderie (in a way, commiserating over the crap we were dealing with probably helped lol).

I've admitted to myself that I have this problem.  I've identified it, and that in itself is a huge step. Because I know these lingering doubts I feel are not based in anything rational, when my team mates talk me up (as they are wot to do from time to time), I can trust that they feel genuine respect for my abilities.  I can allow myself the luxury of owning that, even if just a little.  Because even if the road ahead is infinitely long, it's ok, now and then, to look behind, and feel joy in just how far I've come.

2 comments:

  1. This comment has been removed by the author.

    ReplyDelete
    Replies
    1. Thanks for the comment (even if I only got to read it in the email notification since you'd already deleted it lol). I'm a firm believer in grasping the fundamentals, because it makes learning new things that much easier, since you have a common base of knowledge to kind of tie it all back to. Technology changes so fast, there is always so much new stuff... there are always going to be things we can't know. Learning to let go of that feeling, like not learning this or that technology makes me less of a programmer... that is a challenge at times.

      Delete