Disclaimer: This guide is mainly intended for those aiming to get a computer science internship. I don’t know anything outside these areas, but some of the ideas presented here may still be relevant. I am also learning, so let me know if you find something incorrect.
Spring 2023 (January–April) term has just concluded and I want to share what has worked well for my seeking process. This is also intended as a guide for those who want to find their first job. Here, I will use the terms “internship” and “co-op” interchangeably just because the word “internship” seems to be known by more people. At least here, co-op is usually part of the degree program registered in a school.
In general, getting your first internship is simple but challenging. It requires two steps:
- Getting the interview
- Passing the interview, a.k.a. getting the offer
Getting the Interview
To get the interview, you need to get noticed by employers and called for an interview. I would argue that this is harder for a first internship as most of us don’t have anything good to show yet. This can be improved if you are a student and utilize all the resources given by the university.
Here are some core components that I think will help you get the interviews ordered by significance:
Good Resume Format
First, the resume needs to be relevant, concise, and in .pdf format.
Also, the resume needs to be able to be parsed by a resume parser. Passing the resume parser is important here, as some companies might filter their candidates using this automated parser first before passing it to a person.
In order for your resume to be effectively parsed, you need to have a resume with one column. I’m not sure if you can make it work with two columns, as I have not tried, but better be safe in here. One page is also recommended, as recruiters do not want to spend a lot of time looking at your experiences. More of the explanations are here: https://www.careercup.com/resume.
Finally, if you are looking for a recommendation, I use this famous Jake’s Resume. It uses latex. Overleaf has an online latex editor that makes it easy to edit it. Make sure to download it as a PDF.
Next, for the contents: Always do a grammar check and write all the bullet points in a concise way while also showing your accomplishments. I used the STAR method to be able to easily outline what I have done concisely. If you are kind of bad at English and finding the perfect words like me, you might want to use ChatGPT. You can ask them, “Reword these bullet points in a resume in a STAR format,” and show your current bullet points.
Ah, the loop that you can never break.
Why do I need to make this point if the post is about someone getting their first co-op? Surely none would have any relevant work experience, right? You are half-correct. Most people would never have any relevant, in this case, developer job. But you can always try to get one or even others that have no direct relevance.
First, if you are a student, Getting a tutoring job can be beneficial, as it will show that you can communicate your thoughts clearly to teach people. In fact, many universities always need peer tutors or teaching assistants. I applied for a teaching assistant job back when I was at Langara, and I am forever grateful for that decision. I was really pessimistic, as I have tried applying for many opportunities in the past but never got in. Taking that first step in applying is crucial.
The key point here is to try to have some experience (not mandatory of course). I would argue that even if the job is not tech-related, it can still be useful as soft skills are arguably more important when you are starting. Just make sure to keep school courses as the priority.
Projects are a huge part of what makes applying to CS jobs different from other professions. The fact that we need to build something in our free time to get those jobs can be daunting. For me, though, I think this is a benefit to have. We are more likely to be assessed by our projects, which we can continuously develop over time, and not our grades, which can only be evaluated mostly on the 2-hour exams.
To have good projects, you need to find problems that you think you’d enjoy solving. Alternatively, you can also choose a domain in computer science in which you want to specialize. Here are some domains that I see as having some prospects (at least on the job board):
- Web development
If you think you enjoy this, I recommend starting to learn from FreeCodeCamp and starting to build projects from there. There are also many projects on YouTube that you can learn from.
- AI/ ML
Arguably the most exciting part of CS, I don’t specialize in this. But I have heard that Andrew Ng’s Machine Learning Course is a really good one.
- Game Development
This can also be related to graphics. I also never had the chance to try this. I would try finding a Unity 2D or 3D course on YouTube or Udemy to learn from.
- Embedded Programming
This is probably the domain with the least competition but with good prospects too. Taking an embedded programming course can be a good start. SFU has CMPT 433 if you are interested.
There might be more niche domains, but there are these four types of projects. If you are truly sure of what kind of internship role you want to get, I think having projects focused on one domain will be really helpful in making you stand out as a candidate.
What has worked for me to have these projects is to focus on classes that give good projects first. This is what I did as I took CMPT 213 (Object Oriented Design), which gave me a Java Swing and OOP project; CMPT 272 (Web Development), which gave me an Angular project; and CMPT 276 (Software Engineering), which gives me a full-stack web development group project.
You can also do projects at hackathons, which generally take the least amount of time. Just make sure you have a good teammate and have a good plan for what you think you will be doing.
So if you are still looking for an internship, try to focus on classes that give good projects. I would leave the harder classes later as long as it’s not an important prerequisite for another class.
For most people, doing things alone can be a bit stressful, so why not make it fun by doing it with others or for others?
I find the most rewards in building things for organizations, as I know the result is useful for others too. Try finding tech-related organizations if you want to find more like-minded peers. Alternatively, you can just try to be in any organization you’d like to be in and offer to build something for them to make club life easier. The most common one is to build a website for that organization.
I really enjoy being in an organization, as I think community plays a big part in who we are and the enjoyment that comes from there.
A.k.a. expected graduation date. Having an earlier graduation date helps, but make sure to be honest that this graduation date is possible. I usually set my graduation date to the earliest possible, though I may extend it if I think I will have more co-ops.
Many companies are more likely to hire candidates near their graduation, as internships are a relatively reliable way for them to get good full-time candidates.
Thus, having a delayed internship might not be a bad idea at all, as (1) it is usually easier to get one and (2) there are more chances for the company to offer you a full-time position.
Therefore, if you can work in the non-summer term, I personally think that it’s fine to delay your co-op term for more important classes with worthwhile projects. Just make sure that your first co-op is the one you think you will learn a lot.
Does GPA matter? Hmm, I don’t know, and I think many people worry too much about this. Some companies might think it matters; others might not think about it at all.
GPA might matter, but I think the ROI is better if you leverage other things listed before rather than just focusing on school (ex. work, organization, projects, hackathons).
Thus, what you can do is just study consistently while also maintaining your other areas of life.
Right now, school life is not really my highest priority. I just need to make sure that I finish all the assignments and quizzes on time and get the general gist of it. Prioritizing projects, organizations, work, or even making sure you are not burned out and enjoy life is more important.
This is a big realization for me now that I have transferred to the university. This might not be the case at all if you need to transfer or pursue graduate school.
Look at what kind of life you want to be living 5 or 10 years from now and reverse engineer it from there. From this perspective, I see grades as not really important. This is also coming from a person who had a quite challenging high school experience in Indonesia. I realized how much time I spent studying, which made me ignore other areas of life. Life is short, and I need to make sure that I get the most out of it.
There are also many highly underrated tips that I know will help your application journey
1. Apply early
ALWAYS APPLY EARLY! If possible, on the first day the application is open. Most companies interview their candidates on a rolling basis. It means they will not wait until the due date of the application to start interviewing. This means the earlier you are, the more chances you have, as the internship slot still remains open.
This means that sometimes late applicants, no matter how good they are, may never be looked at at all if the slot is already filled.
Even if the application is not open yet, you can check the habits of when the company usually posts by looking at the past year's history. If you don’t know about this yet, I think contacting their recruiter is totally fine! It might also be a bonus point as it shows that you are truly interested in the company.
2. Get referrals
I have never really done this step, but I know some of my friends who have. Having referrals truly helps in securing that first round of interviews. I thought that this was kind of unethical because someone with referrals may get interviews even though they are less qualified. But this is simply false; the employer who made that referral may be putting their credibility in jeopardy as they recommend this worker as well.
Word of mouth, after all, plays a huge role in how we operate in society. We can easily trust another person if a trusted friend recommends them to us.
3. Message recruiters on LinkedIn
This strategy, even though it may feel unnatural for many people, can be proven very effective. Make sure that you reword your message to be professional and direct, and tone the word to never expect anything. It is also highly recommended that you show interest in that company by explaining what you have done that may be related to what they are currently doing.
In fact, this is what one of my friends did, and it actually landed them a job as a software engineer intern. You never know where it might take you.
4. Expect failure and fear not trying
What has worked for me to still keep applying every day is to always treat failure as the expected scenario. I think this is quite easy for people who are generally still finding their first co-op. After all, it stinks, but it’s really not the end of the world if we don’t get it, right? But now that we still have the chance, it’s best to always keep trying ᕙ(’▿‘)ᕗ.
One of the most important things is to have a good mindset.
What if your goal is to try to get 50 rejections instead of focusing on getting an offer? I think you will be much more focused on applying many more things. Of course, make sure that the application is filled well.
Passing the Interview
An interview can be very nerve-wracking, especially if you don’t have much experience with it.
Personally, I don’t have much experience with this as I have only been in two technical interviews. I can only learn from this, especially from the one that got me an offer.
Companies really like it if you are genuinely interested in their mission. You can show this by researching their product and what they have done. You can also share this research with them via a link (Notion or Google Docs).
Lastly, always ask questions at the end of the interview. I find it better if we tailor this question to a good question, which is something that is unique and you can only ask this interviewer rather than general ones.
- I saw that you have worked as X and now worked as Y, what has been the biggest change in your new role?
Be curious; answer questions like a short story, factual but also engaging, also don’t make it too long (2–3 sentences max). Don’t be afraid to show struggles. I think people really admire authenticity, as honesty makes you relate more to them.
Have a webcam that is centered on you, and try to look at the webcam while talking to the interviewer. This will make the other end feel more like a natural conversation.
I have also heard that Amazon’s Leadership Principles are really useful in general, especially if the interview is behavioral.
Master Algorithms and Data Structures
If doing projects is the grind for getting the interview, then mastering algorithms is the grind for passing the interview.
Doing Blind 75 I think that is more than enough to get the first co-op. In fact, I have only finished the first half of it. Just make sure to always revise it and understand, not memorize the solutions. This will allow you to solve problems you have not encountered before because you already understand the underlying data structures.
Master Related CS Topics
In general, you might also need to know object-oriented programming and design.
Knowing 4 OOP Principles, SOLID Principles, and Design Patterns are very useful. This is what I was tested on in one of my technical interviews. I actually learned most of this from SFU’s Object-Oriented Design Course, CMPT 213.
You also need to check the job description. If it requires other knowledge like networking, functional programming, and other related stuff. You may need to prepare yourself for these things too.
The last but most important thing to have, I think, is to just enjoy it. Even if you fail, you will still get something out of it. Sometimes you pass it, and other times you learn from it.
There are no better ways to get better at an interview than to keep doing it and treating it as a ‘game’.
This is all for now. I really hope this guide can be useful to you. Getting an internship, especially the first one, can be really hard. These are just some of the suggestions that I know will be helpful.
I apologize if there is any mistake. I’m very far from many people in CS knowledge, but I enjoy writing and sharing about this stuff. I know that many pieces of advice are repetitive and already easily known on the internet, but I hope you find at least one thing useful from here :).