How to get programming experience when you can’t find a job?

11 February 2024 ยท Updated 11 February 2024
Question

Hello Vadim, It's been almost a year since I graduated as a CS major and was high on enthusiasm, ready to dive into the tech industry. Yet, here I am, feeling like shit, like I've hit a wall, my initial excitement replaced with a growing sense of frustration and, if I'm being totally honest, a bit of depression. The job market hasn't been welcoming, and every rejection email feels like a statement that I'm not good enough and won't even get any job.

But I'm not the type to sit back and let life pass me by. I'm determined to keep pushing forward, so, I'm reaching out to you, hoping to find some answer or maybe just some understanding that you've also been through the same journey, a simple "Hey, you're not alone in this."

What should I do, if every job requires experience nowadays? Every job ad that I see is at leats 2 years of coding. I'm looking for any opportunity to get my hands dirty, but nobody is giving me a chance. It doesn't have to be a formal job or even a paid gig. I'm talking about volunteer work, freelance projects, or anything that lets me contribute to something meaningful while building my skills and, hopefully, expanding my network. I want to be part of projects where I can not only apply what I know but also learn and grow as a developer. Whether it's helping a non-profit optimize their database, joining a startup that's trying to get off the ground, or contributing to open-source projects that resonate with my interests, I'm all in.

So my question is, what should I do? What would you do in my shoes? how can I find a job without experience? and why does even a junior development position require experience?

Best Regards,
Torb

Answer

Hello Torb,

So I’ve seen this question pop out several times, and I understand the frustration of not being considered even for junior positions. The sense of being at a crossroads that you’re experiencing right now is absolutely normal, so take a deep breath, you’re good, this is normal. Your journey from graduation to landing that first job in tech can indeed feel daunting, especially when it seems like every job posting demands years of experience you don’t yet have. So let me share with you some of my thoughts that will hopefully help you find a job and gather some experience.

First and foremost, it’s crucial to shift your mindset. For the next six months, consider giving yourself a job. This job is about building software and immersing yourself in learning as much as you can โ€” by building. The goal is to encounter as many bugs as you can and fix them. Each problem that you solve gives you +1 experience. You’re going to be leveling up your coding one bug at a time. Choose whichever language you feel the most comfortable with, whatever framework. At this point it’s not really that relevant. It’s about setting a structured schedule, dedicating full-time hours as if you were employed, with the goal of developing not just your coding skills but also your understanding of software development as a whole.

When choosing what project to build, resist the temptation to settle for simple tasks like creating a calculator app or a to-do list. This won’t do, we need something massive, something complex, aim for real-world applicability. Imagine you’re tasked with developing a full-stack blog platform, or a money-tracking app. This project alone encompasses a wide array of skills and technologies you’ll need to master, from front-end to back-end development, database management, and user authentication. The key here is to push yourself into territories that are unfamiliar and challenging, forcing you to learn and adapt. Remember, this is your full-time job, so you have a boss (yourself) who expects you to have a running real-world product.

While building, use GitHub not just for code storage but as a learning tool. Dive deep into each library that you’re importing, understand how it’s built and why, make sure you understand the mechanics and the reasoning behind each line of code. Again, think of it as gaining +1 experience to every function that you fully grasp. Your goal is to be able to discuss these projects with potential employers, demonstrating not just your technical skills but your problem-solving process and your ability to learn independently. For example there are popular libraries in Javascript world that get imported quite often e.g. Axios for request, or Express.js.

Documenting your journey is equally important. I’m not saying write a whole poem each day, just 1-2 lines of what you learned, accomplished. Keep a log of what you learn, the obstacles you encounter, and how you overcome them. This record will not only serve as a personal reminder of how far you’ve come but also as a valuable resource to share with potential employers or collaborators. Imagine you seeing this big ass list of things that you’ve learned at your “current job”. This will be your achievements that you can talk in the future. You will be able to explain why you chose that library, why you built things in a specific way.

๐Ÿ„ Keep your algorithms and data structures knowledge fresh. Watch some youtube videos about practical use of the concepts that you learned as part of your CS degree. 

After you’ve done building the current app, select the next one. Make it more complex, take a look at some SaaS that indie developers do, and try to copy them. Your portfolio is your gateway to the industry. Set up a personal website, even a simple one, where you showcase your projects and share your experiences โ€” this will set you apart from other candidates.

In the meantime, when you’re not building your main project โ€” start doing open-source. On a personal note, I developed quite a few open-source libraries myself, and contributed to some. So this is definitely a thing and contribution to open-source projects can be incredibly beneficial. It connected me with like-minded people, I hope it will serve you as well. Working with others on an open-source project can simulate a real-world development team environment, providing insights into collaborative coding, version control, and project management. You can then say to the interviewer that you have experience working as part of a team. Moreover, contributing to open-source projects is a way to keep your skills sharp โ€” there will be code reviews and and people will tell you what you’re doing wrong etc.

Remember, this is not just about building a portfolio to impress potential employers. It’s about transforming yourself into a confident developer who can tackle real-world problems, work within a team, and continuously adapt and learn. You’re doing this for you, not for some employer.

The road ahead is not easy, and there will be moments of doubt and frustration. But start small, and gather those +1 experience on your character and eventually you will find a job.

Cheers,
Vadim




Hot! The last couple of years I've been writing about CTO / Tech lead job. I've compiled all my knowledge into a printable PDF. I called it "256 Pages of No Bullshit Guide for CTOs". So if you're interested, take a look.

New! If you're a software engineer looking for a job, I started a Roast my Resume service, where I record a personalized video of me "roasting" your CV, which basically means taking a hard look at your resume as a CTO and commenting on all the good and the bad parts.

  • Mia

    Building real-world projects early on shaped my skills more than anything. I explored new libraries on GitHub, understanding their workings. This hands-on approach enriched my problem-solving abilities. Sharing my progress on a personal site made interviews more engaging, allowing me to present concrete evidence of my growth. New developers should consider this strategy to enhance their visibility and appeal to potential employers.

  • Jai

    When I started, I threw myself into building complex stuff. It was tough but taught me a lot. Along the way, I made sure to meet other devs at meetups and online forums. Those connections got me my first job and helped me learn even faster.