Self-Doubt and Being Self-Taught

Taking some time to reflect in London, England

Thanksgiving 2017 I was hanging out with family near Las Vegas and generally having a great time, but I couldn’t stop thinking that maybe I should go back to school.

I was never actually good at school. I have a degree in Community, Environment and Planning from the University of Washington, which outside of my passion for sustainability, I was drawn to because the classes don’t use traditional grades and the students get to help set the curriculum. After completing a 2-year mission for my church and dropping out in the middle of a disappointing semester in BYU’s masters of public policy program, I went back to the only other skill I had: computers.

I got my first job as a PHP developer in 2008. 10 years later I have an incredible job as a JavaScript Architect at PayPal, working from home, helping our devs build better web apps. It’s a good deal, but I couldn’t help questioning how long it would last and without a proper computer science background if this is the last company that will ever hire me. Is this what impostor syndrome feels like?

Last Thanksgiving I decided to do something about. Starting with the most obvious thing: polling people on twitter.

I got a ton of feedback. It ranged from: “Yes, it was great!” to “that’s the biggest waste of time in the world”. The more I spoke with people and learned about what computer science people actually learned and how much math and science was involved I realized a formal CS degree was really not going to work for me.

There’s a wildly popular book ,“The Imposter’s Handbook”, which markets itself as a way for self-taught programmers to fill in the gaps missing in their knowledge. I decided to read it. I also bought “Nine Algorithms that Changed the Future” just to to wrap my mind around the kinds of problems these CS people are solving. (Later I decided to try “Cracking the Coding Interview” and “Grokking Algorithms”, but neither could keep my interest for as long.)

Enthused by my reading and feeling confident I could really learn the fundamentals I decided to enroll in Udacity’s free Intro to Computer Science course. I also signed up for Intro to Machine Learning at the same time and threw myself in to learning Python and studying the basics of Python and CS.

As someone who writes computer programs in JavaScript all day long, learning Python and writing trivial programs in it isn’t very hard. It was super fun however and I was learning new things daily. After a few weeks it wrapped up and I didn’t really know where to go from there.

Around that time I got asked to speak at QCon London about building Scalable and Dependable JavaScript Applications. The wide range of concepts and languages covered by the conference was exciting for me. I met people working in quantum computing and working in rust and golang. I left full of ideas about how to use new tech at work and was determined to push myself beyond web programming and expand my potential.

A bit nervously, I applied to Udacity’s Flying Car Nanodegree program. I knew I didn’t really have the required Math and C++ skils, but I figured I could figure it out. The tie-in for me with both computer science and my interest in transportation, renewable energy and efficient cities made it seem like it was the perfect program to propel my career into the future (or something like that).

The course started off really strong. Within the context of flying people around the bay area we covered interesting things like A* Search, Bresenham’s line drawing algorithm, KDTree’s, graphs and more. All of the algorithms made sense and were fairly easy to grasp (more or less!). My computer science knowledge was clearly growing and it was giving me confidence! Hurray!

One day I went to a meetup for Flying Car students at Udacity headquarters. One of the them was working for an autonomous vehicle team at a startup automaker in the bay area. It turned out that he was building tools with JavaScript and his team was hiring! As I looked into it many self-driving car teams were also hiring JS engineers. I decided maybe this was my chance to take a leap into the brave new world of self-driving cars and prove my imposter syndrome wrong.

The day before the interview with my friend’s company, I got a call from the recruiter saying they can’t hire people outside of the State of California. As much as I wanted to work on something exciting and prove my new skills were worth something, my family and I love living where we live and aren’t giving up the family time that remote work gives us. Surprisingly though one of the other companies where I had applied, Cruise Automation, wrote me back and said they’d be willing to interview me for a similar position and would be open to remote work. I was stoked!

While it was only a few days away, I crammed videos from MIT’s Introduction to Algorithms course in preparation. I was also skimming through Grokking Algorithms and the Imposter’s Handbook repeatedly, hoping I’d glean something that might prove useful in the interview. Unfortunately, it didn’t help.

While about half of the interviews went well, the last one was really brutal. I was asked to solve a certain type of puzzle using JavaScript. Could I figure out the correct algorithm and write a solution in JavaScript in under 45 minutes? I knew my computer science brain was in there somewhere. I was thinking through KDTrees and A* search (which were not what I needed) and other things I had learned from the flying car class. Some of that was still in my brain. Basically everything I’d picked up from the books and videos I’d watched had been too shallow to help when it came down to it. Without the muscle memory of solving problems like this regularly I kept making huge mistakes, asking questions, trying to correct and running into more problems. My final attempt ended with a syntax error.

I left the interview nearly in tears, really in a state of shock. How did I blow that!? It wasn’t even that hard of an interview! Somehow everything I’d worked for, the last 6 months learning CS, taking on these new challenges, had led me to that point. And I had failed.

I got to the airport, opened my laptop and the solution to the search algorithm immediately came to me. It was in my brain all along, but in the high pressure interview situation it just wasn’t coming out in time. I sent the solution back to the interview panel, apologizing and hoping they might forgive my late answer. The following Tuesday I got word back that they decided to pass.

Gutted from the rejection and also knee-deep in organizing the AnxietyTech conference, I decided to drop the flying car course and throw myself back into my existing job. Had this whole experience been a total waste of time? I needed to take some time to not think about it, or anything really.

This Thanksgiving, a year after I had started this journey I thought it would be a good time to reflect on all of this. My wife and I were talking about our accomplishments for 2018: We’d organized 2 successful mental health conferences together, got a Pyradoodle 🐕 and spent a ton of time with our kids at our new cabin in Astoria, OR. She shared some of her goals for the upcoming year: working toward a Masters Degree in Children’s Literature and opening up a children’s bookstore. And I thought about mine.

Suddenly all of my memories of last years’ goals and hopes came rushing back to me. Dropping out of the flying car program. Not getting that self-driving car job. Not really learning Computer Science enough for it to matter. After sitting with that regret for a while I realized that my life is pretty great. Book knowledge isn’t ever going to be my thing. Neither will writing algorithms under pressure, but I have a lot to be grateful for!

Many of the tech workers out there do have that CS degree. They can get those Google-type jobs that may allude me for the rest of my life. But I have a unique set of skills I learned from being self-taught. Pushing myself to learn and excel with nobody grading or watching over me. Figuring out the right technology to embrace at the right time and teaching everyone else how to use it. To hustle and work hard to learn not just how things work, but how to use them to make my coworker’s lives better. The boldness I picked up as a missionary or the consensus-building skills I practiced in my college program. Those things I could have never learned just from getting a computer science degree.

I already have what I need to be successful. I just need to believe in myself.