You are on page 1of 20

Get unlimited access Open in app

Austin Tackaberry Follow

Mar 31, 2018 · 19 min read · Listen

Save

How I went from newbie to Software Engineer in


9 months while working full time
In this post, I’ll share how I went from zero(ish) to a six-figure software engineering
job offer in nine months while working full time and being self-taught.

Photo by Artem Sapegin on Unsplash

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.

Why I wanted to change careers


I enjoyed solving technical problems, but I knew I wanted to get into the
business/startup world at some point. I always kept the thought of an MBA in the
back of my mind, but every time I looked at the price tag of the top schools, my
interest waned.

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

Photo by Robert Baker on Unsplash

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

Photo by Glenn Carstens-Peters on Unsplash

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.

My plan, through many iterations, ended up looking something like this:

1. Take an Intro to CS course to get a solid base understanding of core CS concepts

2. Follow freeCodeCamp until I can build portfolio-level full stack web apps on my
own

3. Refactor to clean up the code, add testing, focus on advanced concepts

4. Contribute to open source


5. Prepare for job interviews
Get unlimited access Open in app

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.

Month 0 - Udacity CS101, Harvard CS50


The high of making this big decision gave me a ton of energy. I would start coding as
soon as I got home from work and wouldn’t stop until I went to bed. And then again
all weekend. Udacity CS101 tracked completion percentage, which was a big
motivator for me. I logged my completion percentage every day after coding. I
finished the first 75% in 10 days. The last 25% was heavy in recursion, and it was a
bit tougher for me. All in all, it took me 20 days to finish 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.

Month 1 - Harvard CS50, Linux, 1st Meetup, freeCodeCamp


I completed CS50 about halfway into the month. I’m not going to comment too much
on my experience with CS50, because I wrote an in-depth post about my experience
here.
TLDR: It’s a great course, I highly recommend it. David Malan is an excellent
Get unlimited access Open in app
lecturer, and there are a ton of resources to help you get through it. You start in C,
move on to Python, and then finish with web development. It is very dense, and
there is a lot of material, but I think it is well worth it.

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

2. Talking about programming with strangers is a great way to prepare for


interviews

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.

And then two days later I ditched that idea.

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.

I finished the front-end section of freeCodeCamp. The checklist format and


estimated completion time helped motivate me to finish quickly. I was also itching
to move on to the next section and learn React. However, this also meant that my
projects had minimal styling. I did whatever it took to fulfill the user stories and
nothing more.

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.

Month 3 - freeCodeCamp React, CodeClub, Starting freeCodeCamp Back


End
Ultimately, I just decided I would work my way through the freeCodeCamp React
projects to see how it went. That code was ugly, but it did help me understand React
a little better.

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.

Month 4 - Finished freeCodeCamp Back End, Yeggle


I worked through all of the API projects in freeCodeCamp, but I started deviating
from freeCodeCamp at the Image Search Abstraction Layer project.

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.

This time when I shared it with Reddit, everyone loved it!

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

Month 6 - jobSort(), Job Hunt Prep


After StockIT, I rolled right into my next personal project. I wanted to make a job
board that aggregated the smaller tech-focused job listing websites such as Stack
Overflow, Github, and Hacker News. To add my own unique spin to it, I decided to
have it sort based on the technologies the user wanted in a job and how badly they
wanted each of them.

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.”

In my head, I was going to work my way through my structured plan to build up my


portfolio with personal projects, and then work on open source contributions, and
then prepare for interviews, and finally start applying to jobs. This friend convinced
me to ditch that plan and start applying. So this month I made a portfolio and a
resume. The following month I would start applying.

Month 7 - Testing, Job Hunting


This month I focused on touching up my projects and applying to jobs. I also wanted
to learn testing and Redux.

I added flexbox to CodeClub.Social to make it responsive. I improved the mobile UX


on jobSort(). I added testing to jobSort() with mocha/chai/enzyme which was
difficult to set up, easy to get started, and then difficult to get 100% coverage.

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.

On Hacker News, I used jobSort() to determine which listings to apply for. On


Indeed, I tried non-software companies to see if I could even get a call or an
interview anywhere.

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:

a contracting DevOps/testing role at a dotcom company

a series B food analytics company, and


a fairly large and successful startup that was recently purchased by a major
Get unlimited access Open in app
corporation

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.

These calls taught me that I needed to

be good enough to add value from day one

be confident enough to convince them that I can add value from day one

Month 8 - Night Shift, Redux, Open Source, Onsite Interview


I started this month working the night shift for a 40 day stretch at my full time job - 6
days a week, 12 hours a day, 5PM to 5AM. Ugh.

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.

At one of the meetups I attended, Anthony Ng recommended that I try out


Downshift, an autocomplete library by Kent C. Dodds. This was a gamechanger. It
was right in my wheelhouse. The right difficulty, right amount of issues to help with,
not too many collaborators, super helpful maintainer, clean well-tested code. On top
of all that, it was a perfect solution to some issues I was having with my jobSort()
application.

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.

Month 9 - Job Offer


Get unlimited access Open in app
I ended up receiving my first job offer 9 months and 7 days after that first day when
I decided I was going to dive head first into programming with the intent of
changing careers. I felt confident given that I received an offer after my first onsite
interview, but at the same time, if I didn’t take the offer, what if this was the only
offer I would receive for several months? I ended up taking the offer, and I am
happy with my decision. I wanted to get paid to code!

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.

Now get back out there and code!

Get an email whenever Austin Tackaberry publishes.


Emails will be sent to bryan.lee.jh@gmail.com. Not you?
Subscribe
Get unlimited access Open in app

You might also like