<em>2019 Edit: I am very gratified that this writeup continues to help people over a year after publishing! I have updated my thoughts in a new essay called </em><a href="https://www.swyx.io/writing/learn-in-public/" target="_blank"><em>Learn in Public</em></a><em>.</em>
People Mentioned
Companies Mentioned
2019 Edit: I am very gratified that this writeup continues to help people over a year after publishing! I have updated my thoughts in a new essay calledLearn in Public.
In the last year (and a bit), I went from Hello World in Javascript, to deploying fullstack webapps, to getting freelance jobs, to interviewing at top tech firms including Google, and receiving multiple six-figure offers as a professional software engineer. Here’s how I did it.
What I did in a nutshell
Nov 2016: FreeCodeCamp Frontend Development Certificate (HTML, CSS, basic JS). Decide that I am going to do this with No Zero Days.
Dec 2016: started FreeCodeCamp Data Viz Development Certificate (SASS/D3/React)
Jan 2017: completed FreeCodeCamp Data Viz Development Certificate (mostly React/Redux)
Feb 2017: started FreeCodeCamp Backend Development Certificate (Node, Express, MeteorJS)
Mar 2017: completed FreeCodeCamp Backend Development Certificate (basically all MeteorJS)
I more or less burned out here and didn’t do much in Apr and May.
Jun 2017: applied FreeCodeCamp knowledge to make small apps for work, including with Vue and Firebase
August 2017: started Junior phase at FSA (Node, Express, SQL, raw Javascript). Started the Impostor Syndrome audio documentary to relate my classmates’ progress. (2019 edit: now dead)
September 2017: finished Junior phase at FSA (React, Redux). Led my own React workshop. Started Senior Phase (React Native, PassportJS authentication, git workflow, CI/CD).
November 2017: Got first freelance clients. 5 hours a day of technical interview prep with AlgoExpert (started by a FSA alum) and CTCI, conducting search from FSA Hiring Day and own contacts. Received first (>$120k!) offer. Turned it down.
December 2017: Gave my first live React talk to over 100 people. Messy series of job search events with companies from Spotify to MongoDB to Google. Receive multiple offers and finally accept a six-figure offer with a great company.
That’s it! My year in five minutes. In preparation for this post I wrote out the month by month process in a ton of detail on my devblog and on FreeCodeCamp so if you need more info head there. My only goal here is to show you the big picture of what I did and give you some inspiration if you would like to do something similar. It can be done.
Disclaimer: In the first draft of this post I did not mention the fact that I am not new toprogramming(I have coded in VBA, Python, and Haskell before but never as a professional software engineer). I am only new toweb developmentandJavascript. I also shortened the timeline to 12 months given my 2 burnout months. This was a mistake and I have restored the timeline.
Guiding Principles
All these bullet points above might make the transition process seem easy but they paper over a lot of long nights and some weeks where I felt like I was repeatedly banging my head against a brick wall. Javascript is evolving at a tremendously fast pace (see this viral article pointing out the tremendous confusion going on!) and I wanted to share with you some overall principles that helped me navigate through it all.
No Zero Days: I picked up this idea from /r/nonZeroDay and it made sense. In short, you simply decide to do -something- towards your goal every single day without fail. This sounds tough, but the upside is, that -something- can be the smallest, tiniest, most inconsequential thing. Want to work out more? Decide to put on your shoes and walk into the gym and do just one push up and you’re done. You can walk out. That day will not have been a zero. No. Zero Days. The beauty of this is of course you’re probably not going to only do one push up. You showed up. You’re going to do more. That’s the NonZeroDay idea.
Do Everything Twice: Bootcamps are not magic machines. My outcome was above the 90th percentile of bootcamp graduates because of luck plus all the prep I had done going in, which basically meant that I was doing everything the second time around instead of the first. Things that were just opaque copy-and-paste-from-StackOverflow magic incantations to me became much clearer the second time around. Blogging about my journey and interviewing my fellow classmates for my documentary meant I was reliving the same bootcamp repeatedly and drawing insights from reflecting on the experience.
Teach To Learn: I gave my own workshops on React and PassportJS to my fellow peers and this not only forced me to explain things but also answer questions that I hadn’t considered in my own narrow thinking. I gave a talk about my experience becoming a React contributor even though I was just a recent newbie. No matter where you are in your journey you are qualified to help someone newer than you. In many ways, you are the best person to do this. Teaching also has a nice side effect of training you to talk while you do live coding in order to show a technical point, which is a marvelous mental juggling act. As it happens, it’s exactly what you need to ace technical coding interviews! My favorite interview memory is teaching a very senior Googler about Javascript generators during my interview. It puts them in a different mental state and it shows you aren’t just a dead weight to the team. What he didn’t know was that I was just channeling Kyle Simpson from a recent Frontend Masters workshop!
Time is More Important Than Money: Humans have a curious aversion towards paying for things that might help them. There is a rational basis for this: most things are disappointments and we don’t want to waste money especially when free options are available. Instead of going for paid programs like Team Treehouse, Frontend Masters, Egghead.io and Pluralsight, I biased towards free options like The Odin Project, Codecademy, Stanford CS50 and FreeCodeCamp. Although I turned out fine in the end, I believe I could have reached the same result in less time if I had sprung for the paid options earlier. Conversely, if I had not gone to a $17,000 bootcamp, I believe I would have taken at least another year to get to where I am, if I didn’t give up by then. (Just as an aside — there are financing programs, scholarships, and tuition forward programs that make bootcamps much more affordable, but I paid out of my own savings.) The increased salary in my new job represents a 1yr return of at least a 2x multiple on that investment, even including opportunity cost and excluding the value of future years of income. Don’t skimp on $10, $40, even $200 course material if it can help you get to that top tier of engineers that are in demand.
Find a Community: Humans are also inherently social creatures. Because I didn’t have friends or family that understood what I was going through, I turned to online support networks. I downloaded dozens of podcasts so that the people talking in my ears all day were programmers too. I found Saron Yitbarek’s amazingly supportive #CodeNewbies community. I joined the CodingBlocks Slack group and posted about what I was learning every single day. And of course, a strong community comes with a good bootcamp. These people have their own lives to live and may not ever help you in any way but they will celebrate your little wins. I cannot understate the psychological effects of having your own team of cheerleaders spamming emojis on your slack message, or having perfect strangers reply to say they are going through exactly what you’re going through.
Systems, not Goals: I owe this to David Yang, founder of my bootcamp (interview here). Don’t fixate on the outcome. Maybe you’ll take 24 months, or 6. Wanting to be a software engineer doesn’t tell you -how- to get there. Don’t take my story to mean “I must do FreeCodeCamp and take a bootcamp”. Plenty of people are still unemployed months after taking a bootcamp. Focus on how I, and others who have totally different paths from me, spent our day to day, and dealt with roadblocks. Have a system, and if that’s not working, figure out what else you can do and fix it. Obsessing on a specific goal and despairing if you don’t reach it doesn’t help.
Fight Impostor Syndrome
I want to leave you with one concept and it has many names.
Ira Glass (the uber podcaster at NPR) calls it The Gap:
And for the rest of us, the term is Impostor Syndrome:
It’s what I named my audio documentary (2019 edit: now dead), with the idea that if I could name the elephant in the room, I could fight it. What’s more “impostory” than going from paying thousands of dollars and months of time to learn something, to actually being paid many thousands of dollars to do it? Worse still, having the audacity to negotiate over it?
It is always going to be a truth that the more you know, the more you also learn about that stuff that you didn’t know that you didn’t know. So if you are doing it right at all you are going to feel like you are terrible at what you are doing. This is good. Just don’t stop there, keep working on your system.
Be at peace with the fact that there are multiple paths to what you want and the only way to figure out which one works for you is to try them. Often twice. Pay if you have to, because this is valuable stuff. Find supportive people. Do this every day, then teach what you learned. These are the principles you should take with you on your new journey.
And remember: No Zero Days.
If this essay helped you at all and you’d like to update me on your own 2018 journey, find me on Twitter @Swyx(https://twitter.com/swyx). I’d love to be part of your cheerleading team!
Thanks to Jeff K, the CodingBlocks gang (Firro, Joe, dance2die, and sowen) and the FreeCodeCamp community for reviewingthe full length draft of this essay!