Immerse, get mentorship, and don’t look back.
People often ask me how I started coding, and they are always surprised to hear that I learned after 30.
This is my story about starting from zero to becoming a full stack engineer at Udacity— a Silicon Valley startup whose mission is to democratize education. Specifically, it is about how I got a job despite every junior web engineer posting seeming to require “a degree in computer science or two years of professional experience.”
Along the way I strained relationships, depleted my savings, collapsed my self-confidence, and gave up. Then, after reflecting on that failure over a year, I tried again with a new mindset, and succeeded.
Today, I lead a team of ten engineers with responsibility for several core systems including admissions, student project code reviews, in-classroom mentorship and live help, forums and our in-person learning experience, Udacity Connect. We support hundreds of thousands of students taking free courses and paid Nanodegree programs for cutting-edge career paths like AI, machine learning and self driving car engineering, in addition to more mainstream software engineering like React, iOS and Android.
This is how it happened.
How to fail
I had fallen out of love with my first career of seven years — I couldn’t see myself doing it for the rest of my life — and I decided that I wanted to be a software engineer. I don’t know why I wanted to do it. I just felt a magnetic attraction. I wanted to build things. For context, I am bad at math, I didn’t know anyone who was a programmer, and I had no idea what I was getting into or whether I would like it. Friends helpfully suggested a) this was nuts and b) I was too old.
In January 0f 2014, I went to a General Assembly bootcamp for Ruby/Rails in SF. It was relatively early days for bootcamps and the experience was pretty raw. There was a large class size (they had combined two cohorts) with different levels of preparation. The curriculum was in flux. It felt chaotic. A few weeks passed, we began to hear stories about grads still looking for jobs, and a palpable sense of herd anxiety set in — were we actually going to become software engineers after quitting our jobs and investing $10,000? I left before I had to pay for the second semester. However, I did learn a lot, there were some good instructors, and a number of my classmates went on to great careers as web engineers, but it didn’t seem obvious at the time.
I then took a month to build a front end portfolio, and bootstrapped myself as a Javascript contractor applying for small projects. This early focus was productive — I actually landed some work. But just as my optimism was up, a few months passed with unsteady work, and doubt set in.
Things I learned from contracting as an independent junior engineer:
You spend as much time sourcing work as coding
Getting projects lined up back-to-back is very hard
You don’t get a lot of technical feedback
Inconsistent income creates stress at home
There is no one to tell you if you are learning the right things
I felt adrift. I started looking at what it would take to find full time employment. I had heard there were a lot of self-taught programmers in Silicon Valley. I was confused and frustrated when all the job postings seemed to indicate otherwise. Every junior web engineer posting seemed to require: “a degree in computer science or two years of professional experience”. How do you get two years of professional experience without a degree, if a degree is required? How do self-taught engineers get jobs?
I started sending out applications despite the requirements. I began to research the interview process, hoping that I’d get one. I realized I knew zero about data structures and algorithms and had no idea how to get started. Suddenly, I felt hopeless. I wasn’t on track to meet the requirements for any jobs I wanted, and I doubted I would pass the interview if I did.
It was a humbling moment. Six months in, having strained my finances and relationships, I was little more than a bootcamp drop-out and a semi-employed Javascript contractor. So I made a very practical decision—I gave up. I told friends and family I had made an impulsive and expensive mistake, and I found a job that was a better fit based on my prior career.
How to succeed
I soon became remorseful. You have only truly failed when you give up, and I had given up.
A year went by and I couldn’t let it go. For whatever reason, I continued to code, a little here and there. It became a vexing hobby, absorbing a lot of time, often frustrating, and I had little to show for it, but I couldn’t free myself from the magnetism of wanting to build things instead of admiring other people’s work.
I did a retrospective of why I had failed:- I had quit- I had no idea what I was doing- I wasn’t getting high-quality experience or feedback
So I made a plan:- Don’t quit- Find a mentor- Work unpaid if the experience is good
I told everyone I knew that despite having failed a year before, I was going to do it again.
First step, I would need work experience.
How I got an internship
A year previously, I had read a security article on Hacker News by Loren Sands-Ramshaw. I realized we went to the same college a few years apart, but while I had been busy getting average grades in liberal arts classes, he took CS seriously and went to work for the NSA. I wrote him, asking about the feasibility of learning to code, and he sent back a thoughtful and encouraging response.
Remembering this a year later, I looked him up on LinkedIn, and saw that he had a mobile betting startup called Parlay: Javascript with Meteor + Cordova and a Bitcoin vault. I immediately wrote him to volunteer. After a brief interview, he agreed to take me on for a nominal stipend. (By the way he is now a core contributor to Meteor/Apollo and a highly paid consultant!)
This completely changed my trajectory. Now I just had to make it work.
How to be a great intern
I came from a client service industry and my instinct was to just apply those lessons to being an intern. The key takeaways are responsiveness, positivity and immersion in your work.
Try not to let five minutes go by without acknowledging a message.
Start answers with ‘yes’ whenever possible.
Invest an exorbitant level of energy into your work. Your mentor will reflect your intensity.
Try not to ask your mentor what code does, or where a feature lives, before you have made an effort to find it, read it and understand it. If you still have a question, it will be more constructive.
But, you are not being unpaid just to read! I was certain to commit code at all hours of the day. 2am pull requests always look like hard work.
If you are serious, and you immerse, you will learn fast.
What I learned from interning: Immersion is the secret to rapid learning
In my experience, how to learn a language is a good model for how to learn to code. The key is immersion. I lived in Russia for a few months in college. Deprived of language you understand, you become desperate to understand what is going on. It is physically painful. But after a few weeks of suffering from immersion, learning becomes exponential.
I tried to learn to code the same way.
Immersion means 100% focus. If possible, no friends, no drinking, no TV, just reading and writing code. If you take five minutes off to read the news, be aware you are breaking the mental state of immersion. Stay focused, be patient, your mind will adapt. Eliminate all distractions, of which you may find doubt to be the loudest. Immersion is the difference between success and failure.
How do you know if you are immersing? If you are not dreaming in code, you are not immersing yet.
Everyone has time commitments, so to learn as fast as possible, try to apply the principle of immersion as best as you can.
How I got a job
When I shifted from my internship to looking for paid work, I began to put together an updated portfolio with a focus on React and Node — there are a lot of posted web jobs in this stack, it is a pleasure to work in, and I thought I’d have a better chance at success. My internship was grounded in Node, and I then took Stephen Girder’s very excellent React+Redux courses from Udemy. After the intensive Javascript internship, I found I was far more productive and more confident than I had been before — learning React felt easy. Redux not so bad. Graphql was a treat. Immersion and mentorship had paid off.
During my internship, my mentor Loren had sent me to Udacity for a browser rendering optimization course produced with Google. The course was great, and I noted that they had career-focused Nanodegree programs. I was intrigued and made a mental note.
While I was applying for web engineering jobs, I thought that I would benefit from formal career coaching and I went back to Udacity to look at their programs. The full stack Nanodegree program at the time only had a Python focus, and I was personally focused on full stack Javascript jobs. But my mentor had encouraged me to learn a strongly-typed language when time allowed. So I signed up for the iOS program to learn Swift, which was a lot of fun. I don’t specifically recommend splitting your focus between web/mobile and front/back end when looking for your first job! (Hint: we now have a React Nanodegree program!). But I do strongly recommend learning a strongly-typed language — it transformed my Javascript. And I found Udacity’s structured approach to building a portfolio while getting resume feedback and interview practice to be super helpful.
Near the end of the the course, when I was finally starting to get full-time interviews, I was invited to interview to do a React contract for Udacity-Blitz, which is Udacity’s student contracting platform. The recruiter said my three-month Javascript internship plus my React portfolio got me the interview. For contracts in general, I believe the quality of your portfolio is more important than preparing for technical interviews. If you are a Udacity Nanodegree graduate, you should definitely reach out to Blitz. They have executed hundreds of projects for clients including Udacity itself, where I got a gig and applied my “how to be a great intern” experience.
I worked so hard. Six weeks later I had an interview with Udacity for a full time position. I spent two weeks preparing intensively, specifically by using Udacity’s technical interview course which seemed very meta. The course gave me a helpful framework and a lot of confidence. Udacity interviews are more focused on code challenges than algorithms—which I think is a positive trend in the industry — but knowing about data structures is very useful.
I will always be grateful to Oliver Cameron for taking a chance on me as an engineer, and later James Richards for giving me the shot to manage a new team.
Final thoughts
Reflecting on my path to becoming a software engineer, I made a lot of mistakes and I got a few things right. In total, I was unemployed for over a year. I learned humility, perseverance and focus.
I am fortunate to be working with awesome colleagues, for a company whose mission I value, doing work I love. My advice: immerse, get mentorship, and don’t look back. I can promise it will not be easy.