Learning to code and getting hired itself isn't hard. WHAT 😵?!
Ok, to be fair, it doesn't have to be hard. I don't mean that it won't take a lot of work because it definitely will but we as humans end up making it much harder on ourselves.
From my story, you will see what I mean and how this was true for me and from most people I talk to in the developer community, it's true for them too.
Whether you are looking for a career change or you are not sure what to do with your life after graduating with an Arts Degree, I hope my story, struggles and experiences will shed light on the struggles you might be facing and inspire you to take action.
To be clear, this isn't a step-by-step guide or path to becoming a software developer. If that's what you're looking for, this free guide is all you need.
My goal is to help anyone who has been in my shoes and is on their own coding journey but experiencing some of the common struggles when learning to code and finding a job as a programmer (self-doubt, imposter syndrome, losing motivation, feeling lost, etc etc).
During my last semester at University, I took a course in psychological measurements where I learned how to analyze data and create information visualization with RStudio.
Prior to this course, I had ZERO experience in any programming language. The interface looked daunting at first, but I was fascinated by how everything worked. With a few lines of code, I could create beautiful diagrams and charts!
Around March 2019, I was seeing Udemy ads on Youtube. As I browsed through Udemy, I found an interesting web development course (The Complete Web Developer from Zero To Mastery) taught by Andrei Neagoie.
The trailer video looked so good that I decided to give it a try!
BEST. DECISION. OF. MY. LIFE.
It’s absolutely mind-blowing to learn how the Internet works and I really enjoyed watching the videos and following along. I remembered some nights I spent hours simply trying to adjust the CSS layout for a web page (e.g. Figuring out the differences between display:flex
and display:grid
).
When things worked the way I wanted, it was pure joy and a great sense of achievement!
By May 2019, I had finished Andrei's Complete Web Developer course.
I should be a Web Dev expert now, right? Not so fast, in Part Two below, I'll discuss the struggles and mistakes I've made and what steps you can take to overcome the learning barriers.
At this point, I wasn't 100% sure if I want to pursue a career as a developer. While web development felt like an exciting industry to be part of, my self-doubt and insecurity were holding me back to make the next move.
In fact, I didn't feel competent enough to call myself a 'developer'. After all, I don't have a computer science degree or any coding-related work experience.
I really enjoyed all the things I learned in that course. However, I didn't know what would happen if I turned this hobby into a career. I asked myself questions like:
I didn't know the answers!
Analogy: Playing a sport as a fun leisure activity versus becoming a professional athlete.
In June, I came across a volunteer opportunity as a Website Administrator at UBC Campus Lightbox, a non-profit organization that aims to make mental health resources more accessible to the community.
This role perfectly aligned with my psychology background and interest (coding and raising mental health awareness! Heck yes!). Every since taking that role, I have been working with the engineering team to update the website and implement new features.
This was, and continues to be an awesome opportunity for me to test my skills and learn new things and see them live in the real-world while getting to help a good cause.
In the meantime, I was also looking for a full-time job. In July, I started working as a Campus Coordinator at a digital training Bootcamp where I was surrounded by individuals who wanted to make a career transition into the tech industry.
Most of the Bootcamp students, just like me, had ZERO experience in coding.
Their dedication and hard work inspired me to keep learning and pursue a career in the tech industry.
As I reflected on my personality traits and my long-term goals, it became clear that I wanted to work in an industry that will constantly challenge me to solve hard problems and push me out of my comfort zone.
So, I quit that job by the end of 2019, booked a flight to Taiwan for a short vacation and I told myself, "2020 will be my year! I'm ready to embark on a new adventure and commit to getting into the tech industry."
If I were a pug, this would be me staring out of the window and wondering the meaning of life.
Because of the COVID-19 pandemic and flight cancellation, my 'short' vacation in Taiwan was extended. I didn't even know when it would be safe to fly back to Canada.
As I navigated these life challenges and uncertainties, I questioned myself... "What should I do now?"
I remember seeing Python as a required skill in many job descriptions and heard all of the hype about AI, Machine Learning, and Big Data. Also, my friends and family were all telling me that being a Python developer is a promising career option.
Therefore, I started taking online live Python courses in Taiwan and learned about pandas, numpy, matplotlib.pyplot, and all that good stuff. You can check out some of my Python learning notes.
During this time, I also got certified as a Microsoft Office Specialist. My backup plan was to find an office administrative role if I couldn't land a job in the tech industry. Having a backup plan was my way of dealing with my insecurities and self-doubt.
As I explored more advanced topics regarding KNN and PCA (supervised and unsupervised learning), I realized that this was not what I was looking for. I wasn't enthusiastic about Machine Learning at all.
I recalled those late-night coding sessions when I was taking Andrei's Complete Web Development course in 2019 where I could spend hours working on the front-end projects without feeling tired. I was thrilled about everything and I really felt like I was able to achieve a state of flow.
The voice inside my head became stronger and stronger as each day passed by: "That's it! What am I doing?! I don't want to be a Python Developer or Machine Learning Expert. I don't want to be an Office Administrator. I want to become a Web Developer, so just do it!"
This exploration phase and detour were crucial in helping me narrow down my interest. Despite all the uncertainties, I figured out what I really want to do!
Although my self-doubt was still lurking in the background, I decided to take a leap of faith.
I asked myself: "Will I regret not trying my best to pursue my goal?" and the answer was 100% yes.
The fear of not reaching my full potential outweighed my fear of failure.
So I threw my backup plan out the window (and a small piece of my self-doubt with it) and committed myself 100% to becoming a Web Developer even though I knew that it still wouldn't be easy and there was no guarantee of success.
Now that I had a clear focus to get hired as a full-time web developer, I knew I would have to sharpen my web dev skills and so I mainly allocated my time into the following buckets:
Note: Each task is time-consuming so rather than trying to focus on all of them at once, it was more of a mix and match of 2-3 of my buckets, depending on the day.
Some days would be: Coding Challenge —> Side Projects —> Job Search.
Other days: Data Structures & Algorithms —> JavaScript Deep Dive —> Networking & Job Search.
I started my day with coding challenge(s) on Edabit as a brain warm-up exercise. I highly recommend this resource to newbies.
These challenges are easier than Leetcode and HackerRank. It'll help you build confidence and learn the fundamentals.
The best part? You can learn from others by looking at their solutions and see how other people approached the problems differently.
Like many people, learning data structures and algorithms wasn't all roses and I banged my head against the wall a few times (metaphorically of course 😅) while trying to understand the concepts.
Don't be discouraged, keep pushing. It's meant to be challenging and once you finally grasp a concept, it feels that much better.
If you are having a hard time understanding everything, YOU ARE NOT ALONE. Take your time to digest the content and compare and contrast the differences between each data structure.
To help me manage and track my progress with coding challenges, I created this template. You're more than welcome to download or make a copy of it to help you keep track of your learning progress as well. I've also included instructions if you would like to customize your own version of the spreadsheet.
You can even take it one step further and create a list of coding challenges to do and then add a column for "due date" for each coding challenge you add in. This way you can plan out 1-2 weeks in advance and even block off time in your calendar to complete these coding challenges before the "due date". This will help you hold yourself accountable and build a consistent habit.
If you want even more accountability, find someone else (ex: send a message in a developer community like ZTM) who is also learning to code who will do the challenges with you with the same due dates. You can then compare answers after each challenge and help each other along the way if/when you get stuck.
Andrei's Master the Coding Interview Course is suitable for people who don't have a computer science background (just like me!). The course is well-structured and broken down into bite-sized information so I didn't find it overwhelming. To reinforce my learning, I also read articles and did coding exercises from InterviewCake.
When I first learned about the differences between static and dynamic arrays, I couldn't fully understand why an "append" operation on a dynamic array is worst-case O(n) time. This article from InterviewCake provided me with the mental model I needed!
I then had that 'AHA' moment when I rewatched Andrei's lectures... Best feeling ever!
I love using a variety of resources to boost my learning. For example, FreeCodeCamp has a section on Coding Interview Prep with hundreds of FREE coding exercises.
It's a combination of take-home projects, data structures, algorithms, and math questions!
To take my problem-solving skills to the next level, I also took the FAANG Interview Course by Yihua Zhang. I found some of the questions extremely challenging and I had to pause and rewatch the lectures a few times.
However, this course opened up a whole new world to me. I learned the logic behind each solution and common strategies to implement when encountering hard coding questions.
While I'm still not very confident about FAANG level coding questions, I now have the right mental frameworks to approach the problems!
I helped create a new feature (resource recommender) for UBC Campus Lightbox which allows users to find the available mental health resources based on their preferences.
Thanks to Jacinto Wong's JavaScript Projects Course, I applied what I learned, added a few features, and shared my project on Linkedin.
The result? My post received over 3,000+ views and 180+ reactions 🤯! Some people even reached out to me and asked if I would be interested in collaborating on future projects.
The takeaway here? Share your work!
To better understand some of the most confusing concepts in JavaScript, I took Andrei's Advanced JavaScript Concepts Course. For example, "this" keyword, lexical environment, how event loop, job queue, and callback queue work together.
The Advanced JavaScript Cheat Sheet from the course is also something I use as a helpful reference.
I also recommend reading You Don't Know JS by Kyle Simpson. It's so good, you will be blown away!
I used Linkedin to connect with professionals and seek career advice from people working at Amazon, Asana, GoDaddy, Salesforce, SAP, Shopify, and Later. Instead of reading online company reviews and researching the company's about page, talking to people directly allowed me to gain insights into the company's hiring process and culture.
In addition to networking, I leveraged the power of Linkedin to increase my visibility by sharing useful content.
CSS is a common source of frustration for many developers as we don't 100% understand what's going on under the hood. Therefore, I shared a CSS trick which mimics dark and light mode with plain CSS. (No JavaScript at all!) The result is absolutely mind-blowing!
My post received over 7,600+ views and 460+ reactions on Linkedin 😲!
These moments were what kept me going! Woohoo! Celebrate your small wins!
Because my flight back to Canada in May was cancelled, I was in a dilemma. I wanted to find jobs in Canada but I was stuck in Taiwan.
So, I started looking for short-term internship opportunities in Taiwan.
I applied for a front-end developer role at a digital design company. I passed the initial screening, the online technical interview, and made it to the final round. Unfortunately, I wasn't able to answer some of the React questions and I didn't land the offer.
While this "failure" definitely didn't feel great, I decided to look at it as a learning opportunity and I told myself, "Ok, I need more hands-on experiences with React!"
But How?
Not thinking he would even respond, I reached out to Andrei and asked if I could contribute to any projects he was working on.
I created my own learning opportunity by asking, "This is what I'm good at, do you need an extra pair of hands?"
To my surprise, Andrei replied to my email. From there, I started taking on some small tasks and working on fixing bugs.
After I finally got back to Canada in August, I joined the ZTM team weekly sync meetings and contributed more to the improvement of the ZTM website. Even though I wasn't familiar with the tech stack, I took time to watch Youtube tutorials on topics I didn't understand so that I could start contributing right away.
The ZTM programmers were also super helpful in teaching me, answering my questions, mentoring me and giving me harder and harder tasks to work on.
Gradually, I was able to write better code and complete tasks independently.
In the meantime, I was still job hunting but it was frustrating. I submitted more than 50 applications but the majority of them went to a black hole and I never even heard back from the companies.
Two companies invited me to complete the coding challenge as part of the hiring process. However, I was too nervous to come up with a good solution under time pressure.
This felt like another step back but again, another learning experience and opportunity for me to keep improving. My next step was to keep practicing coding interview questions and apply for more jobs.
In the meantime, I was still learning a lot and working hard with the ZTM team and after working with them for a few months, they decided to offer me a full-time position as a Software Developer right around the same time. Woohooo!
It's no doubt that ZTM has played a pivotal role in my coding journey and I feel like I'm still just getting started and learning even more now that I'm working full-time.
It's tough but I didn't give up. Thanks to the supportive community, I was able to keep pushing myself, never giving up and having faith in myself.
Editor's Note: Cindy is being modest in this section. A LOT of people reach out to Andrei but Cindy went above and beyond has backed it up. We are super lucky she reached out and ecstatic to have her as part of the team!
Here is a super simplified version of my coding journey.
(My inner self-talk: “OMG, how can I ever be competent enough to be a software developer?! There are so many things I don’t know! It's so overwhelming”)
⚒️ To combat imposter syndrome, I reached out to the LinkedIn community and asked for some advice.
What really surprised me is the fact that many people were super generous in providing feedback and guiding me in the right direction. Here were some of the top suggestions:
I started to focus on the progress I was making and celebrating the small wins and those negative feelings gradually faded away for the most part.
Editor's Note: Also knowing that you're not the only one feeling this is reassuring. This is a topic that comes up for nearly every person at some point in their journey. Here's an example, another one and another one... you get the idea!
Don't spend a crazy amount of time on HTML and CSS. I used to spend too much time fixing pixels, changing the colors, and messing around with positions of elements.
While HTML and CSS provides you with a great sense of achievement (beautiful animations and color gradients background), it's not meaningful progress and not the best use of time (unless you want to become a Web Designer then you'll probably spend more time on it).
⚒️ You don't need to be a CSS Guru to become a great developer. MOVE ON and you will naturally hone your CSS skills as you build more projects.
⚒️ Start learning JavaScript and basic Git commands as early as possible. For the majority of your time as a developer, JavaScript skill is more important as there are so many JavaScript libraries and frameworks out there. For example, learn how to manipulate strings and arrays, the differences between map and forEach.
Go to DevChallenges and pick a beginner project (e.g. 404 page, team page, home page)
Are you able to create a responsive page using CSS Grid, Flexbox, media queries?
Amazing! Move on and start learning JavaScript now.
This point might seem contradictory to my previous point. But the truth is that when I jumped into React, I wasn't even 'Good Enough' in JavaScript. For example, I didn't even know about "class" in JavaScript (huh? what is the constructor method? what is the 'super' keyword?) and I had to look up many basic JavaScript methods which wasn't efficient.
Essentially, I was learning the new syntax and jargon in the React framework (JSX, props, state, functional component versus class component) without solid JavaScript knowledge.
I was overwhelmed with all the new information.
⚒️ When things don't make sense, it's an indicator that you might need to revisit some topics and build your fundamental knowledge.
When I watched Andrei's Complete Web Development course, I didn't push myself hard enough to fully grasp the concepts and apply that knowledge to my own projects.
Analogy: Reading amazing recipes by Michelin-starred chefs without actually cooking anything. Even though I know all the ingredients and step-by-step instructions, I won't become a good chef without hands-on experience. I'm also not going to be able to create a michelin-starred level quality meal on my very first try. It takes practice!
These were my biggest lessons learned to help me actually retain what I was learning:
⚒️ Don't just passively consume information. Chew on it. Take time to digest what it means and test your knowledge by explaining it to someone else.
⚒️ Treat the debugging process as a great learning opportunity.
⚒️ Pause the video and try to solve the problem yourself before proceeding.
⚒️ Contribute to open-source projects where you are not the only user.
⚒️ Build your own projects based on what you know. Even better if you share them publicly. You are not stepping out of your comfort zone if you simply copy and paste the code from the Github repo.
For example, I applied what I learned in the RoboFriend app (project from Complete Web Developer), and turned it into this 👇
⚒️ Instead of being multilingual, focus on mastering one language at a time.
Get a holistic view of yourself by asking:
Before you know the answer, it's perfectly fine to experiment with different things and dabble in different languages. In retrospect, those three months I spent learning Python weren't a waste of time. In fact, it allowed me to see the beauty of different languages and what purpose they serve and better understand what I actually enjoyed vs. didn't.
⚒️ Stay laser focused on your current task - multitasking is a myth!
Avoid any distractions such as phone notifications or checking social media while you are coding.
Singletasking is the key to entering the flow state.
What I typically do is mute my phone, turn off notifications, and put on my headphones with 1-hour ambient background music. This helps me to focus on the task at hand for one hour and then I'll stretch a little bit and give myself a break before diving in again.
Here's an awesome list of 5 habits by Jason Lengstorf that has helped me and I definitely recommend you check out if you want to be super productive.
Coding can be a complex cognitive task and you need to recharge your battery to keep that momentum. You should check in with yourself as frequently as you check your phone's battery level.
Feeling exhausted and stressed out is detrimental to your productivity and health. Don't feel guilty about scheduling 'ME' time to relax and let your mind wander.
It's crucial to keep your creative juices flowing and you will be surprised at how beneficial a break (especially if it's outdoors) can be to improving your efficiency and understanding of concepts you're learning.
⚒️ To bring your best, you need to take care of yourself first What's the best debugging tool? A full 8-hour sleep 😆
Make a list of activities that you find relaxing and de-stressing. Schedule them in if you have to.
⚒️ Go take a real break! You are not a robot It's not selfish or indulgent. It plays a huge role in your health and happiness.
If you are pushing yourself too hard, your passion for coding will slowly fade away.
Staying focused requires a lot of mental energy. If you start feeling fatigued and you aren't able to absorb any new information. Stop what you are doing. Give your focus a break.
Learning how to code is a marathon, not a sprint.
If I could go back in time, these are the lessons I would tell myself:
1. There is no cookie-cutter pathway to becoming a developer. If you look at my journey, it's been a bumpy road and it certainly hasn't been a linear progression. It took me time to figure it out and determine exactly what I wanted.
Is learning to code and coding difficult? Nope, at least not any more than other skills. The hardest part is the learning process itself no matter what you're learning that makes people want to give up quickly.
Well then how do I become good at programming (or any other skill)?
To simplify the process of mastering a skill, it all comes down to these steps:
For example:
2. Treat your coding journey as a challenging video game and you will find it less scary and more fun!
Remember when you play Super Mario games, do you dwell on the past and think about how many times you've failed? No, you keep going because all you care about is rescuing the princess. And before you know it, you do but you probably "failed" many times before you did!
The more you're "failing", the more you're learning. Fail fast to learn fast.
3. Patience and persistence are rewarded.
Have you started looking for developer jobs but you're feeling discouraged by the unrealistic job descriptions (Bachelor or Masters degree... 2-3+ years of experience for an entry-level role...)?
Apply anyways. And keep applying. Everyone else is going to stop applying after 10, 20, 30 times but not you. You have nothing to lose.
Are you feeling shitty because it seems like most of your friends seem to have landed their first dev job?
Stop overthinking it! You are the only one in your situation. Stay persistent, stay positive, focus on your process/schedule, celebrate your small wins and be a little bit patient... as they say, time will soften all avocadoes 🥑 (aka - you will get there too!).
[ ] Join a developer community of people in your situation: Linkedin, Discord, Virtual Meetup group... etc.
[ ] Leverage the power of Linkedin: Build genuine connections and reach out to professionals who are already in the tech industry. Start with your existing network and build out from there.
[ ] Reflect on your goals, interests, personality, strengths, and weakness. Ask yourself:
Editor's Note: if you're a member of the ZTM Academy, we highly recommend taking Andrei's Future-Proof Yourself workshop which will help you answer questions like these and gives you a framework (that Andrei uses himself) for building the life that you want.
[ ] Write down your plan
[ ] What are you waiting for? Start learning today! To answer the question we've all asked ourselves, "Do I need a computer science degree to get hired?" NO, you definitely don't need a CS degree to learn how to code and get hired!
In fact, here's an entire website dedicated to interviews with people who successfully changed careers and got hired as self-taught developers.
Most of my favourite resources other than ZTM courses are already listed here but this is probably my top 10 👇:
Please feel free to say hi or ask me any questions you have in the ZTM community discord, my username is @AwesomePerson.
Stay Safe, Stay Awesome, & Stay Strong! You've got this. 💪🏼