Final Thoughts on UBC’s BCS Program

If you stumbled onto this page looking for information about UBC’s BCS program I recommend starting at my first post here.

One and a half years have passed since I last wrote an update on the BCS program. Two and a half years since starting the program. With graduation imminent I figured it was time to give my final update on what I have been doing and my thoughts on the overall quality of the program.

Since my last update, I did 3 four-month internships. I mostly did backend web-development in NodeJS, Rails, and Python. A lot of the work I ended up doing straddled the line between development and dev-ops, with significant portions of each internship focusing on performance, scalability, and infrastructure improvements.

These internships offered me excellent opportunities to work on important projects, with both real business impacts and lots of interesting technical challenges. Many of my colleagues had other internships that were every bit as good. Internships are really one of the strongest parts of the program and I highly recommend focusing significant effort on preparing for them (personal projects and interview prep).

School alone would not have prepared me for this work. If you want to have the chance to really dive in to interesting projects on your internships you need to prepare yourself outside of school.

After a year of having proper weekends and remembering what it was like to get paid rather than give all my money to UBC, I was back at school for my final two terms. First term I loaded myself up with courses. Five 300 level CS courses and a technical writing class which is a BCS requirement (a completely stupid one…). All of this while preparing for technical interviews and beginning to apply for jobs. The whole term was exhausting and stressful. For most of the term I don’t think I had a single day off with most weekends spend working on assignments.

Second term started just as bad. While I only had 4 classes, I was determined to get a job lined up as fast as possible so I spent a lot of the first few weeks interviewing/prepping. It paid off because I now have an exciting job lined up for when I graduate. However, even with the pressure of finding a job gone, 4 upper year courses continued to have me working most weekends.

Final thoughts on the program:

If you want to finish the BCS program in the “standard” 5 terms the last few terms will be very intensive. If you can get most of your bridging modules done in the first 2 terms while you have fewer intense CS courses things won’t be quite as bad. If your last 2 terms are full schedules of mostly 300 and 400 level CS or other tough disciplines expect 7 day weeks to be the standard.

You can get an internship/full-time position at most of the “top” big employers (Google, Facebook, Microsoft etc.) with this degree. However, the courses you take won’t prepare you for the interviews. You need to put ~10 hours a week into preparing for programming interviews for at least a few months ahead of these interviews. If you are aiming to get a “top” internship for your second summer you should begin preparing a full year before. Hiring starts around 8 months before the internships begin.

Local startups (and to a lesser extent startups in other Canadian cities) hire lots of UBC students. They will generally care more about practical knowledge with the languages and frameworks they use. For web development JavaScript is a must know. Ruby on Rails and NodeJS are both very common for backend work. For mobile development iOS is a good choice, although there are Android positions if that is your preference. Make demoable apps that you can link to in your resume and show off to interviewers. Being able to link to a simple app that you published in the app store puts you ahead of 95% of applicants.

The most important aspect in course quality is the professor. Generally the professors in the CS department are good, but there are a few to avoid. With the fast BCS schedule you likely won’t be able to get to every 300/400 level class you want. You won’t have a choice of best professors for most upper year courses.

My bridging module was statistics and I am very happy with that choice. The classes are far from easy but in my experience the statistics professors are great and the courses are well structured.

Overall I am very happy with the BCS program. I feel like the classes have provided me with a solid basis in computer science fundamentals. The advanced classes are really interesting and get you digging deep into specific areas in computer science and building non-trivial programs.

From a career perspective, I’ve been even happier. Within a year of starting the program I had an internship that I enjoyed. Finding a new graduate position was reasonable (although still very stressful). After my first degree I searched for months with few interviews until finally I took a job that didn’t even require my degree. For this degree most of the stress came from keeping my standards very high, rather than from inability to find any related job.

Probably the best part of the program is the people you will meet. BCS students come from a fairly wide range of backgrounds and differ in many ways. However, BCS students are almost always mature, hard-working, and humble. These qualities really stand out against the average first degree CS student.

One thought on “Final Thoughts on UBC’s BCS Program

  1. Hi Daniel,

    Thanks for the great posts about the BCS program. Your posts on CPSC 110 really encouraged me to study on my own – I’m challenging the exam in the first week of May. Hopefully that will help make the program a bit more flexible for myself.

    I have some questions for you regarding regarding the program, but it would be easier to ask them in person. I was wondering if you would have some time to meet up in person and grab a coffee or something like that after exam season is over. You can send me an email. If you are crunched for time, that’s okay too.

    Thanks!

    Kelly

Leave a Reply

Your email address will not be published. Required fields are marked *