from Guide to the Job Hunt on Aug 6, 2023
How to get a coding job without experience
To get a coding job, you need job experience. To get job experience, you need a coding job. So, we're stuck in a catch-22: how do you get started with neither job experience nor a coding job?
This guide is written for anyone applying for coding jobs, whether it be your first job in general or a transition into a new industry. Regardless of your background, I'll assume absolutely zero prior job experience.
- I'll focus on coding-related jobs, grouped into two broad categories: roles that focus on building, as in software engineering, and roles that focus on research, as in data science or research scientist roles. Many roles are some mixture of the two, but these are the two core, independent skills that we'll focus on demonstrating.
- I'll focus on lack of job experience but I'll assume you have some familiarity with coding — picked up via a bootcamp, a course, or self-instruction. Doesn't really matter where. In other words, I'm assuming you've already learned coding basics. The focus for this post is demonstrating that understanding and practicing industry standards you don't normally learn in class. If you're looking for an introduction to coding, see Coding 101: Python for beginners.
- This post focuses on getting you to the front door for interviews, up to the point where you're connected with a recruiter. For interviews themselves, see specific posts such as How to succeed at system design interviews and How to succeed at coding interviews. For the job hunt more broadly, see the Guide to the Job Hunt.
In sum, we focus on the singular question: How do you make yourself an attractive candidate for a coding role, without previous job experience in coding?
Imagine you're a recruiter looking for a coder. How would you find the most promising candidates? Interviewing is a time-consuming process, so you need to aggressively filter applications. There are several ways to whittle down your list of candidates.
- Filter by pedigree. In short, look for names you recognize, whether it be a school, a program, or another company. Interviews are a noisy process, but if a candidate has been marked as "excellent" by many noisy processes before, there's more signal in their strength as a candidate. Unfortunately, experience should tell you that this isn't a perfect process. If every recruiter employs these same tactics, the one FAANG employee committing fraud can still endlessly find jobs.
- Filter by skills. Resumes and LinkedIn profiles help to make this process easy. In fact, LinkedIn's assessments for different skills such as C++ and Python might make this even easier: Find the highest-scoring candidates for the skills you desire. However, take a step back, and you'll realize this is pretty silly too. It's not the strongest Python developers you're recruiting — it's the best multiple-choice exam takers you're looking at, just like with students that boast the highest GPAs.
Neither of these options are ideal, but they're all that LinkedIn provides you with. As a result, you might stick with these imperfect tools and hope that with enough interviews, you can find a needle in a haystack. However, this presents an obvious issue for you as a recruiter: You know you're missing great talent, but you don't have many options for searching at-scale.
- Filter by interactions. This is where filters begin growing more time-consuming. As a recruiter, you can attend in-person career fairs, establish a phone screen, or connect with hackathon winners. All of these outreach efforts focus on filtering candidates via in-person interactions. Naturally, there's more signal, but there's also more noise. This is rife with issues, from a bias for extroverts to preconceived stereotypes.
- Filter by portfolio. This is where filters begin to yield more fruit. Look for coders that enjoy coding — the best way to assess that? They code in their free time and have side projects to show for it. The simplest mechanism for this is via Github repositories, but some of the strongest coders across the web have fully-fledged products, demo'ed on ProductHunt. With that said, this is much less automatable, and it takes manual effort to determine.
This last filter is one of the most effective and also one of the most time-consuming, for a recruiter. However, if you had infinite time, this would be one of the best ways to ensure quality candidates. If you can find passionate coders, they're either great coders already or have the drive to become one.
As a candidate then, your goal is communicate that you are one of these passionate coders. There is certainly merit to oft-repeated advice to attend career fairs, but let's put this aside. Every one and their dog will do that, with a newly-printed copies of their resume. Instead, focus on these three steps:
- Build a portfolio of demos. Pull together a portfolio so that the recruiter can assess your abilities and job readiness quickly. Note this isn't just a website with empty claims about your skills. The portfolio should contain content that anyone can look at and assess, as it would reflect your technical ability. For builders, these could be products like games or mobile apps. For researchers, these could be case studies or preprints.
- Make yourself searchable. In some sense, your goal is to do the recruiter's job for them: Ensure that recruiters can easily find your portfolio and contact you. Ensure that they can access your case studies or projects in as few clicks as possible, either starting from your LinkedIn or your resume. This doesn't mean listing every single coding language you can think of. Instead of bloating your resume, this requires the opposite: Focus on the skills your portfolio demonstrates.
- Market yourself. Unfortunately, every job search requires this. This is now familiar territory, so we won't go into this in as much detail. In short, you're appealing to the recruiters that attend in-person events; practice your 30-second verbal pitch. You're also appealing to recruiters that just filter by skills and pedigree; include a few key skills in your resume. Regardless of the avenue, your marketing pitch now includes a new facet — your goal is to focus the recruiter's attention on your portfolio.
This general idea of making it easy for recruiters guides a lot of the hackneyed tips you hear: For your resume, list contact information at the top, include your skills and proficiency, highlight employers not job titles (for new graduates)… the list goes on.
The problem with all of these tips is not the recommendations themselves: They are sound tips, but the problem is they don't address the primary reason n00bs are rejected. Quite simply, green thumbs don't have anything assess-able, besides the single-page resume.
As a result, the single most important thing to market yourself as a candidate, is to increase the "surface area" for assessment; setup a portfolio, add case studies, open-source side projects, and more. For the remainder of this post, we'll focus on how to do this.
An online portfolio is any profile where someone can browse content that demonstrates your technical ability. This doesn't need to be a glitzy website. For a builder, this could be as simple as a Github profile that contains a few projects demonstrating your coding ability. Or, for a researcher, this could be a Google Scholar with preprints that demonstrate your research acumen.
Note that quality is more important than quantity here. Although your goal is to provide more than a resume to assess, remember the recruiter is ultimately still assessing whatever you present. Below, we'll cover specific guidance for making presentable content.
Your goal is to show projects that solve a problem, no matter how large or small the audience. Your project could address a niche group of hobbyists or even other developers — as long as there's a clear purpose. There are several "levels" of projects, starting from the most accessible and leading up to the most complex.
Level 0: Follow any tutorial. At a basic level, complete any tutorial to learn more about a framework or library. For example, you could try a PyTorch tutorial to start working with deep learning.
- Upload your finished project, after finishing the tutorial, to a Github repository. Make sure your repository includes a
README.mddescribing the repository's contents. Then, your portfolio can simply be your Github profile.
- To uplevel this sample project, use it to educate others. Consider writing a more detailed version of the tutorial to help other first-time users. For increased visibility, placed this in your
README.md. Your project's aim is to help educate other users, in areas that the original tutorial failed to do well.
- Upload your finished project, after finishing the tutorial, to a Github repository. Make sure your repository includes a
Level 1: Add to the tutorial. Add a custom feature. Combine this tutorial with other tutorials. Make modifications to make this project "yours". A project at this stage has a simple function; most "hello world" projects in this category display the weather or support todos.
- At this point, your project can serve as a starter template for anyone looking to build a particular application. In fact, it can be your own starter template.
- Example: A particularly successful example is this template repository. This repository contains boilerplate for starting any computer vision project — training code, datasets, evaluation, and more. In fact, I used that starter template multiple times myself. With adequate documentation and a clear purpose, even such a simple starter can be very helpful for others.
Level 2: Build a developer tool. Now that you have a rough sense of what it takes to build a demo, ask yourself: What tools do I wish I had? Build a library or framework for other developers.
- Example: Building off of the previous example, a project that is highly similar but further along — and deployed as a PyPi package — is a pretrained models repository. This repository makes it easy to load and use backbones for a large number of computer vision models. Since then, the package has been replaced by PyTorch Hub, but at the time of creation, it filled in an important gap in research — the lack of a centralized hub for pretrained weights.
Level 3: Build a product. Flesh out your demo into a usable mini-product of sorts. This is the "next level" only because it requires some understanding of what it means to deploy an application. See the Guide to Hacking for deploying desktop applications, web applications, and more.
- Release your product on a platform. This platform could be a plugin store such as the Chrome Web Store or Zapier Platform. I would recommend trying a "lighter" weight goal like this one first, where you build an extension rather than a complete product. After successfully publishing an extension, consider a more ambitious goal such as publishing an application via the App Store or Play Store.
- At the extreme end of the spectrum, there are insanely effective builders in this space, such as Alyssa X and Linus Lee. They routinely build fully-fledged products, completely on their own. I use their projects as inspiration often, both for what and how to create.
- There are other highly impressive technical portfolios as well, with Bruno Simon's interactive "game", Matt Olpinski's freelancer-focused resources, Simon McCade's freelancing pitch and Claudio Guglieri's design case studies. There's no need for the glitz and glam of these websites, but they give a rough idea of how a portfolio can help market an individual.
The above should now give you a rough idea of entry-level to "advanced" projects to help bolster your portfolio. I put "advanced" in air quotes only because they take more time; they're not needed per se. With that said, they no doubt make a builder's portfolio really stand out.
Your goal is to show projects that convey insight. This insight is at minimum thought-provoking and is ideally actionable — all in all showing you are or can become a thought leader. For a research-centric portfolio, code is just a mechanism for accomplishing that. As a result, your primary medium for side projects is not code repositories but write-ups in blog post, newsletter, or paper form.
Level 0: Follow a tutorial. Just like with the builder, you as a researcher need to learn the tools available to you. Complete any tutorial to learn about a library that you'll need on the job.
- For example, you could try a Seaborn tutorial to learn about visualizing in Python. Use this experience to write up a tutorial yourself. The simplest write-up is simply a clearer or expanded version of an existing tutorial.
Level 1: Surface-level observations. Start by making observations about a current-day phenomenon. This could include natural disasters, socioeconomic patterns, or health issues. Any topic that's hit the news cycle — that you're curious about — qualifies.
- Every observation should be data-backed and possible to visualize in some form. This can include correlated events or trends over time. Include any patterns in the data that may be useful, as you explore the data. You could call this "exploratory data analysis".
- The focus is on learning how to make plots that make a point. Learn how to design visualizations around the observation you're making, and ensure your figure clearly communicates that. This could be as simple as coloring a specific point a different color, changing the title, or adding arrows here and there. In fact, you may not even use a plot; d3.js has a large gallery of visualizations for inspiration.
- Communicate these observations via a blog post for simplicity, and be clear about the motivation for exploring this data. Include your sources, and ideally, include your source code as well so that others can reproduce your results.
Level 2: Find insight. Case studies at this stage should have a hypothesis as well as justified answer.
- Now, your case study should present a cohesive story around a particular topic. You need the motivation, a hypothesis, then an answer with justification. Visualizations should be strung together, each contributing a piece to the final story.
- Publish your blog post in a more broadly distributed publication of some kind, from a Medium newsletter to a popular Substack or an established blog, such as CSS Tricks or Smashing Magazine. The key idea here is to get an editor's eyes on your content for feedback. It also builds ethos in the right publications and communities.
Level 3: Convey actionable insight. Studies at this stage should have insights that are actionable. The insight could be to use a particular kind of model, recommend a new sanity check, or reveal a new highly-correlating factor for wildfires. See Is my project paper-ready? for a more detailed breakdown of what goes into a compelling case study of this nature. At this level, your portfolio could include published papers at known journals or conferences.
In short, create a set of publications that recruiters can look at. These publications could be informal blog posts or academic-style papers. It doesn't matter much which it is — as long as it conveys insights that your reader can take away.
Needless to say, your final step is to make your projects easily accessible and searchable. There's no need to design a fancy portfolio website; Github and Behance profiles work perfectly.
With your portfolio link now in hand, start with the obvious: Link to your portfolio from your online profiles, LinkedIn, and your resume. If you feel comfortable, make a post about your project on social media, and share it with friends. Link to it from a blog post on Substack.
You should now have a mechanism for recruiters to find you by and hiring managers to assess your skills with. On top of that, you now have a way to gain experience on your own, learning as you go and working your way towards your very first coding job. For next steps, see How to land interviews in a job hunt.
Want more tips? Drop your email, and I'll keep you in the loop.