Thu Aug 14, 2014
As of this month I’ve worked for an entire year as a ‘real’ software developer.
I want to preface everything I’m about to say about it with these two quotes:
The doorstep to the temple of wisdom is a knowledge of our own ignorance. ~ Benjamin Franklin
… as we know, there are known knowns; there are things that we know that we know. We also know there are known unknowns; that is to say we know there are some things we do not know. But there are also unknown unknowns, the ones we don’t know we don’t know. ~ Donald Rumsfeld 1
As you might have guessed from the title, the subject of this essay is ignorance 2, and how to deal with it.
I don’t know where it started, but as a developer I’ve always felt embarassed to admit that I didn’t know something. It was like admitting defeat: like there was some fact or concept that I hadn’t mastered, that my proficiency was somehow flawed. I think a lot of this honestly came from how much time I spent talking with other programmers, either in real life or on the internet 3 where revealing a chink in one’s intellectual armor somehow invited vitriol and pitchforks.
Obviously, ever since I started programming in any capacity, I am assaulted hourly with proof of my own lack of knowledge. There are hundreds of easy coping mechanisms: fending off a conversation while you look for the answer online, rapidly changing the subject, glossing over your ignorance with lots of wishy-washy stuttering, or the worst ever – assuming that no, the other person is wrong.
But I think the single largest area of growth over these past twelve months – from which I’ve grown from a novice developer at a massive company surrounded by people way smarter than me to a journeyman developer at a massive company surrounded by people way smarter than me – is the ability and willingness to admit (both to myself and others) that I don’t know something.
I’m going to give a simple example:
When I first started at Amazon, one of my early tasks was to switch out one of our service handlers for something that used a different endpoint. It was a pretty simple task – only a few actual lines of code were changing, and it was more about me getting familiarity for the specific package – except I had no idea what the actual package was. Our team has around two dozen registered packages in Amazon’s central repository, and for the life of me I had no idea which was the one I was supposed to be looking at.
And of course, I couldn’t just ask my teammate which package they were talking about. That would be admitting defeat; that would be admitting my own programming mortality.
So, I did what any nervous new hire would do: I spent four hours nervously checking out every possible package and scouring over it to see if it rang any bells.
Now, obviously I could – and should – have just asked someone where the relevant code was. It would have taken them five seconds to answer; it would have been no big deal to any part involved. But of course, in my foolish, pseudo-egotistical head, I couldn’t risk it. I had, either consciously or unconsciously, spent so many years glorifying this idea of being a self-sufficient hacker who could solve any problem and answer any question, and to deny that dream would be devestating.
This foolishness is reminisicient of the Dunning-Kruger effect. To quote Wikipedia:
The Dunning–Kruger effect is a cognitive bias manifesting in unskilled individuals suffering from illusory superiority, mistakenly rating their ability much higher than is accurate. This bias is attributed to a metacognitive inability of the unskilled to recognize their ineptitude.
If I had to pick the biggest area of improvement I made as a developer, it was that I drastically lowered the inhibition I had when asking questions or admitting that I didn’t have the answers. It feels incredibly freeing – instead of making development feel like an endless struggle to meet the insane standards I set for myself – but, more importantly, I’m learning more than ever from more people than ever.
There’s a part of my head whenever I sit down to write a post like this that asks, Well, okay, but what do you want people to take away from this? And sometimes that answer is sort of weak; sometimes that answer doesn’t come at all, and I highlight everything and press delete. But this time, that answer comes easy:
Don’t be so afraid of admitting that you don’t know. It makes life easier.
- Remember how much shit this quote got? I know we liked to make fun of anything Rumsfeld said back then, but this totally makes sense to me now. Granted, I’m talking about programming and not, yknow, guerilla warfare. [return]
- I know this is something of a loaded word, so assume that by ignorance I mean lack of knowledge. [return]
- To quote Michael O. Church: “A big part of the problem is that programmers are constantly trying to one-up each other (see: feigned surprise) and prove their superior knowledge, drive, and intelligence.“.” [return]