Professional Documents
Culture Documents
Save
Whenever I would start reading a success story, I would immediately look to find the
author’s background, hoping it would match mine. I never found someone who had
the same background as I did, and most likely mine won’t match yours exactly.
113K 346
Nonetheless, I hope that my story inspires others and acts as a valuable data point
Get unlimited access Open in app
that can be added to your success story dataset.
Full Disclosure
I took a Visual Basic for Applications (VBA) course in high school (nine years ago). In
my freshman engineering course (seven years ago), I learned some C, Python,
Matlab, and Labview. I graduated from a good university with a chemical
engineering degree and a good GPA (three years ago). I hadn’t done any
programming outside of school, in high school or college, until I decided I wanted to
learn last year.
After college, I got a job as a Process Engineer at a refinery. I worked there until I
changed careers into Software Engineering.
On May 27th, 2017 I found myself googling about MBAs again, and somehow I
stumbled upon software engineering. It seemed like a perfect fit.
Software engineers are in increasing demand, salaries are great, and it’s the perfect
industry from which to get into the startup world without needing a ton of initial
capital. All you need is a computer, and your opportunities are limitless (kind of).
In no other engineering discipline can you just have an idea, start building it, show
it to users, and iterate with little capital and low barrier to entry. In chemical
engineering, you essentially need a running plant or a lot of money to design a plant
if you had an idea for a new product.
I had heard of people quitting their jobs and attending a bootcamp, but the more I
read about it online, the more I realized that you can totally learn it all on your own
if you are committed and focused.
You might argue that you are losing out on the networking and career advice
provided by a bootcamp. This can be true, but I was fortunate in that I was living in
the Bay Area which allowed me to attend several meetups, so I networked that way.
Besides, the worst case was that I’d realize that I couldn’t do it on my own, and then I
Get unlimited access Open in app
would quit my job to attend a bootcamp.
The Goal
You need to have a goal. Especially if you are trying to learn while working full-time.
It is easy to let your learning drag on and on if you don’t have any external pressure
pushing you. So you need to create internal pressure. Your goal should be simple
and quantitative. You should do enough research to come up with a reasonable goal.
Mine was the following:
Get a software engineering job within one year with the same or better salary than
I am making right now.
The Plan
Get unlimited access Open in app
Once you have a goal, you need a plan to help you get there. This is where you
consume as many success stories as you can. None of them will match your exact
situation, but you can take some advice from each one. I developed (and iterated on)
my plan using resources such as the learnprogramming subreddit, the
freeCodeCamp forum, and Medium.
On May 27, 2017 I decided I was going to make the coding plunge, and I dove in head
first. That day I decided to start putting in no more than 40 hours per week at my
job, so that I had time to code after work and on the weekends. Luckily for you, I did
a pretty good job of documenting my progress.
2. Follow freeCodeCamp until I can build portfolio-level full stack web apps on my
own
To start, my plan was simple. At the time, I thought I was going to follow Google’s
Technical Guide, so I started with their recommended introductory course, Udacity
CS101.
While I was taking Udacity CS101, I had started reading the learnprogramming
subreddit quite heavily. I read that it was important for self-taught developers
looking to make a career change to be active online. I decided to make new Twitter,
Reddit, Stack Overflow, Medium, and Quora accounts using my full name, so that I
could build up an online presence.
Also, I decided to stop reading distracting media like Instagram, Facebook, and non-
programming subreddits. I would only check my phone for programming-related
news and posts. This was crucial in making sure that I was finding out about the best
learning paths and learning resources. It was because of this that I found out about
Harvard CS50 on edX.
I was originally content with just doing one intro course, but everyone seemed to
recommend Harvard CS50, so I decided to dive into that next. CS students at other
schools had taken this course and said they learned more in CS50 than a year or two
at their university studying CS. The general consensus was that the course was
difficult but worth it. By the end of Month 0, I had completed the first 5 lectures and
homework assignments.
After CS50, I decided to set up my XPS 15 to dual boot Windows and Ubuntu. That
was a frustrating weekend. I messed up my partitions and almost bricked my laptop.
I was close to chucking my laptop and getting a new one.
I slowly weaned myself off of Windows and eventually was solely using Ubuntu. I
wanted to force myself to get comfortable with the command line which I think
worked to some degree, but I still have a long ways to go.
I started 100 days of code to make sure I stayed focused and coded every day. It is
important to document your progress. If you are making progress every day, it won’t
seem like much but when you look back a month or several months, you will realize
that you have actually made quite a bit of progress which motivates you to keep
going.
I knew that networking would make or break me, so I mustered up the courage to go
to my first coding meetup. I had never gone to any meetup let alone a coding
meetup. I was so nervous that after driving there, parking, and walking to the door, I
almost turned around and went home.
Get unlimited access Open in app
It helped that it was the first meetup for the group. I quickly realized that there was
no reason to be nervous. No one knew each other, no one was judgmental, and
everyone was eager to learn. This was the beginning of a meetup-spree. I ended up
attending over 50 meetups in 9 months.
I’m glad that I started going to meetups early. Most people only started to attend
meetups when they were looking for a job, but at that point it is almost too late.
There are so many reasons to start early. To name a few:
1. Developing relationships takes a long time. Starting early means that you have
connections who can vouch for you when looking for a job later
3. You can learn new frameworks, tools, and learning resources from people who
are ahead of you. This can influence your future learning plan.
There was some uncertainty at this time in my coding journey. This was about when
I needed to decide what kind of software developer I wanted to be.
Ultimately, I chose web development because it seemed like there was high demand
and also a lot of online resources. Once I had that figured out, I needed to figure out
what to do next. Some people recommended that at this stage I should think about
web apps I wanted to build and then get going. Some people recommended The
Get unlimited access Open in app
Odin Project or freeCodeCamp.
The guy that was running the weekly meetup I was attending knew Ruby and
wanted to do projects with Ruby. This was a big reason why I made the decision to
go all in on The Odin Project.
That is one of the downsides of going the self-taught route. One minute you think
you know what path you should take, but then the next day you wonder if that was
the right move.
I read that Ruby was falling out of favor, and I proved this by searching for Ruby vs
JavaScript jobs, so I ended up starting freeCodeCamp. The one thing that bothered
me about freeCodeCamp was that they came up with the project ideas, so every
camper does the same projects. This concerned me at first because I wanted to
stand out to recruiters. However, I ended up loving freeCodeCamp, and now I highly
recommend it. For more details on my experience and recommendations regarding
freeCodeCamp, check out my writeup here.
Month 2 — YDKJS, freeCodeCamp Front End, React
Get unlimited access Open in app
I started reading You Don’t Know JavaScript, because everyone recommended it to
supplement freeCodeCamp. I had to re-read several sections as it is pretty dense, but
it’s a perfect resource to learn lexical scope, closures, promises, and all parts of
JavaScript that you hear about and want to learn but never do because they seem
difficult.
In hindsight, maybe I should have focused on making the projects more appealing.
Perhaps, this would have helped me learn CSS more deeply.
The next step was learning React, and I was pretty pumped.
I had heard so much about it, and I was ready to fit in with the cool kids. However, I
Get unlimited access Open in app
was a little hesitant given the licensing issues at the time. I’m really glad that is no
longer an issue. Learning React was difficult for me. I wasn’t aware of any good
tutorials then (but it seems like there are a ton now).
I tried reading the docs and following along with Facebook’s Tic-Tac-Toe tutorial, but
I didn’t quite understand all of it. I was told if that wasn’t working for me, then it
meant I didn’t understand JavaScript enough. So then I went back to reading You
Don’t Know JavaScript, but again that was too dense for me.
That meetup I had been attending weekly decided that they were going to build
projects with full stack JavaScript instead of Ruby, and they decided that the first
project would be to build a website for the meetup group, CodeClub.Social.
I developed cards using React and Meetup API allowing the user to sign up for the
next three meetups from our website. It was a little difficult for me to take a quick
break from freeCodeCamp to do this, but it was an opportunity I couldn’t pass up. I
was happy to be working on a project with a small group of people. It also helped me
learn Git and Github.
Before the month was over, I started working on the back end section of
freeCodeCamp.
I was itching to make full stack web applications, so as soon as I saw the title of this
project, I had an idea for my own project. I would make a node app that would store
random imgur URLs in a database, and then make a front end that would output a
user-specified number of those random images. What everyone says is true: you
work harder and have more success when you are working on a project that was
Get unlimited access Open in app
your own idea.
Once I got it to work, I was very proud of myself. It was ugly and clunky, but it
worked.
As I was working through freeCodeCamp, I was learning about what projects would
be within my capabilities. I was running regularly at the time, so I would come up
with ideas on my runs and write them down when I got home. That way I would
have a list of project ideas when I was ready.
I finally felt ready to start making my own useful and polished full-stack web apps to
share with users and put on my portfolio. I was so ready to get started.
When looking for a new restaurant, I always found myself opening Yelp to check
reviews, and then opening Maps to check their reviews. What if I made an app that
compared both side by side?
So I made Yeggle. I used Node/Express/React along with the Google Maps and Yelp
Get unlimited access Open in app
APIs. There were a couple obstacles I didn’t think I would be able to overcome, but
in the end I finished and I was very proud of my app. Then I posted it to Reddit, and
no one cared. That was a bit of a bummer, but I didn’t let it get me down.
Month 5 - StockIT
I didn’t get quite as much done this month, as I started it off with a two week
vacation to Japan and Thailand!
But I did start and complete my next project. I kept reading about how difficult it
was to get a job as a self-taught developer, so I thought I needed to do something
unique. I remembered a game where a Dow Jones stock graph started trending, and
you had one opportunity to buy and one opportunity to sell, and the goal was to beat
the market. The purpose of the game was to show you how difficult it was to beat the
market.
My idea was to make a game similar to that, but instead of the market, you would be
playing against a machine learning algorithm. So I created StockIT.
I took a video tutorial on Pandas and Scikit Learn that covered multiple machine
learning techniques. I originally wanted to do some cool deep learning techniques,
but I realized that took massive datasets and more time than I wanted to spend.
Instead, I stuck to a simple linear regression model. I thought that would be the hard
part, but it wasn’t. Getting D3 to jive with React was the hard part. Both libraries
wanted to control the DOM. There were some other libraries that helped to join the
two, but I felt they were too bloated. I ended up using D3 to generate the SVGs and
React to handle the DOM which worked out quite well for me.
Turns out, just like VCs, redditors are all about that machine learning. All the love
from Reddit was a big confidence boost. People were playing my game and enjoying
it!
Get unlimited access Open in app
For example, let’s say I was looking for a job that was looking for someone who knew
JavaScript, React, and/or Python, and I really wanted to work with JavaScript and
React but I didn’t care so much about Python. Then I could give JavaScript a 3, React
a 3, and maybe Python a 1. The listings would then sort accordingly.
I ran into various obstacles with this project and had to change course a couple
times, but I ended up with a product I was happy with. My final tech stack was
React/Node/Express/MySQL. I posted the project to the cscareerquestions subreddit
and got 650 views before it was taken down because they don’t allow personal
projects.
The “final” product is here, and if you’re interested in knowing more about my
struggles and refactors, check out my post here.
Because of my issues, jobSort() took up a decent portion of the month. I ended up
Get unlimited access Open in app
getting coffee with a friend I had met at my first meetup, and he advised me to start
applying for jobs now. I read all over the place that everyone says they waited too
long to apply. Also, whenever I saw a post asking when to apply, the top comment
was always “now.”
By the end of the month, I had applied to 63 jobs. I viewed this as a self-assessment.
Was my portfolio/resume good enough? If so, what did I need to work on to prepare
for interviews? At first, I applied with Hacker News: Who is Hiring, and Indeed.
At first, I was applying quickly and not personalizing my resume/cover letter. Then,
I decided to personalize my cover letter and resume, and then try to send an email
to someone from the company. This method was clearly better than the shotgun
approach.
I received five calls that month — two from recruiting companies and three from
software companies that included:
I made it past the HR screen in two of these, but none of them yielded an onsite
interview. I was pretty happy with the three calls, and I learned a lot from them.
Everyone mentioned online that junior developers aren’t expected to know that
much from the start, they just need to be passionate and excited to learn. So I
thought, easy. I am passionate and excited to learn. What I learned from these calls,
however, was that nobody was looking for a junior developer. They expect you to
know what you’re doing from day one.
be confident enough to convince them that I can add value from day one
I knew I wouldn’t be able to get as much done this month, but I had a goal and I
wanted to meet it, so I couldn’t take a month off.
I refactored jobSort to use Redux which was surprisingly not as difficult as I thought
it would be. I listened to a lot of podcasts about it and read blogposts about it, and it
never quite made sense to me until I started using it.
I really like the flow of data with Redux. It’s interesting now seeing people complain
about Redux. I don’t think I’m qualified to spout off my opinions strongly, but I do
like the reducer pattern.
This was supposed to be the month of open source for me. I was going to make my
first open source contribution, and it would be a great contribution to a fantastic
library. I was going to contribute to React!
Get unlimited access Open in app
Everyone said it was a difficult codebase to read let alone contribute to. But I needed
to stand out, I needed to be unique. I knew that my contribution wouldn’t be
significant, but I still wanted to do it nonetheless.
I would start by reading the docs all the way through and then pouring through the
codebase. Watch every issue, every PR. Reading through the React docs in full was a
great exercise, and I’m glad I did it. But I quickly realized that the issue with
contributing to React is that there just aren’t that many “good first issues,” and they
get snatched up quickly.
About halfway through the month, I received an email from one of the companies I
applied to in the previous month. They set up an initial phone screen, and then a
technical phone screen. The technologies they were looking for were exactly what I
had learned - React, Redux, and D3. I mostly just talked about my projects and why I
made certain decisions. After this, they asked me to come onsite for an interview.
My first onsite interview!
I hadn’t prepared for interviews at all, so I went into it with the expectation that I
wouldn’t get the job, but I would gain valuable interviewing experience. I also was
running on three hours of sleep since I was still working the night shift which didn’t
help. Luckily, the technical portion wasn’t whiteboarding, just a one-hour pair
programming session. It was a fairly straightforward challenge, but I was very
Get unlimited access Open in app
nervous.
At first, I was worried about making sure I knew everything without looking it up.
When I realized that I wasn’t going to finish the challenge, I realized that I needed to
stop worrying what the interviewer thought of me and just google/stack overflow to
find answers. I didn’t end up finishing, and I thought I failed miserably.
Since I thought I failed the pair programming, I felt relaxed for the rest of the
interview. Ultimately, I left the interview with my chin up. Worst case I got some
valuable interviewing experience, and best case I got my first job offer.
Advice
Up to this point, I have mostly shared my story with some advice sprinkled in.
Chances are if you’re reading this, you either are thinking about changing careers or
are in the middle of learning to code with the intent of changing careers. I hope that
the advice below will help you develop a plan or stick with your current plan and
reach your goal.
1. Find out what motivates you and use it to your advantage. For me, it was
checklists, documenting my progress, and interacting with various
programming communities. If you are not motivated to reach your goal, then
nothing else matters because you won’t finish.
2. Make goals and meet them. I would argue that you should have monthly goals
and maybe even daily goals. Monthly goals to make sure you are on track to meet
your main goal, and daily goals to make sure that you actually make daily
progress. One strategy that worked for me was to make my daily goals the night
before. That way, you can’t do unproductive work all day and feel like you made
progress when you really didn’t. It forces you to compare your daily
accomplishments with your daily goals.
3. Go to meetups way before you think you are ready. Going to meetups can feel
scary, but as I mentioned above. But, in general everyone is nice and willing to
help. You might find people that aren’t interested in talking with you, but they
are the minority and no one will be judgmental. Also, everyone loves to give
advice (like I’m doing right now).
4. Contribute to open source way before you think you are ready. When you first
start programming, Github seems like this scary place that you never want to go
to. It is actually very welcoming to beginners and is a great place to see good
code and get your own code reviewed. If you’re still not convinced, check out my
Get unlimited access Open in app
post, Why you should contribute to open source right now.
5. Start applying way before you think you are ready. This one was tough for me
because I thought I was different. I thought I didn’t need to test the market to get
a feel for what to work on. I thought I would know when I would be ready to
apply. I’m telling you right now. You will not know when to apply. So you might
as well start now. You shouldn’t go crazy and apply to 300 companies before you
learn for loops. But you should know that the best way to know what you need to
learn is by applying and testing the market.