A great many programmers don’t have any, or at least very much, formal computer science education. Except for a single Fortran programming class I took decades ago, I haven’t had any formal programming training. "Self-taught" comes to mind in cases like mine, but it’s a bothersome term. Most self-taught programmers had the help of a cadre of highly skilled mentors. I certainly did and continue to. So we’ll use the term "self-taught" to describe the informally trained, but with a nod towards all those who helped us on the way.
Even being self-taught, I can mostly hold my own in nerdy discussions with my computer-sciency, formally-trained mentors. But every once and while, topics like lambda calculus, abstract syntax trees, NP-complete, automata theory, and even mundane shoulda-known-that topics surface and I am left in the dust. If these mentors didn’t already know (and they did!), they’d brand me as an imposter. They know I am not really a card-carrying computer scientist, that I am a self-taught meatball. That’s what Rob Conery calls an "imposter."
Writing to learn
For us programming imposters, Conery has written a great book, "The Imposter’s Handbook." This $30 US, 781-page book attempts to plug some of the holes in the imposter’s computer science repertoire. It covers several foundational computer science concepts that many of us imposters have not taken the time to learn. Think of it as a Cliff Notes version of a shelf-full of ponderous computer science textbooks. Conery doesn’t say it in exactly these words, but you get the distinct impression that he himself was the book’s primary audience—he is committed to writing about these topics so that he understands them better and the reader gets to ride shotgun with him as he does (William Zinsser’s great Writing to Learn book comes to mind).
Pick and choose
The Imposter’s Handbook doesn’t try to teach everything there is to know about any one concept and Conery encourages his readers to learn more later on their own. Even at a Cliff Notes-like pace, the book drills into many heady computer science topics and concepts. But Conery’s airy, one-of-the-guys delivery, and his great, nearly childish, but quite effective illustrations, make the topics approachable, clear, and fun.
That said, the book does veer into deep territory even for really clever, self-taught programming meatballs. You might not initially see the value in learning Big-O notation or believe that learning a little lambda calculus could make you a better AVR or RPG programmer. That’s OK. Skip those chapters at first if you want to and zero in on his bread-and-butter coverage of data structures, algorithms, programming languages, databases, and software design. There is solid gold in these chapters for imposter programmers of any degree.
The core ethos of The Imposter’s Handbook is restated on the book’s next-to-the-last page: Be an explorer. Push the edges. Find out what’s possible. Dig deeper. Don’t stop learning. For these reasons, and many more for imposters and non-imposters stuck in their ways, get this book!