---
title: "IDK"
date: 2014-08-14
tags: post
---

### Tags: [development](/web/20170922144541/http://jmduke.com/tags/development)

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](#fn:3)

As you might have guessed from the title, the subject of this essay is ignorance [2](#fn:1), 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](#fn:2) 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](http://en.wikipedia.org/wiki/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.**

* * *

1.  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\]](#fnref:3)
2.  I know this is something of a loaded word, so assume that by ignorance I mean _lack of knowledge_. [\[return\]](#fnref:1)
3.  To quote [Michael O. Church](http://michaelochurch.wordpress.com/2014/07/13/how-the-other-half-works-an-adventure-in-the-low-status-of-software-engineers/): “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\]](#fnref:2)
