How to get internships as a UCSD CS undergraduate

I am writing this post with one intention - to provide a blueprint on how to acquire internships as UCSD undergraduate. Currently, I am a 2nd year Ph.D. student who has mentored a series of undergraduates and I commonly see the same pitfalls despite students who have excellent GPAs. This post is also applicable for students interested in master’s programs, as internships (and the preparation and marketing approaches to acquire them) obviously help an applicant for a masters program. We will focus on acquiring the first interview only - after that, landing an internship becomes a complete skill game of which there are many resources on Leetcode, interview questions, etc.

Acquiring the first interview boils down to the following analogy. You are a dart thrower and are aiming to hit a bullseye. There are two approaches to this: first you throw an infinite number of darts and one is bound to eventually hit a bullseye. Second, you train for many hours to become a better dart thrower to help each throw be better and better. Obviously, the combination of the two will yield the best results. With CS internships, we have the same thing. Your job is to submit as many applications as possible while doing things that can enhance each application you submit. So, let's discuss how to market your applications.

First, acquiring an internship essentially boils down to three components, two of which are controllable:

  • Marketing and networking
  • Corse skills, projects, and interviewing
  • Luck
  • I have organized these three components sequentially in terms of their conditionals. Consider this - without proper marketing and networking, one could be the best coder in the world; but, if they cannot display their skills, nobody will believe them. Second, you need to focus on your skills to pass the interview and without some skills, there is no opportunity to become lucky. That is, yes internships are a number game and there is certainly luck involved, but one has to put themselves in a position to become lucky. Ultimately, an internship interview is a culmination of doing a lot of little things right and then finally getting your straw drawn.

    Let us begin by discussing marketing. One needs to do everything in their power to properly market themselves. This means developing a clean website that highlights the exciting projects you have built as a programmer. It is important to state in these projects not just what you did, but also hard numbers that describe how the project is performed and how it has provided value. I emphasize that each project does not have to be this amazing new result, but you should mention, in quantifiable terms, the speedup performance of any code you write. Companies want to hire individuals that provide value and it should be clearly quantifiable from your resume that you have provided value with your projects. Additionally, videos or demos of the project on Youtube are excellent ways to generate interest in your work and certainly improve your marketing (See Memorize Preflop as an example). Now, I cannot promise every recruiter or admissions officer will ever look at your website, but I can promise you that a nice, clean website will put you in a favorable position if a recruiter does click on that resume link. Remember, put yourself in a position to get lucky.

    Next, let’s discuss resumes. Your resume should be clean, no more than one page and include both the projects (with quantifiable results mentioned) as well as extracurricular activities. This includes things like teaching assistantships, tutoring, any jobs (if you are applying to your first internship - I got my first internship at T-Mobile as a ML engineer because the manager liked my dishwashing job). Further, include any clubs you participate in (think ACM) and any community work you may do. Also, you need to mention relevant coursework as well as any frameworks and programming languages you are familiar with (React, Django, OpenCV, C++, Java, etc.). However, do not over-embellish and be prepared to answer basic questions about these frameworks in your interviewing stage. Show your resume to as many people as possible for feedback. At each iteration, it will improve.

    Lastly, but perhaps most importantly, let us discuss networking. Make a LinkedIn and make it clean with a photo. Connect with other UCSD students until you hit 500. If you are like me and hate marketing, this may seem superficial, but any possible recruiter who looks up your LinkedIn and sees favorable results can only help you. Put yourself in a position to be lucky. Attend any possible networking events, dress appropriately with a nice shirt and have resumes links available (paper printouts are fine too, but this seems outdated). Further, reach out to any alumni in similar clubs or those just outside your network that are at places where you would be interested to do internships. They are usually favorable to helping other students in positions not unlike themselves and sometimes get a financial kickback for referring you if you successfully attain a job. The worst that can happen is they say no. The best that can happen is they connect you with a hiring manager and you are now an intern at XYZ company which leads to a 6-figure salary come graduation. Be a relentless networker - many people with less technical knowledge get much farther based on persistence and fearless networking.

    Next, let us discuss skills and projects. Build your own projects - they will be invaluable for your development. (See Paul Graham’s - founder of YCombinator, look it up if you don’t know him), However, if you do not have any ideas, that is absolutely okay as I didn’t either. So build off of someone else's projects. Go on Github (make sure you link your Github in your resume) and find popular open source projects of your interest. Think VueJS, Gatsby, React for web development. Younger languages like Roc or Rust always have new projects that need to be built for those interested in PL, compilers, ect. Or even LLVM and OpenCV, for lower level work. Of course, Pytorch and Jax for those interested in learning. Then, sort on the issues for a good first issue. I promise you will be able to complete the good first issues and all it takes is one issue to get you started on the pipeline. Include these contributions in your resume.

    Next, academics. GPA matters - just like size. In fact, in the first year and a half of school, GPA really matters as there are programs like Google STEP and Microsoft Explore for sophomores. These programs assume you know very little about programming so they go off GPA and qualitative essays (have your friends read them). I’ve seen many 4.0s in the first year and a half of school coast after because they got explore and then almost always get a return offer for an internship and later a job. So GPA matters. Another thing, for those who want to do a masters and have AP credit, look into accelerated masters. It saves you money and you will gain a leg up on the competition (as well as future pay). This post is for the ambitious, so work hard, explore, double or triple major and do not limit yourself by what others do at this school. Push your boundaries academically and you will be rewarded in the long run. But GPA does matter so find a balance.

    Lastly, put the luck in your favor. Life is about numbers - so apply early and often. Many places will do rolling internships and so the first to apply get first looked at. Imagine a recruiter for internship season - they may be lenient or the first 10 interns they hire but when there are only 2 spots left, they will be stringent. Build out a Notion table and stay organized. Respond quickly to interview requests and get in the habit of checking emails. I would argue for internships, you need triple digit applications or bust. Do not be picky about interviewing - you can always say no to the company later, but you may find you love it. Here is a list of internships, but I recommend you build your own. (Internship List). The more darts you can throw the better chance you have of hitting a bullseye.

    Now, I have laid out a series of action items. Explicitly they are:

  • LinkedIn
  • Clean website
  • Network extensively
  • Have multiple friends look at your resume and use quantifiable numbers. Every cleanup makes it better
  • Work on open source projects - your own or others
  • Study hard in school and maintain a strong GPA. Push yourself to do more than average
  • If you do all these things to a strong degree, lady luck may just reward you. For example, I got two interviews my sophomore year and turned it into an internship at T-Mobile. As a junior I got 3 interviews and two job offers in which I interned at MongoDB. I ended up going into academia (only got accepted to 1 grad school), but the point is that you may only get 1 or 2 chances so make the most of them. Remember, control what you can control and put yourself in a position to be lucky. In essence, all you are doing is increasing your expected value (See past blog on expected value) and I’d bet that things will work out.