For any Grade 12 student the idea of university can be daunting: “which university should I apply to/accept?” or “what field should I study?” The hardest decision I had to make was choosing between University of Waterloo’s Software Engineering Co-op program and University of Toronto’s Computer Science program. I’m currently in my senior year, enrolled in University of Waterloo co-op program, and I regret nothing.

Paul Kim

4 Flavours

In my experience, first-year was the toughest year – new people, new learning environment, and endless freedom – no one is there to scold you for skipping 8:30AM classes. The most challenging part for me was that I had to land a co-op placement for summer. This meant that I had to juggle my time between 6 courses of school work and interviews, which was very overwhelming. Not only that, but my resume wasn’t very impressive; I had zero work experience, and only some knowledge of Java and C++. Not surprisingly, I had trouble getting employed for my first co-op term. But, as they say, you learn from your mistakes.

I learned that not all resumes are structured the same; business resumes are very different than computer science resumes. For example, writing about my personal projects was significantly more valuable than writing about my communication skills. But most importantly, one page is key; it keeps the content concise and to the point. With multiple iterations of my resume, I successfully landed a placement with the government.

So was enrolling in a co-op program a mistake? Absolutely not. Everyone eventually experiences their first full-time employment process – most of us during summer breaks or after university. I simply decided to expose myself earlier. This gave me the opportunity to experiment with different work environments. After that first experience, I went on to have three other co-op term placements: 6-person startup, a very large corporate company, and Hootsuite. I made a conscious choice to try terms at companies of different industry, size, and maturity. It’s like ordering ice-cream; you take samples of variety of flavours, then decide on the one you like best.

Ramping Up

Landing co-op placements was one challenge, but being a reliably independent employee was another. Each company had their own unique software technologies, some including: Django Framework, Node.js, Angular.js, PHP, MongoDB, and MySQL. I had to ramp up on something new every co-op term. Remember though, you are not alone. You are surrounded by experienced engineers who can provide help and guidance throughout your work term. What’s really amazing is that while you can definitely learn from them, they can also learn from you. For example, during my time here, I worked with the Billing system codebase frequently. So, I often shared my knowledge of the code’s logic whenever my co-workers had specific questions. Peer-learning provides great opportunities to broaden and hone your technical skills.

“Stop Thinking and Start Doing”

That title comes from a blog post by James Clear, who explains that “passive learning creates knowledge. Active practice creates skill”. I want to be an effective engineer and the best way to do that is through practice. In order to overcome the learning curve of these new software technologies I created my own practical experiences by working on personal projects during my work terms.

On my second co-op term, my company used Django Framework, MongoDB and NVD3.js. Since I was a frequent user of Steam, a gaming platform, I used the same web-stack to create a web application called Steamize. Steamize summarized Steam accounts by displaying total hours played, current cost of the account (in relation to game prices), and total achievements completed. I always wondered how many hours I spent on playing games and how many games I bought. There wasn’t a way to summarize all this information. Hence the application; it gave me an insight on all this data that was previously not available. I didn’t stop there. During my time here, I learned how to design the software architecture of a scalable application – the MVC architectural pattern. I applied this knowledge to improve Steamize into Steamize 2. The best part is, I was having a blast while creating these applications. School can be great for learning fundamentals and theories, but co-op truly provides you with the opportunities to develop your practical skills.

Final Thoughts

All in all, co-op programs in general offer the opportunity to explore different work environments, meet future mentors, and make friends, while also enhancing your practical skills to create a better ‘you’. I highly recommend all students applying to university to take the co-op route, if given the chance. You won’t regret it.

About the Author

Paul was a co-op student on our Dashboard team this summer. He’s a fourth-year Software Engineering student at the University of Waterloo and loves ice cream.