How I Became a Software Engineer

The story of how I transitioned from teaching English to becoming a software engineer, plus all of your questions answered.

Stephen is learning how to code a web application
Hoping my code works during the 2016 Busan Startup Weekend

Sometimes when I'm alone, usually when I'm going for a walk or taking a break from work, I wonder to myself, "How the heck did I get here?"

I'm very fortunate to tell you that life is really good for me right now. Software engineering is a career that I absolutely love doing, and if you love what you do, you never work a day in your life. It has also been very lucrative, which has enabled me to pay off massive amounts of debt and achieve financial stability.

But my adult life hasn't always been like this. In my 20s, I could barely manage to make ends meet with the low-paying teaching jobs I had, much less pay off any debt or even save a small amount of money for a rainy day. And although I had a heartfelt devotion to teaching and helping my students learn the English language, I slowly became disillusioned with teaching as a profession and started to resent the school administrators who were running the show.

Nowadays a lot of people are asking me the same question. "I want a career in tech as well, so how the heck did you get there?" I love telling my story because it has the potential to inspire other people to do the same thing and change their lives dramatically. I have spoken to a lot of friends and acquaintances about my professional journey as well as complete strangers on Reddit, and some of these people have set out on becoming software engineers.

They ask a lot of great questions much better than "How did you get there?" So in this article, I want to tell the story of how I became a software engineer by answering the most common questions people ask me.

How long does it take?

It took me about 1,500 hours to learn the entry level skills required to land my first job as a software engineer. On average, I spent about 20 hours every week learning how to code for a period of 18 months. I kept detailed notes about what I studied and practiced on a daily basis, and I think this accurate record keeping was a vital part of my success.

Every now and then I see posts on LinkedIn from people who claim they took as little as 6 months of learning before finding their first jobs. While this is in the realm of possibility, it is not very realistic for most people to land their first job as a software engineer after 6 months of self-studying or starting a bootcamp. Usually these people have quit their jobs and devote every waking hour to learning how to code, and for many adults, it's not possible to support themselves for this long without a job. Even if you had six months of living expenses set aside so that you could focus on studying full-time, it still wouldn't be enough time for most people to find their first jobs.

The demand for mid-level engineers (about 2-3 years of experience) and senior level engineers (5 or more years of experience) cannot be met with the current supply of software developers who are actively looking for a job. The problem is most companies only want to hire mid and senior level software engineers, and there are relatively fewer positions for junior engineers (no experience, up to 2 years experience).

Because finding an entry-level software engineering job requires a wide breadth of knowledge and because the market is saturated with junior engineers seeking their first jobs, 1 - 2 years is a more realistic timeframe.

learning how to code in the hospital
Recovering from appendicitis did not interrupt my studying. Busan, July 2016 

What was your study routine like?

During most of the 18-month period while I was learning to code, I was still working as an English teacher in South Korea. I was employed at a language academy for adults and taught from 2pm - 10pm Monday - Fridays, and about 1 or 2 Saturdays every month. I would get home around 11pm, go for a 5k run, take a shower, and then scarf down some steamed dumplings with salsa (Yes, I know this sounds like a disgusting combination, but it was actually quite delicious!)

From midnight to 4am, I would log on to FreeCodeCamp or Udemy, and either watch coding tutorials, complete algorithm challenges, or work on small projects to add to my portfolio. I would go to sleep and wake up around 11am or noon to get ready for work, and then repeat the same routine all over again. The subway ride to and from work usually took about 40 minutes, and I remember watching coding videos on my phone or working through algorithm challenges with just pen and paper. I would study coding during my hour-long break at work, and if a class was cancelled at the last minute, I would sneak off to a quiet room in the school and study more coding.

I wanted to avoid burn out, so I usually took Friday and Saturday nights off from learning to go out and spend time with my friends. In Korea, the expat community is very closely-knit and the nightlife is cheap, and I think the combination of having many friends and affordable entertainment kept me from keeling over from exhaustion!

Most of my studying was spent alone, but I started the Busan chapter of FreeCodeCamp so that I could learn with other people. We met every 2nd and 4th Sunday of the month and spent about 3 or 4 hours together learning in small groups. Since I was the meet up organizer, a lot of people looked up to me to teach them coding, and even though I was a beginner myself, I found that teaching other people how to code vastly improved my skills and accelerated my learning.

I was having a particularly difficult time at my teaching job during this period of my life, and these coding meet ups gave me something to look forward to. The members of this group looked up to me as their leader and as the glue that held everyone together, and for the first time in my life, I felt a strong sense of connection and belonging to a group of people. These coding meet ups and the people who participated make up some of the fondest memories of my life, and my eyes still well up in happy tears when I look back at the pictures.

How did you find your first job? And how did you know you were ready to start applying?

I never felt ready to start applying to jobs because there are so many fundamentals to learn. But I had bills to pay, and I had to start applying sooner or later.

I moved back to the States in September 2016, and at this point I had been learning to code for about 14 or 15 months. I only had 3 months of living expenses set aside, and so I felt intense pressure to find a full-time coding job by the end of the year.

