I’ve gotten a lot of questions on how to get a job as a student. Often students want to buff up their resumes or skills a few weeks before their interviews. Honestly, I don’t think there’s much you can do in less than a few months to improve your chances. Obviously you can review algorithms, practice questions and buff up you knowledge to give you a slight advantage, but if you really want to level up and give yourself the best chance at landing the type of jobs you want, you need to start at least 6 months in advance. That being said, a LOT can be accomplished in a year.
How to be a good candidate (6 months to 1 year before you want a job)
Before you ever apply to a job, there is a lot that you can do to improve your quality as a candidate and pick up qualifications that will make getting interviews and job offers much easier. These are things that you would do well before applying to a job to set yourself up to be in a good position when you start looking for a job.
-
Student events : Participating in student events such as computer science clubs, hackathons, meetups, etc., is a great start. These are good fun and help you meet interesting people and gain skills. Additionally, including these events on your resume is a great way to demonstrate that you are driven and willing to learn.
-
Programming competitions : There are a ton of competitions that students can participate in. These are a great way to learn as well as meeting interesting people. Additionally winning/competing in competitions is a great way to improve your resume and stand out to recruiters. There are different types of competitions for whatever you are more interested in.
-
Hackathons : Hackathons are usually 24-48 hour competitions in teams of 3-6 students that commonly focus on quickly throwing together different pieces and often have industry sponsors. There is a lot of value in doing a few hackathons to improve your resume, meet people and learn about that type of coding but I would avoid focusing only on hackathons to the detriment of other events.
-
Theoretical Competitions : These competitions are often longer and broken up into various chunks and cover a wide range of domains. Students typically work on very difficult problems over the course of 3-6 hours before moving onto the next problems. The challenges are typically more on the theoretical side and are very different than hackathons. These competitions are often completed in groups of 10-20 students over a long weekend. These are a great way to learn from more experienced students on the team and will expose a whole different side of computer science while looking very impressive on a resume.
-
Demo competitions : These competitions are often very open in scope, students can present any project that they have worked on to a panel of judges who determine the prizes based on a number of factors. These competitions are very unique, since you often have many months to work on a project and have no clearly defined goal.
-
Side projects : In my opinion, side projects are the best way to learn and improve your resume. Basically, you pick any topic that you find interesting, and come up with an end goal. For example an iOS app, or a machine learning program, or a video game or a website. Really anything. The fun part of this is that in trying to complete an actual project/program, you will unintentionally be exposed to a ton of domain knowledge and will more or less gain “work” experience by working on your own towards a finished product. Additionally, side projects look really good on resumes since they are more or less equivalent to work experience (and can make even a student with no previous work experience look good) as well as demonstrating drive, curiosity and deep domain knowledge.
My recommendation would be to participate in one of each, for a few reasons. You will be able to explore a bunch of different sub-domains of computer science and find out what you like, you will meet talented students that you can learn from or that can help you find a job, and you will gain a bunch of experience that will both improve your skills as a computer scientist and make your resume stand out more when applying for jobs. Below is a list of some of my favorite events that I would recommend:
- Computer science games (theoretical competition, both uOttawa and Carleton send teams every year)
- CUSEC (Conference, career fair and demo competitions, both Carleton and uOttawa fund delegations each year)
- Hack the north / Major League Hacking (one of the more popular/prestigious hackathon for students)
Also look up the various student organizations and meetups on campus, for example the CS club at uOttawa.
Finding Companies to apply to (6 months before you want a job)
The first step is to find companies that are hiring and that you would like to work for. There are a couple ways that you can find out more about various companies:
- Conferences / Hackathons
- Career fairs
- online website/forums
- Conferences/Hackathons
There are a lot of student run/focused events such as conferences and hackathons. Very often the sponsors of such events are companies that are hiring, and often they are looking for both full time and interns hires. As such, looking for the sponsor list of any Computer Science/Software Engineering related events is a good way to get lists of companies that are hiring.
Additionally, these events are a great way to meet recruiters to have an easier time getting an interview. At these events, sponsors will be keeping an eye out for candidates that stand out. Usually the students that we notice are the ones that will show off a good project, win some sort of prize or have a very strong resume. For example, I got my internships through participation in competitions at a student run conference.
That being said, recruiters get a lot of resumes at these events and so you need to make sure to have a compelling conversation with the recruiters. A lot of time, students will simply ask about the company or won’t have really much to contribute. A good way to stand out is to have a “game plan”, know what the company does and why you want to work there before talking to the recruiters, that way you can have an actual conversation that hopefully leads to an interview. Another way of standing out is competing in some sort of competition that the sponsors are involved in, and then when talking to the recruiters you can bring up your project/results to see if the recruiters want to give you an interview,
Always remember to talk to the recruiters, get their email if possible, then apply online and follow up.
Career Fairs
Career fairs are good for finding companies that are hiring, but it’s difficult to make an impression on the recruiters or get an interview directly, as such it’s more useful for getting a list of companies to apply to unless you have a very strong resume for some of the companies in particular.
Online Websites/Forums
These are great places to find jobs and most companies require you to apply online anyways. Communities such as reddit or hacker news are great for finding smaller companies that might not show up at student events. For example hacker news has a monthly post where people share what companies are hiring (typically startups). Dedicating a few days to searching online is a great use of time since you’ll find a lot of companies that you might potentially want to work for.
Links:
- Hacker news
- Reddit/r/CSCareerQuestions
- Reddit/r/CSMajors
- CUSEC
Applying for jobs (3 to 6 months before you want a job)
Once you’ve found the companies you want to apply to, there are a few steps before applying:
- What job(s) to apply to
- Writing your resume
- Cover Letters
What jobs to apply to
There are a lot of jobs that have a ton of requirements that you may not fulfill (for example knowledge of a specific technology or years of experience). These requirements are important but flexible, don’t apply for a job that you are completely unqualified to do (for example applying for a iOS developer job without any experience in mobile development), but if you fulfill most of the requirements and are only missing a few points or if you feel like you would be a good fit despite not having everything they ask for go ahead and apply anyways. Almost no candidates have all the points that they are asking for and it’s often just a filter to avoid getting overwhelmed by too many applications.
So apply for any job that you feel you have some relevant experience/knowledge, even if you don’t meet all of the requirements.
Writing your resume
The most important part of your application is your resume as such you should put most of your effort into making it as good as possible. That being said, there are a lot of different opinions about exactly how to make a resume, but there are a few key points that most recruiters agree on.
-
Keep it short (1 or 2 pages): if you have a lot of relevant experience two pages is okay, but most students/new grads can make due with 1 page
-
Highlight the key points: a lot of times, students/new grads will cram as much information into their resumes as possible. This is often not a great strategy, since it might make it harder to see the really good parts of your resume. So what you should do is make it so that your best experience/qualifications/awards are visually easy to see/read. It’s better to have your 3 best points very clear than to have 10 points that are not as good. An example of what not to do is adding jobs held in highschool or that are not relevant, when instead you could use that space to highlight industry experience, awards, scholarships or good grades.
-
Adding your school courses or projects is good, but avoid adding courses/projects that are expected of a Computer Science student. For example, adding that you took an algorithms course is not great, since we assume that computer science majors take algorithms, but if you took an interesting technical elective or participated in a research project, those are great to add.
-
Use some sort of software to make your resume so that it looks good (using templates is fine), i recommend using canva as they have a ton of good free templates.
-
If you have a lot of different experience/projects or whatever that you can put on your resume, you can tailor your resume to each job you are applying to by reformatting and focusing on the projects that are relevant to the job.
Cover Letters
Many jobs require that you submit a cover letter. The issue is that many of the hiring managers/recruiters don’t read the cover letter while some do. My advice would be to write a 0.5-1 page letter describing why you want to work there and why you think you would be a good fit (experience, personality, etc.) but if it comes down to it, put more effort into polishing your resume. There are a lot of example cover letters online so use them for inspiration, but make sure that you customize it and make it unique for the jobs that you are applying for.
In the interview
I would say that there are two main types of interviews. There are interviews that are centered around typical interview questions and data structures and there are interviews around your previous experience/projects.
Algorithms interview
These interviews focus around asking you a few theoretical questions around algorithms to make sure that you have some knowledge of the domain. IT’s somewhat hard to prepare for these interviews because there are thousands of possible algorithms and questions they could ask. However, books such as “Cracking the coding interview” or websites such as “Leet code” are very good ways to prepare for these types of questions. When in such an interview, don’t try to come up with the best answer right away, try to come up a “brute force” approach that works and then try to improve it from there. Also make sure to say out loud what you are thinking. If you get a brute force solution working, the interviewer will at least know that you understand the question and can come up with a basic solution, and by talking out loud, the interviewer can follow your train of thought. This usually helps the interview get an idea of how you work, where if you just stay silent, the interviewer may assume that you simply don’t understand. Project/Behavioral interview
These interviews focus on how you think and your work experience. These interviews are a lot easier in some ways, since there is no right or wrong answer, but at the same time you need to make sure to talk about impressive things that you’ve done so that you can demonstrate knowledge. A common thing is to go over your projects and talk about it. This is a good time to bring up any interesting or challenging problems that you faced and how you overcame them. Don’t over exaggerate, but you can definitely sell yourself at this point by bringing up all the tricky or interesting things that you did/learned/worked on. This is why doing side projects and competitions is good for this type of interview, since you will have a larger bank of technical topics to discuss.
After The Offer
After you get a job offer, there are a few things you can do, if you don’t like the offer you can try to negotiate, you can also ask for time to make a decision if you are waiting on other offers, or you can accept the offer right away. When trying to decide between offers, there are three main things that I look for:
- Quality of Life
- Role
- Salary
Quality of life is all the little details around the job that can impact you, for example a long commute, or an expensive city, or a crappy office, etc. Often people focus on the salary alone, but if you need to commute multiple hours a day through traffic, it may not be worth the extra salary bonus. At the end of the day, just make sure that when you pick a job, that the city, commute and quality of life will be good, rather than just accepting the highest salary. Additionally, you need to take into account the Cost Of Living for the city the job is in when comparing salaries.
The role itself is super important too, for example you could have a very interesting role at a small company, or a boring role at a large company. Again it depends on what you want, but there is value in choosing the role over the company, as working in an interesting role at a small company will allow for very quick growth. For example, I work at kinaxis and since it is a small company, I have a ton of responsibility and am learning a lot, additionally there is a lot of room for promotion and quick career growth. On the other side, if I worker at a big company like IBM, I would have a more prestigious company name on my resume (which can help get other jobs later), but there is much less room for promotion and so I might actually progress less quickly in my career, despite being at a bigger, more well known company. As such, it’s important to not only look at the company, but also your role and opportunities for growth at the company.
Salary is also very important. Typical salaries for new grads are from 60k-80k in Ottawa, other cities may have higher or lower salaries but you need to account for cost of living. It may be worth negotiating if you are at the lower end of the entry salary range, but for offers above 80K, I don’t imagine that there is much room to negotiate up. There are two reasons for this:
- The way salaries work at medium and big tech companies is that there are “bands” for different levels of experience. For X experience, they will pay between Y and Z. You can negotiate within this range but can’t break outside of it without having enough experience to get to the next bracket. So if you are near the top of the entry-level bracket, you can’t negotiate up much without experience
- New grads often don’t have specialized industry knowledge that can be useful when negotiating salary. For example , if you have a very in demand skill, you could negotiate a higher salary since there is a shortage of software developer with that skill, but this is often not the case right out of school
Conclusions
In conclusion, do as many side projects, hackathons, competitions and meetups as possible to gain knowledge, connections and to polish your resume. Do this well in advance before you want to start working. Next, about 6 months before you want to start working, start looking for companies that interest you. Then spend a month or so making your resume and cover letters and sending them as soon as possible to jobs (the best time frame is 3 to 6 months before your desired start date, but can be earlier or later if needed).
To prepare for your interviews, review algorithms questions such as “Cracking the coding interview” as well as going over your project to refresh your memory of any interesting technical achievements.
Finally, if you get an offer, weight the quality of life, the role itself, the possibility for growth and the salary before choosing the best option for you.