How I Learned To Code In 6 Months & Got a Job Offer (self-taught)

school work, write, still life-851328.jpg

I quit my job in April 2021, self-taught programming/web development & landed a Remote Full Stack job in November 2021 (based in Vancouver, Canada), all without spending a dime. Figured someone might find a factual time history of my experience useful -_- Net amount of LeetCode time was 0 hours.

My Acceptance Email

Table of Contents

– Learning Progression / Tech Timeline / Resources

Greatest Challenges & How I Overcame Them

Major Takeaways / Key Learnings (If I were to start over)


The timeline is an un-opinionated, fact-for-fact rundown of my experience; the remainder is obviously just my opinion based on my experiences.

Learning Progression / Tech Timeline / Resources

For this section, i’ll walk through my experience and summarize each step, and add my personal timeline for that learning progression. I had no prior programming experience, so we’re starting fresh.

To begin, I had a conversation with three of my friends who were Software Engineers, asking for any resources they had to learn programming. One friend recommended I learn JavaScript from, completing their JavaScript Algorithms and Data Structures course.

  1. Learn JavaScript — FreeCodeCamp’s JavaScript Algorithms and Data Structures course (2–4 weeks, 3–4 hours per day).

This course was highly interactive, and I stepped through the learning hurdles in JavaScript really smoothly. They provide an excellent topic description and then give you a challenge to complete each concept inside of their own Integrated Development Environment (IDE).

The challenges were all at an appropriate difficulty level, and if I could not solve a challenge, their answers were very explicit and easy to understand. This certificate says it takes 300 hours, but I found this to be a fairly conservative estimate.

Step 2, was to complete their Responsive Web Design certificate. At this point, I had come to note that HTML CSS & JavaScript was the essential trio to get liftoff, so this HTML & CSS certificate was the natural progression.

2) Learn HTML & CSS — FreeCodeCamp’s Responsive Web Design Certificate (2–4 weeks, 3–4 hours daily).

Step 3; Upon completing the Responsive Web Design certificate, I started applying for jobs; not sure where that audacity came from, but I quickly learned that this level of accreditation was insufficient. Every job posting wanted me to link my portfolio website, which I didn’t have, and honestly, I still didn’t know how to develop or deploy a website at this point (I had just been using FreeCodeCamp’s IDE).

So I completed Kevin Powell’s Web Portfolio YouTube tutorial (2hrs). I also downloaded Visual Studio to code it. This tutorial finished off with purchasing a domain and hosting the project, so it was live; a great experience.

3) Finishing this portfolio project; launching my first HTML & CSS static website (10–15hrs).

And now, I had a portfolio, but I had no projects inside said portfolio, so this nicely introduces step 4.

Step 4; For step 4, I looked at job postings for the jobs I wanted to see what skills I didn’t have. This information would guide the direction of my projects, which is critical because they are the only real credibility you have to your name. Nearly every posting requested React, so I learned React Native from Academinds React-Native YouTube tutorial (5hrs).

4.1) Finish Academind’s React-Native Youtube tutorial (20hrs).

Following this tutorial, I had all the essential skills to develop my own basic CRUD mobile app; a Todo app. I stylized it myself, so it looked atrocious, but I ultimately deployed it to the app store and added it to my portfolio.

4.2) Code my React-Native app with basic CRUD functionality [read/write to device localstorage] | (1–2 weeks).

Step 5; Waste a whole lot of time on random little youtube tutorials that I didn’t understand [this step is not mandatory to follow but I was directionless] (1 month).

Step 6; After a period of aimless meandering, I finally found some direction and inspiration for my second project. I would occasionally put out job applications, get no response, so I knew I needed something more.

I settled on building an E-commerce store with Stripe & React, following another youtube tutorial at approximately 5hrs in length (can’t find the link for my life:’[). After completing the tutorial, I rebranded the site, added my products, and made zero sales; nice. Still, another project to the portfolio, all hosted live and everything.

6) Code a functional E-commerce store in React + Stripe + Commerce.js (1–2 weeks).

Step 7; Still no job response — lame. Time to start diversifying my applications away from Frontend alone, branching outwards to include Backend and Full Stack. This was achieved by learning Node.js + Express.js + MongoDB. This took me a while, and in retrospect, I would break down this step into two parts if I did it again. Part 1 would be learning a bit about networking and HTTP requests etc, and then part 2 would be learning Node.js + Express.js and running a server.

7) Learn a bit about Node.js, Express.js & servers (1- weeks).

Nothing came out of this stage, except I had a bunch of random GitHub repos that didn’t do me much good.

Step 8; Step 8 was my first Full Stack project and also my lucky number 3 project. This one took me ages, and it used React + Firebase Auth + Firestore DB tech stack. Deployed on Netlify.

Firebase is a Paas service which basically means that handles all the backend stuff for you and makes it super easy for you to develop full-stack applications without the hassle of deploying a Node.js + MongoDB backend with JWT auth and then having everyone hack it to pieces as soon as it’s live.

It was super convenient, and I found it a great compromise for getting a handle on Full Stack Development.

8) First Full Stack CRUD project with React + Firebase [auth + db] (1 month).

To get started on Full Stack development with Firebase, I watched a tutorial demonstrating how to implement Firebase Auth in a React project and covered protected routes.

From there, it was super easy to bring in the Firestore database just by reading their documentation and having all the CRUD functionality hidden behind an authentication wall, where each CRUD function was associated with a user ID that is created when you use Firebase Auth.