For every software engineering job that I have been offered, including my very first job, it was because I leveraged LinkedIn properly. Believe it or not, I've never actually applied to a job by submitting an application, and I do not recommend junior engineers doing so. Submitting an application is "going through the front door", and when you walk through the same front door that hundreds of more experienced developers go through, you're just not going to get scheduled for an initial interview. The odds are not in your favor, and it's so heartbreaking to see posts from struggling junior developers on LinkedIn. Many of them admit to applying to hundreds and hundreds of jobs over several months without so much as an acknowledgement.

So how did I find a job through LinkedIn without actually applying? Well, long story short, I built an audience by posting interesting content and started to engage with the people who viewed and commented on my posts. During the summer of 2016, when I was wrapping up my final months in Korea, I was creating short JavaScript videos and uploading them to YouTube. I shared my videos on Twitter and LinkedIn with the relevant descriptions and hashtags, and people in the industry started noticing and following me.

I took advantage of a free month of LinkedIn Premium, which allowed me to see a list everybody who had viewed my profile. I reached out to these people directly and messaged them matter of factly: "Hey, I noticed that you checked out my profile, and I was wondering if your company is hiring junior software engineers." That worked surprisingly well and I was able to land several interviews that way.

One very small start up company in Austin, Texas gave me the opportunity to complete a take-home coding exercise. They wanted me to build a simple web application from scratch and deploy it to the Internet within a week's time. It was actually quite a challenging assignment for me, and I was unable to complete it on time. But after that failed attempt, I brushed up on the skills that I was lacking and then I resubmitted the assignment to the hiring manager about 3 months later. I wrote something along the lines of "Hey, do you remember me? I tried completing the interview coding assignment 3 months ago, but I couldn't finish it on time. I studied up on Node.js and React and I was able to complete it now. I don't expect you to offer me another interview, but I wanted to let you know."

My follow up blew them away! They never had a rejected candidate redo the assignment and share it with them, so they gave me a completely new coding assignment, again with a one-week deadline. I was able to complete it and sure enough they offered me a job! A week later, a start up company in Germany also offered me a job, but after having returned home from living in Korea for 2 years, I was ready to settle down in the States and not become an expat again.

I drove to Austin in my Toyota Yaris all the way from Maine, and I started my first full-time job as a software developer on Tuesday, November 8, 2016 – Election Day. That first job ended up being a bad fit for me. It offered no health insurance, which I desperately needed to have, and I didn't get the support and mentorship from experienced developers. I parted ways with them just a couple of months later. My last day was Friday, January 20, 2017 – Inauguration Day.

It all worked out in the end though. Fortunately, I had a local recruiter from InMotion Software reach out to me on LinkedIn, and he set up an interview. I had a similar take-home coding assignment and a second on-site interview at their office. They offered me a job, and I ended up staying with that company for about 2 and a half years. And the rest is history!

Do I need to enroll in a bootcamp? How about a CS degree?

If you think you would benefit from a more traditional learning environment with an instructor, classmates, and assignments then by all means enroll in a bootcamp. They are quite expensive though, and despite their exaggerated marketing claims, you'll unlikely find a job so soon after graduating from the bootcamp. Furthermore, companies do not care about this at all. They don't need to see your certificate of completion, and it doesn't matter to them if you attended a "prestigious" or "competitive" bootcamp.

What matters most? Your ability to solve problems with code is the most important thing. It doesn't matter if you got your education from YouTube or from Stanford University.

If you decide to enroll in a bootcamp, please do your due diligence and research them extensively. There have been several high-profile cases of for-profit bootcamps that actually do little to prepare students to enter the job market, yet they still charge exorbitant tuition fees. Some bootcamps will offer tuition deferment, but this is an extremely bad idea! In return for "free tuition" to enroll in the program, you agree to give the school up to 30% of your salary for a period of 1 to 2 years. It seems like a great deal at first, but an additional 30% deduction on top of taxes doesn't leave much left over at the end of the month.

My advice is to skip bootcamps unless you already have the tuition saved up and you would benefit greatly from having the support of an instructor.

What resources did you use? And what kind of coding do you do now?

I am a full stack web developer, which means I create web applications. I am able to work on the frontend (what the user sees in the browser) as well as the backend (all of the business logic on the server and databases). Early on in my learning journey, I decided that I wanted to learn full stack web development with JavaScript because 1) FreeCodeCamp has an excellent curriculum for learning this and 2) it only required me to learn one programming language for both the frontend and backend.

If you want to code web applications, then I highly recommend you learn JavaScript. It may also be useful to learn another language for the backend, such as PHP, Python, Ruby, or even Java.

I used free or very inexpensive courses from Udemy to learn how to code. Here is what I recommend:

  • FreeCodeCamp - Amazing, free content with an excellent community. The content is open-source and relies on volunteers, and I recommend you supplement with other materials.
  • Colt Steele's The Web Developer Bootcamp - Literally everything you need to learn for full stack web development with JavaScript. Over 60 hours of content. Wait for a sale and purchase this course for under $20.
  • Anthony Alicea's JavaScript: Understanding the Weird Parts - This course made JavaScript click for me!
  • Stephen Grider's Modern React with Redux - My favorite instructor on Udemy. I have purchased all of his courses because he is such a great instructor. This course taught me everything I needed to know about React, and it has since been updated to include the newest features.

Reach Out

The blog is very new, and I'm working on it during my free time. I'll eventually implement a commenting system or contact form, but in the mean time, feel free to contact me on LinkedIn. Let me know what you think about this article, and ask me more questions! I imagine I'll be updating my story often based on your feedback.