8 min read

How to Land Your First SWE Internship. A Realistic Roadmap.

Most advice on this skips the part where it's hard. Here's what actually happened to me, and what I'd tell anyone starting from zero.

careeradvice

I applied to the Google STEP program at the end of my freshman year. One project on my resume, nothing special. I was pretty convinced I was going to get it. Obviously I didn't.

I didn't know what I didn't know. I didn't know how technical the interviews were. I didn't know how competitive the market was. I'd just found out that internships existed and that I needed one, so I applied to the most famous one I could find. That felt logical at the time.

A year and a half later I had an offer from NVIDIA for Summer 2025. I'm not saying this to flex. I'm saying it because the distance between those two things - one mediocre project and a Google rejection to NVIDIA - is what this post is about.


Step 1: Pick a Language and Actually Finish Something

The first thing you need to do is learn the fundamentals of programming. Not everything, not multiple languages, not whatever's most in-demand right now. One language, enough of it that you can build something real.

CS50 is the right starting point for most people. It's free, well-structured, and gets you from nothing to actually understanding what code does. There are other options - The Odin Project, freeCodeCamp, MIT OpenCourseWare. For me, it was courses on LinkedIn Learning which my university offered for free. The one you finish matters more than the one you pick.

Tutorial hell will catch you if you're not careful. You do a code-along, type what the instructor types, the thing works, and you close the laptop feeling like you learned something. But you didn't, you just transcribed. The moment you try to build anything from scratch, you realize you have nothing to stand on.

The way out is to stop doing code-alongs and start reading conceptual resources. Understand what an API is and how to implement one. Understand what a database is and why it exists. Get enough of a foundation that you know what to search for when you're stuck. That's the actual goal of step one.


Step 2: Build Something Real

Once you have that foundation, build something - not a todo app from a tutorial. Something you actually want to exist, that solves a real problem someone you know has.

I have a whole separate post on how to come up with ideas, but the short version: find a problem you actually have and build something that solves it. The more personal the problem is, the more likely you are to finish it.

My first real project was LootCode - a way to make LeetCode practice feel like a game. I cared about it, worked on it at weird hours, and when it was ready I posted it on Reddit, and it kind of blew up. Real users, real feedback, real reasons to keep working on it. None of that happens if I build another weather app.

The interview conversation is different when you built something people actually use. Instead of "I built this to learn React," you're talking about what broke when people used it differently than you expected, what you changed based on their feedback, what you'd think about if the user count kept growing. That's the full software development lifecycle. Recruiters know what it looks like.


Step 3: Do it Again. At least Twice More. This Might Take a Year, and That's Okay.

Three projects was the number for me. Not because there's anything magic about three, but because by the third one I had enough range to tell a story. One project with real users, one showing I could work on a real codebase with other people, and one built under pressure, shipped fast, good enough to win.

That last one was a hackathon project. I won a handful of them along the way, and those wins did more for my resume than almost anything else on it.

Here's the thing nobody says out loud: this takes time. Going from one mediocre project to three solid ones took me a year. That's fine. The people who land internships fastest aren't the ones who crammed hardest in a month - they're the ones who started early and kept going. Two or three hours a week, every week, beats a sprint and then disappearing.

Don't rush this phase. Build things that require you to figure stuff out on your own. That's where the real learning is.


Step 4: Apply Everywhere. This is a Numbers Game.

I sent 250 applications the year I got NVIDIA. Some people go higher. Apply to at least 100 before you let yourself get discouraged.

Apply to everything - big companies, small startups, research labs, government programs. Don't sort them into reaches and safeties. You don't know what's going to convert. The ones you think are reaches sometimes come back faster than the ones you think are sure things.

Two things that made a real difference for me: switching to LaTeX and not waiting for the "right" time to apply. Same content on my resume, cleaner PDF, more responses. I have a whole post on resume optimization but the LaTeX switch alone moved the needle. As for timing - applications roll all the way through May. I know people who got offers two weeks before their start date. There's a fall recruiting boom, but the window doesn't close, it just slows down.

And don't be picky at this stage. Your first internship is not your career. It's proof you can do the job. Land somewhere, perform well, build from there.


Step 5: Prepare for Interviews in Parallel, Not After

There's a lag between when you apply and when you hear back. Use it.

For technical: NeetCode is the most efficient resource I've found. Work through the Blind 75, understand the patterns, don't just memorize solutions. The goal isn't to have seen every problem - it's to have a framework for breaking down problems you haven't seen. Easy and medium is where you should focus for most companies. Practice articulating your thought process out loud, and if you have others in the same boat, try to run a mock interview together.

For behavioral: this part gets ignored way too often. Think through your projects, your teamwork situations, your leadership moments, and build answers to the standard questions - what you built, how you handled conflict, a time you failed and what you did about it.

My leadership work came up in almost every behavioral round I had. President of a CS club, $70k in sponsorships raised, 52-person team, 200-person mentorship program. My technical interviewers started asking about it after my rounds just because they were curious. You never know what becomes your story. Build the material and know it well enough to tell it naturally.


Bonus: The Things That Actually Separate Candidates

None of these are required. All of them help.

Join a CS community early. The reason I knew internships existed was because I joined Knight Hacks my freshman year. I met people a year ahead of me, saw what they were doing, and understood what the path actually looked like. That context is worth more than most advice. Contributing to open source is another one - it shows you can navigate a real codebase you didn't write, read someone else's code, and ship something that meets a bar someone else set. And if you can get real users on a project, even a handful, the way you talk about it in interviews changes completely. I know that's not easy, which is why it's a bonus and not a step.


The Actual Timeline

I didn't know I wanted to do CS until I got to university. Joined Knight Hacks freshman year, figured out the game existed, and applied to Google STEP that October with one project and way more confidence than I'd earned. Got my rejection in February.

Spent the next year building. Three projects total, hackathon wins, led a 52-person org through a full hackathon cycle, raised $70k in sponsorships. Switched my resume to LaTeX. Started taking LeetCode seriously once I had a portfolio worth getting interviews for.

Applied to 250 places my sophomore year. Got my NVIDIA interview in November, finished all rounds in December, had my offer in January.

August 17th the following year, return offer.

Two years and eight months from not knowing CS to a return offer from a big tech company. I'm putting the timeline there so you know what it actually looks like, and so you don't panic when month two of your search comes up empty. Offers roll through May. Keep building. Keep applying.


The Short Version

Learn fundamentals from one resource and finish it. Build something real - something you actually want to exist. Do it three times. Apply everywhere and don't be picky. Prepare for technical and behavioral while you wait on responses. Join a community, contribute to open source, get real users if you can.

It's simpler process than most people think. It's just a longer one than most people want to hear. Good luck!

— Dylan Vidal

Back to all posts