How I learned to code in my 30s
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.
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.
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.
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
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.
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.
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.