Step 9; Applying for 3–4 jobs per day. I had three projects, and I felt I had a good array of technology demonstrated across the projects in my portfolio.

Adding some Full Stack/DB+Auth stuff helped boost my response numbers. I also learned Python because every job seemed to be looking for it.

This took me half of a 5hr Data Science YouTube tutorial. Super easy to translate from JavaScript to Python, in my experience.

9) Apply for jobs (1–2months) + learn Python (3–5hrs).

Total experience around 6 months, averaging 4–5hrs per day, 5–6 days per week.

Greatest Challenges & How I Overcame Them

The two challenges I found that were a real pain were: Imposter Syndrome and Tutorial Hell.

Imposter Syndrome was a real pain because I had no support or network for reassurance. And every job I applied for had around 200 applicants; what a pain, really demotivating and demoralizing.

For me, the solution was to realize two key things. The first was that it’s not really a continuous spectrum of developers. It’s a pragmatic world, and we’re not all ranked; more analogous to a discrete system of Can code a Full Stack app and Can’t code a Full Stack app*.* You can or can’t; it doesn’t matter if people are way better than you as long as you can both code a Full Stack app.

The second thing to realize was that I needed to shift my focus; less on how good people were at developing and more on how good I was as a learner. People can be better developers than me, but what matters more for junior SWE roles is that you’re a good learner.

You know how to research, you can give it a shot, and you are receptive to feedback. Helped me not care about how good everyone else was with their snarky SWE qualifications.

Tutorial Hell was also a mofo, but the solution is actually chill. I found that I just had to start off making super minor changes to the tutorials I followed.

Starts off just being a font size, text color, or background picture, and then it just snowballs out of control until you have a new application. Adapting some of the logic stuff is good too, you really understand how it all works, which means it’s way easier to reproduce.

Major Takeaways / Key Learnings (If I were to start over)

Fastest Way to Learn Coding (in my experience)

This tip is outside of learning basic HTML CSS & JavaScript and is more about general programming thereafter — the fastest way to learn HTML CSS & JavaScript is FreeCodeCamp. For everything else, the system I use is as follows:

  1. Find a good tutorial or article that describes a new concept.
  2. Code out said tutorial for myself.
  3. Critical Leave loads of comments with explanations on functionalities all throughout my code (guarantees you understand everything and further solidifies memories).
  4. Save code to GitHub.
  5. Adapt the project; keep the same code skeleton, but repurpose the project into my project (this might be a new color scheme, layout, or functionality). An example would be to follow a tutorial for a CRUD app with Auth + DB. I would keep Auth + DB system, rework the layout and app function and update the CRUD system accordingly.
  6. Save new projects to GitHub.
  7. Whenever I start a new project that I know will use a similar infrastructure, first 2–3 projects like I’ll revisit the GitHub repo with all the amazing comments I left myself. After that, I can generally remember if it’s something I do often (which is convenient as I naturally end up remembering only the relevant stuff).


Cover Letter


Best to get one ASAP. Employers and hiring people apparently go mental over the activity log. The sooner you can start committing code to your GitHub and getting your activity up, the better cause it is the #1 way to show the duration and intensity of your experience. You get one 3 months late, and you miss out on bragging about 3 months of dev time. I’d recommend committing a minimum of 1 thing per day, so the whole thing is green patches (even if it’s just adding a meaningless comment to a repo and pushing that commit).

Applying for Jobs/Networking

Basically just need a simple & clean portfolio with some contact details, about you section, and 3 projects.

Each project should have a link to the live page and the GitHub repo. GitHub repos should be tidy; ideally, each project would have a nice file that details the project. The 3 projects should be pinned to the top of your GitHub.

Your LinkedIn page should also be clean but doesn’t need OTT. Just shows your previous experience and how it relates to the job you want (generally, most roles demonstrate problem-solving, communication, and leadership).

Critical For each job you put out, find someone senior in that company’s tech department or the hiring manager/person themselves. Connect with them on LinkedIn and append the following note:

Hi [name],
I hope this message finds you well.
I just noticed your job posting for a [insert_job_posting_title] and as a seasoned [insert_your_relevant_role_experience], I feel I would be a great fit for the role.
I’d love to connect and chat about the opportunity.
Cheers, [your_name]

Literally gets you free interviews (it also got me an earlier offer — I didn’t go forwards with it).

Communication/Soft Skills

This ultimately landed me my job. I was initially rejected cause the role was full (I applied late), and a week later, the hiring dude came back to me and said he liked my communication skills and said they wanted to make something work.

What good communication meant for me was, for every meeting, send a follow-up email saying ‘Thanks for your time’, ‘Very grateful for the opportunity to meet you and your team, and hear about what you’re doing’, ‘Take care’; all these kind of things.

Even when I was rejected, I followed up by saying, ‘Thanks a lot, I learned heaps and am very appreciative for the experience and your time’ or something along those lines. I actually think it was my response to rejection that was the key one, but just generally, if you can demonstrate gratitude and the desire to learn and improve, you’ll be right.

Thanks for reading. If you find this post exciting, find more exciting posts on Learnhub Blog; we write everything tech from Cloud computing to Frontend DevCybersecurityAI, and Blockchain.

This article was written by James McArthur

Leave a Comment

Your email address will not be published. Required fields are marked *