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 Learn in Public.
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
- July 2017: applied to General Assembly, Hack Reactor, and Full Stack Academy (FSA). Interviewed Sacha Greif for Software Engineering Daily. First major contribution to an open source project.
- 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).
- October 2017: Won Developer award at FSA hackathon. Finished Senior Phase (technical interview prep, made my own GraphQL gametorial). Became a React contributor during Hacktoberfest.
- 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.
- 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.
- 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:
Social Scientists call it the Dunning-Kruger Effect:
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.
Thanks to Jeff K, the CodingBlocks gang (Firro, Joe, dance2die, and sowen) and the FreeCodeCamp community for reviewing the full length draft of this essay!