My Four Year Plan at UCSD as a Computer Science Major
Why should I work for a company when I can enjoy my summer break? Well internships provide first hand exposure to working in the real world. You'll learn to actually use the concepts taught in your university. Most importantly, you'll acquire new skills and knowledge that will be used to advance your career even further.
Before we talk about how I got my internships, let's look into why companies hire interns in the first place. There's a common misconception that interns are hired because they're cheap labor. While this may be true with a startup with 3 people and no funding, this is definitely not the case for most companies. Hiring interns is a great opportunity for companies to scout for potential talent and groom them. It's much cheaper for a company to find potential hires and train an intern for 3 months than hiring an industry hire and having to fire them if they don't work out. Now that we know why companies look for interns, let's see what I did to land my internships.
In order to get onto the company's radar you'll need to actually apply to the companies. Most people are afraid that they're not good enough, but it's better to get a rejection than never knowing the outcome. I highly recommend networking and attending Job Fairs since you'll be able to meet actual people and interact with them.
I got my first internship by networking and reaching out to people who were already working in the industry. I went to all the job fairs at my university and interviewed with a couple of companies like Yahoo and Microsoft, but didn't have any luck since most companies were looking for juniors or found stronger candidates. I believe networking is extremely important when you're starting out because there are a ton of students all trying to get an internship and having a person vouch for you is important. This is not to say knowing people will land you an internship since you'll still need a solid resume and background. During my junior year, I got my internship at Intuit by attending a job fair. I talked to at least 10 companies at the job fair, but Microsoft, Yahoo, and Intuit were the only companies that reached out. To be completely honest, I completely flunked my Yahoo and Microsoft interviews and I wasn't expecting Intuit's recruiter to reach out to me. Having going to many of these job fairs and actually participating in hiring myself, I think I have a list of common signals used for hiring. Let's look at a couple of signals.
One big mistake I used to make was putting all the projects I worked on. Instead you should pick and choose projects that you're comfortable explaining and showcases your highlights. If a recruiter or interviewer asks about a project, you should be comfortable with explaining the ins and outs as well as your role in the project. Most universities have a general GPA and a major GPA. I generally suggest using the higher GPA. If both are good then put both of them on your resume. If you're not talking to a recruiter in person, your resume will be filtered through a system. This system scans for keywords to see how compatible the person is for the position. You can run your resume against an ATS to evaluate how well your resume fair. I recommend using jobscan.co.
This signals ties into the projects section of your resume. All the Computer Science majors in your university are required to take the same courses as you. Imagine what a recruiter thinks when they sift through thousands of resumes and everyone lists the same project from that CSE 30 course. How can a recruiter determine which candidate is better if they all have the same exact projects? As a result, you'll need to have personal projects or other internships to differentiate yourself.
You can be the most amazing coder in the world, but if you're not able to describe your work and your skills properly, no one will take you seriously. Being able to relay your skills and projects to a non Computer Science major will help recruiters understand your level of expertise and knowledge. It also can show how well you understand the project and technologies as well.
If you impress a recruiter, you'll move onto the next phase: the interview. Some companies have interviewers do a first round of interviews on campus and then fly you out to their headquarters for an onsite interview. Some companies just do one round of interviews. This is really dependent on the company so do your research. I would suggest you practice doing some LeetCode problems months in advance. I used to cram and practice a bunch of LeetCode problems the day before the interview and that never worked out for me. From my experience, interviewers generally ask LeetCode Easy problems for Sophomores and a combination of LeetCode Easy and Medium for Juniors.
As a Sophomore I would recommend being comfortable with using Arrays, LinkedLists, and Recursion. The most common question I got as a Sophomore was to reverse a LinkedList or to reverse a string or list. As a Junior I would recommend taking an Advanced Data Structures and Algorithms course as early as possible.
I also got a lot of behavioral questions like "tell me about a time you had a conflict and how you resolved it" or "tell me about a big accomplishment and why that one." I honestly have no idea how much weight these questions have, but I guess they're used to see if the candidate would be a good culture fit.
If you pass your interviews and the company has headcount, the recruiter will follow up with an offer. When I interned at Coupons.com, I was offered $28 an hour. When I interned at Intuit, I was offered $35 an hour. Intuit even offered housing, a rental car, and free gas for all the interns for 3 months. Even full time employees don't get these kinds of benefits! Generally it's hard to negotiate for a higher pay unless you have multiple offers on hand. If you're going to relocate to a different state for the internship, you're generally eligible for a relocation fee. I wouldn't worry about the compensation too much because the experience will be more beneficial in the long run.
Now that you've accepted your offer you're probably wondering what comes next. Most internships will require you to be with the team and last for 3 months. Your experience will vary between companies and teams, but I'll share my experiences as an intern. At Coupons, I worked on building a reconciliation tool. It was built with Java and I had to learn about Cassandra, REST, and XML. This tool was it's own separate repo and didn't touch the production code (although I did touch production servers). At Intuit, I also worked on building a health monitoring tool which monitors production systems for abnormal behavior. This was built using Java, MongoDB, and Spring Boot. In both of my internships, neither of my mentors reviewed my pull requests which was disappointing since I was hoping to learn good programming practices. Looking back, I should've had 1 on 1s with my mentors and let them know of some of my expectations from the internship. Don't be afraid to ask your mentors for these things! Let your mentors know what you want to get out of the internship and what you want to learn. The internship should be beneficial to both parties. I also noticed that a lot of interns start out writing tests as their starter project in order to learn more about the system and the infrastructure. I personally think this is a great way to introduce engineers to writing tests because most universities don't teach good practices on testing in general.
Some fun perks that you'll probably get include:
I've compiled a list of other things you'll most likely run into during your internship.
Your hosts won't be giving you a project that they can't solve themselves. Intern project are scoped to be finished within 3 months and take into consideration the intern's skill level. If your hosts are giving you project that cannot be completed within the 3 months, work with your hosts to reduce the scope. Usually, the hosts will need to submit a review of their intern to the recruiters. Having a project that can be completed will work towards your benefit.
Most of us don't really learn how to use version control like Git or Mercurial until we're thrown into the workforce. Even when I was attending my university, I just force pushed into the master branch without proper Git commit messages. This won't fly in a company's codebase. You'll need to have proper commit messages and learn how to manage your branches the right way.
Just like version control, most of us don't write proper unit tests or integration tests for our school projects. The majority of my assignments already had tests written and we were expected to implement the skeleton code to make the tests pass. In fact, a lot of production codebases have checks to make sure you have enough code coverage or else you won't be able to check in your code.
Every project and team has different requirements. As a result, the team might already be on a specific tech stack that you'll have to learn. Sometimes you get lucky and you can start a repo from scratch, but regardless you'll most likely be learning new libraries and frameworks to implement your solution. Be open to learning these new concepts since these are things your university probably won't teach you.
If you're a junior or sometimes a senior who's graduating late, you might be given an offer for a full time position. How does one get a return offer? Well I was lucky enough to get a return offer when I interned at Intuit. Your host and manager will be making the final decision. Make sure you have weekly syncs to make sure both you and your manager are aligned. You can also ask about the steps you'll need to take to get a return offer and hopefully your manager will work with you on establishing those expectations.
Hopefully you have a better idea what your internship may look like. The road will be long and hard, but it'll be worth it in the end. Remember to have fun learning new things during your internship. How was your internships like? What were some difficulties you encountered in landing your internship? What other questions do you guys have? Let me know in the comments section below.
All products recommended are selected by our team. If you buy something through one of the links on this page, you'll be supporting our team to keep doing what they love.