(The following was written as the foreword to Rob Conery’s excellent, highly recommended book, “The Imposter’s Handbook”)
I’ve been honored to be asked to write the foreword for several books over the course of my career. Each time, my first reaction is something like “Oh wow, how exciting! What an honor! HEY LOOK SOMEONE WANTS ME TO WRITE THEIR FOREWORD!!!” My second reaction is almost always, “Oh no! Why me? Why would they ask me of all people? I’m just a saxophone player who stumbled into computer programming. I have no idea what I’m doing!”
No offense to Rob intended, but this may be the first foreword I feel qualified to write. Finally, a book whose very title defines my qualifications not just to write the foreword but to participate in this great industry of ours. A handbook for impostors. It’s about time.
You know that friend, classmate, or family member who seems to waste too many precious hours of his or her life sitting in front of a computer screen or television, mouth gaping, eyes dilated, repetitively playing the same video game? In my late teens and early twenties, that was me. I made my living as a musician and had studied jazz saxophone performance and classical composition in school. I was an extremely dedicated student and serious musician. Then I got seriously addicted to id Software’s Doom. I played Doom all the time. I was either at a gig making money or at home playing the game. My fellow musicians thought I was really starting to flake out. I didn’t practice during the day or try to write music. Just Doom.
I kind of knew how personal computers worked and was pretty good at debugging problems with them, especially when those problems got in the way of me playing a successful game of Doom death-match. I got so fascinated by the virtual 3D rendered world and gameplay of Doom that my curiosity led me to start learning about programming at around age 20. I remember the day I asked a friend how programs go from text I type into a word processor to something that can actually execute and do something. He gave me an ad hoc five minute explanation of how compilers work, which in different company I’d be ashamed to admit served my understanding of that topic for several years of professional work.
Playing Doom and reading about C programming on the still-small, budding internet taught me all I knew at the beginning about networking, programming, binary file formats (We hacked those executables with hex editors for fun. Don’t ask me why!), and generally gave me a mental model for how computer systems hung together. With this hard-won knowledge, I accidentally scored my first job in the industry. The same friend who had explained compilers to me (thanks, Walter!) literally applied for a computer support job on my behalf. At the “interview”, the hiring manager said “Walter says you’re good. When can you start?”
So, ya, I really stumbled into this industry by accident. From that point on, though, I did a lot of stuff on purpose. I identified the areas of computer technology that were most interesting to me and systematically learned everything I could about them. I treated the process like a game. Like a World of Warcraft skill tree, I worked my way up various paths until I got bored, intimidated, or distracted by something else. I covered a lot of territory over many hours of reading, asking questions of co-workers, and experimentation.
This is how I moved rather quickly from computer support to network administration to network automation. It was at this time that the DotCom bubble was really starting to inflate. I went from simple scripting to object oriented programming to co-creating a model/view/controller framework in Java for a major corporation and playing the role of “Senior Software Architect” only a few short years after packing the saxophone away and going full time into software development.
Things have gone pretty well since then, but I’ve never gotten over that nagging feeling that I just don’t belong here. You know what I mean? You know what I mean. You’re talking about something you know well like some database-backed Web application and a co-worker whips out Big-O notation and shuts you down. Or you’re talking about which language to use on the next project, and in a heated discussion the word “monad” is invoked.
Oh no. I don’t know what to say about this. How do I respond? How can I stop this conversation in a way that doesn’t expose me for the fraud I am? WHAT THE HELL IS A MONAD?
I hope that non-response made sense, you think as you walk toward the restroom, pretending that’s why you had to suddenly leave the discussion.
In daily work, I find myself to be at least as effective as the average programmer. I see problems and I come up with solutions. I implement them pretty quickly. They tend to work. When performance is bad, I fix it. When code is hard to understand I find a way to make it easier to understand. I’m pretty good at it I guess.
But I didn’t go to college for this stuff. I went to college and studied my ass off, but all I have to show for it is an extremely vast array of esoteric music knowledge that would bore the hell out of anyone who isn’t a musician. In college you learn about algorithms. That sounds hard. When I write code, I don’t use algorithms I think. Or do I? I’m not sure. I don’t invoke them by name most of the time. I just write code. These college programmers must be writing stuff that’s unimaginably more sophisticated since their code has algorithms!
And how can my code perform well if I didn’t use Big-O notation to describe its performance and complexity characteristics? What the hell does “complexity” even mean in this context? I must be wasting so many processor cycles and so much memory. It’s a miracle my code performs OK, but it does.
I think most of my success in the field of computer software development comes from my belief that:
- A computer is a machine. In some cases it’s a machine I own. I could break it into tiny pieces if I wanted.
- These machines aren’t made of magic. They’re made of parts that are pretty simple. They’re made in ways that tens of thousands of people understand. And they’re made to conform to standards in many cases.
- It’s possible to learn about what these components are, how they work, and how they fit together. They’re just little bits of metal and plastic with electricity flowing through them.
- Everything starts with this simple foundation and grows as simple blocks on top.
- All of the hard sounding stuff that college programmers say is just chunks of knowledge with names I don’t know yet.
- Most of this stuff can be learned by a young adult in four years while they’re also trying to figure out who they are, what they want to do with their lives, and how to do as little work as possible while enjoying youth.
- If someone can learn all this stuff in just a four year degree, it’s probably pretty easy to hunt down what they learn and learn it myself one concept at a time.
- Finally, and most important, somehow I get good work done and it doesn’t fall apart. All this stuff I don’t know must be just a bonus on top of what I’ve already learned.
All this is just stuff you can learn! Wow. In fact, the entirety of human knowledge is just a collection stuff that you can learn if you want to. That’s a pretty amazing realization when you fully absorb it. A university doesn’t magically anoint you with ability when you graduate. In fact, most people seem to leave university very little actual ability and a whole lot of knowledge. Ability comes from the combination of knowledge, practice, and aptitude.
So, what separates us impostors from the Real Deal? Knowledge, practice, and aptitude. That’s it. Knowledge is attainable, practice is do-able, and we just have to live with aptitude. Oh well.
Here’s a big secret I’ve discovered: I’m not the only impostor in the industry. The first time I met Rob, he interviewed me for a podcast. We ended up talking about Impostor Syndrome. On hearing my interview, several people told me “Wow, I feel like that too!” The more I dig, the more I think we all feel like that at some points in our careers.
So, welcome to Impostor Club! I’m kinda bummed now that I know it’s not as exclusive as I had thought, but it’s nice to have company I guess.
Anyway, now we have a handbook.
Ironically, reading and using this handbook might cause you to graduate from the club. If that happens, I wish you luck as you enter full scale computer software programmer status. Let me know how it feels. I’ll miss you when you’re gone.