Skip to content

Latest commit

 

History

History
82 lines (47 loc) · 12.7 KB

README.md

File metadata and controls

82 lines (47 loc) · 12.7 KB

Guide to Coop

I've helped a lot of people with advice about coop, and a lot of the time the advice is the same. Here's that advice distilled. If you want to talk to me personally, email me at grafetu(at)gmail.com and I'll try to help. A friend of mine co-wrote this guide which is way more comprehensive, so I recommend you check that out as well.

Preamble

Who is this guide for?

People who are hungry for more success in the UWaterloo co-op system, specifically people looking for Software jobs. If you already get good jobs and are happy with your coops, this advice may not be helpful.

Why is my advice worth anything?

I was a fuckup, but "made it" anyways. My first coop was automated QA and I got it through nepotism (my friend's dad was CTO of the company), it was a shitshow and two months in me and the other coop stopped doing work. A full-time brought his high-schooler son in for two weeks and did more in those two weeks than I did in a month. Second coop was worse: back in the day you couldn't no-rank an offer, if you got matched with a job you were forced to take it. So I ended up doing manual QA, tapping buttons on Android phones, filling in spreadsheets when something broke, and trying not to think about my failures. I'm not a genius keener that got Google first term or something. I was a lazy waste, and I started with QA jobs.

But then I started taking coop seriously, tried a bunch of things (which I will list), and I ended up getting two successively better Toronto dev jobs. Then I made it to Cali: a Stripe internship, then a Facebook internship (I'm at Stripe full time now).

This is only my experience, but I've been told "thanks for the help" and "that's good advice" enough times that I think this'll be helpful to a lot of people.

The Advice

WaterlooWorks

Apply to fifty companies every time. Until you're consistently getting interviews with all the companies you want, max out your applications every time. Go to every interview, and use them as an opportunity to practice. If you don't care about the job, then there's no pressure to perform.

Side projects

In first and second year, side projects are king. Some companies care about grades (Google, Wish, others probably), but side projects will get you that Southern Ontario dev job that'll kickstart your career. You can start big, but you can also start with a small discord bot, or making a personal website from scratch. My best strategy for side projects was joining hackathons with a friend or two I trust, and then trying really hard to get something that looks good on a resume. It's really easy to code at a hackathon, you don't have to force yourself to do it. But everyone has their own strategy that works for them, find yours.

Side projects will get you interviews for your first dev jobs, and after that they matter less. But you then actually have to pass the interview:

Leetcode

There's a straight conversion between leetcode problems and annual salary: ten leetcode problems is +$2000 a year annual salary. This is an approximation based on my experience, but I want to make it clear that if you do one hundred leetcode problems you're going to have a much easier time with your early career.

If you do a hundred problems, you have a good chance at passing the Facebook internship interviews. For Facebook I walked into the interview, exchanged greetings, and then worked on the problem until the time was up, said thanks, and left. There were never any behavioural questions, never a "why do you want to work at this company", just pure leetcode. A lot of companies are similar, so it's the only thing you have to get good at. Most companies don't go 100% algorithms like Facebook did, but the algorithm part of the interview is usually the most important part.

But you have to do leetcode the right way. You get one submission. No IDE's, no test runs. Just type into the leetcode.com in-browser editor, test everything in your head or on a piece of paper. If you don't submit perfectly first try, you're wrong and you failed the interview. You must be able to run through all the possible test cases before submitting, and leetcode will force you to get good at this. If your mistake was something silly like you forgot about handling empty inputs you're wrong and you failed the interview. Maximize your acceptance rate on leetcode, you can see that on your profile (seriously, do this). Of course, in a real interview mistakes are fine, but you must train hard so it's easy in practice. An amateur musician practices until they can play a song, a pro practices until they can't get it wrong. If solving the algorithm question takes ten percent of your brain, you can use the other 90% being likeable and explaining your reasoning.

To be clear: leetcode is really hard! I was so bad at it at first I avoided doing it because it made me feel stupid to fail these basic easy problems. My friends could do the problems just fine and would act as if they were easy, so I stopped doing leetcode because I didn't want to think about how I was so dumb. But eventually I started to get some success, and I started being able to do the problems.

If you have trouble, start with the easy problems, the easiest you can find, and if that's too hard, just keep at it. Maybe peek at the solutions, or try to google a bit for some help. Leetcode is just a skill, like chess or lifting weights, you can just practice and shoot up in skill, even if it feels overwhelming, confusing, intimidating at the start. You don't need a huge brain, you just need to practice. Keep at it.

Resumes

Get at least three people to review your resume. Don't just ask one or two people, get multiple. Especially look for people that get decent jobs. Why at least three people? Because each person has their own weird ideas or is going to focus on some specific problem, but when you get a lot of people looking you can get a comprehensive critique that is less biased. Write down everything that people say, don't try to memorize it. I don't critique people's resumes if they're not taking notes.

Read the section on resumes from the book Cracking the Coding Interview. I have a lot of advice to share here, but CTCI explains it pretty well and has a host of other good advice related to jobs. Pirate it if you want, but make sure you purchase it once you start making money.

In general UWaterloo has a pretty good machine for refining resumes into a good format.

Don't listen to any advice from CECA with respect to resumes. They're actively bad and will make your resume worse.

Interview Practice

Interview practice solves two problems: nerves, and verbalisation.

I think a lot of people have entered those Tatham Centre interview rooms, had an agonizing wait in the chairs, entered the interview room, and then fallen apart through nerves. I used to run my hands under the cold water in the bathrooms so my hands wouldn't be sweaty during the handshake, and I'd fail problems that were middle-school easy just because I was super nervous. I was too busy thinking about how I was doing or why I couldn't focus to focus on the problem.

But if you don't get nerves, and you solve the algorithms question, that's still not enough. That's because interviewers want you to verbalise everything you're thinking. Watching someone silently write on a whiteboard isn't a strong signal of wether you should hire a person or not, they want you to talk about your process. Explain everything you do, why you choose each data structure, what cases you're considering, how you're going to split up functions, and any assumptions you're making. Solving the problem is all well and good, but it's only half the battle.

The good news is: pramp.com.

How it works is this: you schedule an interview, join the google hangouts, answer a problem for thirty minutes, get feedback, and then do the same for your partner. You'll learn quickly to narrate everything you think out loud, to show your problem solving process, and most critically you'll get a lot less nerves during interviews. Before pramp interviews I would get the exact same nerves as real interviews, but after the fifth interview I felt nothing (I would load up my schedule with Pramp interviews whenever I was feeling motivated, thus past-me locked future-me into actually doing them, because standing up your partner is super rude).

Failure

Most likely you didn't get that sick dev job, and are doing QA, or IT, or something else that's not dev. That's fine, that's how I started, and that's how thousands of other students before you have started. But remember every shitty day at work and work to make sure that never happens again. Delete your video games, stop talking to friends that invite you to play league (2022 update: valorant), block reddit and twitch, uninstall windows and switch to linux (I hung out in the Computer Science Club and only talked to nerds about computers, I recommend this), whatever it takes to get you side projecting or leetcoding.

It's probably mentally unhealthy to obsess, but success tastes sweet and I fueled my side projects with anxiety about my career and failure. I would see my future stretching out in front of me, constantly doing shit jobs at shit companies, watching all my friends be successful and happy, and that would motivate me. Should you do this? I feel like ethically I can't recommend it, some people reading this might already be super obsessive and neurotic, and this validation they should obsess more will destroy them. I don't want to have someone wracked with anxiety to get even more anxiety after reading this. At the same time when I see people say "don't worry too much" and "you'll get the good coops eventually" I get angry because I hard disagree with that. There is a correct amount of worrying and anxiety, too little is bad, just the same as too much.

I intentionally fed my anxiety, eventually getting nightmares about work, but it worked out for me and it increased my output. And now because of my early investments in my skills these days I just have a fun time at work every day and have never stressed about my perf rating.

Coop is great because if you fail you have time to prepare for your next shot, and you get six chances.

The offer

If you do get an offer: negotiate. They will never take away your offer because you tried to negotiate. Always ask for a few dollars more, especially if you have a competing offer. Just ask nicely, "Hey, could you increase the salary from 20 to 24 an hour? I would feel a lot more confident about my decision if you could do that for me" or "I have an offer from AutoSoft, and while I would love to work with you, I couldn't justify it if I could get more there". If they say something like "HR won't let me" that's a lie, but you probably don't have enough leverage to negotiate anyway. I used to negotiate for jobs (and return offers) I knew I wasn't going to take just to practice or get better leverage. This advice is more important for fulltime, but it's good to get into the habit now.

It can feel super scary to ask for more, especially if you feel lucky to even get the offer. I too still get scared, but in retrospect it's always worth it to negotiate. More info for fulltime here (seriously read this shit).

On the job

Nice, you got a job! Dedicate yourself to this coop, ask as many questions as you can, and leech knowledge from your coworkers. Ask for projects you think are too hard for you, and then ask for help. Looking stupid doesn't matter in the first three months. It's good to be the type of person that asks a lot of basic questions for months, and before you know it, you're an expert on a few systems and full-times are coming to you for help.

But also: now is the time to start worrying about your next job. You want to make your resume real nice for your next internship, and the easiest way to do that is to start planning now. Look for projects that have measureable impact and look good. Aim for projects or tasks that lend themselves to interview lines, something that'll get you a "23% faster" or "2x increase in" in your job bullet points. Move the needle on some quantifiable metrics.

Misc

2024 Update: Sometimes people email me and they mention they browse LinkedIn and then they feel bad. Do not be someone who browses LinkedIn. LinkedIn is like a black hole that will waste your time, make you miserable, and destroy your career. Out of all the social media platforms, it's the most damaging.

If this guide helped please let me know. Email me or whatever else works for you. If it didn't help or you disagree, please reach out as well.

I accept PRs.