The Imposters Handbook
by Rob Conery
2016 Big Machine, Inc. All rights reserved.
ISBN 978-0-692-93303-9
Publishers Version: 2.2.0
All rights reserved. No part of this publication may be reproduced, distributed, or transmitted in any form or by any means, including photocopying, recording, or other electronic or mechanical methods, without the prior written permission of the publisher, except in the case of brief quotations embodied in critical reviews and certain other noncommercial uses permitted by copyright law. For permission requests, write to the publisher, addressed Attention: Rob, at the address below.
Publisher: Big Machine, Inc 111 Jackson, Seattle WA 96714
November, 2016
Table of Contents
Foreword: Scott Hanselman
I never did a formal Computer Science course. My background was in Software Engineering. For a long time I didnt understand the difference, but later I realized that the practice of software engineering is vastly different from the science of computers.
Software Engineering is about project management and testing and profiling and iterating and SHIPPING. Computer Science is about the theory of data structures and O(n) notation and mathy things and oh I dont know about Computer Science.
Fast forward 25 years and I often wonder if its too late for me to go back to school and learn computer science. Im a decent programmer and a competent engineer but there aregaps. Gaps I need to fill. Gaps that tickle my imposter syndrome.
Ive written extensively on Imposter Syndrome. Im even teased about it now, which kind of makes it worse. How can YOU have imposter syndrome? Well, because Im always learning and the more I learn the more I realize I dont know. Theres just SO MUCH out there, its overwhelming.
Even more overwhelming are the missing fundamentals. Like when youre in a meeting and someone throws out Oh, so like a Markov Chain? and youre like Ah, um, ya, itsahtotally like that!
If only there were other people who felt the same way. If only there was a book to help me fill these gaps.
Ah! Turns out there is. Youre holding it .
Scott Hanselman @shanselman August 12, 2016 Portland, Oregon
Scott Hanselman has been computering, blogging, and teaching for many years. He works on Open Source .NET at Microsoft and has absolutely no idea what hes doing.
Foreword: Chad Fowler
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? Im just a saxophone player who stumbled into computer programming. I have no idea what Im 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. Its 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 Softwares 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 didnt 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 Id 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. Dont 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 youre 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 Ive never gotten over that nagging feeling that I just dont belong here. You know what I mean? You know what I mean. Youre 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 youre talking about which language to use on the next project, and in a heated discussion the word monad is invoked.
Oh no. I dont know what to say about this. How do I respond? How can I stop this conversation in a way that doesnt expose me for the fraud I am? WHAT THE HELL IS A MONAD?
Haha, ya.
I hope that non-response made sense, you think as you walk toward the restroom, pretending thats 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. Im pretty good at it I guess.
But I didnt 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 isnt a musician. In college you learn about algorithms. That sounds hard. When I write code, I dont use algorithms I think. Or do I? Im not sure. I dont invoke them by name most of the time. I just write code. These college programmers must be writing stuff thats unimaginably more sophisticated since their code has algorithms!