What I did to become a developer in a year
Becoming a software developer is one of the few roles you can land without a software related degree. It was in early 2018 when I was exposed to web development at my previous job. It was not long until I decided that I wanted to become a developer. You can read more about how I prepared for this journey in this post.
After lots of self-learning, an internship, a bootcamp and many interviews later, I'm finally working as a front-end web developer.
If you're keen to make the switch and want to know what I went through to get to where I am today, continue scrolling ⏬.
Note: This was not written with much narrative thought. It was more of chronologically noting down the things I went through and how I felt at various points 😂
I started off with finishing up the The Web Developer Bootcamp course on Udemy by Colt Steele. It really is the best source for getting a full overview of what fullstack development looks like in my opinion. It has been enrolled by more than 400k people so there's definitely some credibility there. Colt goes through various technologies at reasonable depths for you to get a good grasp. The course is around 48hours long but I was able to follow along at x2 speed.
After finishing this fantastic course, I felt like I could build anything...I was so wrong 😂. Like I mentioned, the course was a really good introduction but it's not enough.
At that point I was looking for things to build. I knew that if I wanted to improve, I just had to build as many things as I could from scratch. So I had a thought. I would look at websites and note down all the common features and came up with a list of things to build. Here's that list
- create smooth scrolling on nav click
- create a scroll spy nav bar from scratch
- Sticky Navigation
- shrinking and disappearing/appearing Nav on scroll
- create a custom drop down menu
- create an accordian FAQ section
- create custom checkbox and radio buttons
- create a custom toggle buttons
- create an image slider/gallery. Touch enabled
Most of these are up on my codepen - https://codepen.io/Pakata
I spent roughly 2 months+ on this list. It was a time of diving into stackoverflow and MDN(Mozilla Developer Network). It improved my understanding of DOM manipulation, css selectors, pseudo elements, flexbox and how to put it all together in different ways.
At the same time, I was also accepted into a Bootcamp in Feb 2019 at ThoughtWorks Singapore.
I was lucky enough to be able to work on 2 different code bases during the 3 months. The first was a code base using jQuery, Node.js with Express, MongoDB with Mongoose and Nunjucks as the templating engine. I greatly improved my understanding of the backend and learned to work better with some advanced Mongoose APIs. The second code base was using React with TypeScript and Apollo(GraphQL), Node.js with Express and Postgres with Objection/Knex.js ORMs. The learning curve here was really steep as I never used TypeScript, GraphQL or any of the ORMS before. In the end, I was tasked with mostly front end work.
This internship accelerated my learning in terms of exposure to new stuff and also solidifying understand of backend architure and React.
However, I was having imposter syndrome for the first few weeks but that led me to work even harder to prove that I was able to handle the tasks.
Getting familiar with working in a dev team was also a great experience. Before this internship, I was absolute 💩 at using git because you don't necessarily need to make branches or pull requests when working on solo projects. I was also exposed to several popular tools that lots of developers in the industry use such as Slack (communication), Trello(todos/backlogs), Toggl(time tracker) etc.
I learnt plenty in this startup but I knew I wanted to learn more about testing as I was lacking that aspect. That's one of the reasons why I decided to apply for the bootcamp at ThoughtWorks as they are advocates of test driven development(TDD).
I joined the ThoughtWorks Jumpstart 12 weeks course on fullstack development and it was a really fun time. I got to meet a group of like minded people who were just as motivated as I was.
What was most exciting for me was testing and TDD. We picked up Jest, testing-library/react for React and Supertest for testing APIs on the backend and Cypress for end-to-end(e2e) testing.
Though TDD is not something all companies practice, especially startups, I can certainly appreciate the benefits. Here's a great article on the benefits of TDD.
And as per the advice of experienced trainers at Thoughtworks, if you do your interview coding assignments with tests, you'll definitely stand a better chance of impressing your interviewers 👍
We also had a chance to work on a group project where we practiced Agile workflows. We had daily standups, sprint planning and estimations, retrospectives, showcases and did pair programming etc. Knowledge of Agile workflows are a requirement on job descriptions sometimes but in my opinion, it's something that can be picked up easily on the job.
Bootcamp was over and my sights were set on my last mile which was to finally get employed as a developer. Little did I know the process would be draining, nerve wrecking and at times demoralising.
I applied to approximately 20 companies over a period of 2 months. They ranged from big MNCs to small startups. Now, 20 companies may not sound like much (or maybe it does) but because almost all the companies that got back to me always had a coding test, I had to give myself time to concentrate on each test without too many other interviews going on a the same time.
Many tests involved good knowledge of Data Strcured and Algorithms(DSA) but that's my weakness. I did well only in application based tests (meaning the task was to build a small app). One advice here is to really brush up your DSA knowledge and skills before going for your interviews as most tests are DSA focused.
Since I was weak at DSA, I was hardly getting through technical rounds. Getting rejected isn't a great feeling and after failing lots of DSA tests, I started to feel demoralised. Luckily I had great course mates who were supporting me along the way as some of them were going through the same thing.
Soon I landed an interview with my current company. I was excited as I thought the product was really cool and lucky for me, the test was project based. I did well enough to secure further interviews and finally got an offer to join the team. So I did 🥳.
This journey was not just an attempt to switch careers, but it was also a time of personal development. I learned to learn. I understood my learning patterns and found out what worked for me and what didn't.
Here are some pointers that I think were crucial in helping me to sustain this long journey.
- Find your motivation. If you don't have one, there really won't be anything to keep you going for months.
- Discipline and sacrifice. Learning something new is going to take lots of time. You only have 24 hours a day, so you'll have to sacrifice something to make time for learning.
- Read up on breadth then decide on where to go deep. There are many different fields in software, find the one you're most interested in and commit to it.
- Start somewhere, anywhere. Pick a tutorial on YouTube and follow along. Don't be afraid to stumble. What's the worst that can happen anyway?
- Create a mental model of how things work. Form a mental image of how languages are wired, how the front and backend are connected etc. The more you do it, the faster you get at learning new things. I find that this also benefits you when you're going through a code base to learn how it works. You'll almost definitely do this at your job as a developer.
- Udemy for relatively affordable courses - https://www.udemy.com
- YouTube for almost anything - https://www.youtube.com
- The web developer road map - https://github.com/kamranahmedse/developer-roadmap
- Codility for practicing data structures and algorithms - https://app.codility.com/programmers/
- Cracking the Coding Interview for interview prep and more info on data structures and algorithms - http://www.crackingthecodinginterview.com/
- Mozilla Developer Network is your best friend for all things HTML, CSS and JS - https://developer.mozilla.org/en-US/