Updated Thoughts on UBC’s Bachelor of Computer Science Program (after two terms)

If you are thinking about applying to the program and looking for my full thoughts, I would recommend reading my first part here as this will build on what I wrote there.

As I said in part one, my main goal with the B.C.S. program was to learn “algorithms, data structures, design patterns, and to improve my mathematics and statistics”.  My goal with the program was not to learn specific languages, frameworks, or technologies. On that front, I have mostly sought to teach myself on the side, as CS courses here, quite rightly, do not focus on teaching the latest frameworks or technologies.

Now that I am two terms ( 8 months ) in and I am applying for co-op jobs I have to say that I am a little disappointed in the progress I have made on these topics through the courses I have taken. Algorithms and data structures have only been touched on in a limited way in the basic CS courses. 110 talks a little about trees, recursion, and search but fails ( due to the focus of the course being on software construction ) to discuss these topics above a superficial level. 210 discusses a few of the basic data structures, but does not go into the type of detail that allows someone to reason through their uses in the types of problems asked in technical interviews.

It is a little better for design patterns, with 210 covering some of the core ones, although I wish the course had a project to implement one or two of them. On the math and stats side I probably have learnt the most of any of these topics. This term I took Math 221, which was a good course that provides a good introduction to linear algebra and Stat 302, which is a great introduction to probability.

Overall my opinion on the program hasn’t changed much. I still highly recommend taking CPSC 110 on Coursera before starting the program, and then challenging the final in the first week of class. The fact of that matter is that the pre-requisite structure for computer science courses just doesn’t work well for B.C.S. On the standard timetable of the program you will start applying for co-op jobs with only some java knowledge, maybe python, some software development practices, and only a few very basic projects without putting significant time in on top of your classes. Co-op still has a very high placement rate, so you will likely get a job, but if you are like me and want to aim a little higher, having your school hold you back over arbitrary pre-requisites is a little annoying.

So far instructors in my computer science courses have been well above what I expected based on my experience from my first degree, and I hear largely good things about professors that teach the upper year courses.

While there has been a lot of good and bad I am still very hopeful and even somewhat excited about the rest of the program. The classes I am doing this summer are finally starting to bite into the core Computer Science topics that I have been wanting to get to from day one. In the first summer term I will do another software engineering course that will hopefully culminate in an interesting project, and my first course on algorithms and data structures. In the second term I will do a computer hardware course and hopefully the next level of algorithms and data structures (if they can find someone to teach the course).

You can now read part three here.

5 thoughts on “Updated Thoughts on UBC’s Bachelor of Computer Science Program (after two terms)

  1. Pingback: My thoughts on UBC’s Bachelor of Computer Science program (after one term) | Daniel's Blog

  2. Hi Daniel,

    Thanks for writing this blog post. I also recently got accepted into the BCS program, and was wondering if you took any summer courses prior to beginning the program. Also, how was the workload? Around how many hours did you spend studying/on homework on total for all your courses for semester 1? Any tips on effective studying/doing well? What courses did you take as your bridging modules?

    Thanks so much!

    • I didn’t take any summer courses before, but I would highly recommend taking CPSC 110 if you can. I imagine it is too late though if you aren’t already in it. In that case, if you have previous programming knowledge I would do it on Coursera and you can challenge it in the first week.

      The workload varies quite a bit. CPSC 110 is about an hour outside of class for every hour of class/lab I would say. CPSC 121 is maybe a bit less (although some people found it more work than I did). Other than that it depends on what courses you choose to take.

      As for studying well, the biggest thing is to stay on top of things. Try to do readings and practice problems before you have a lecture on the topic. Both 110 and 121 are much better if you somewhat know the material before class. Find people to study with. Your BCS colleagues will be great for this. There is a BCS facebook group you can join if you search “UBC BCS”.

      My bridging modules are mostly stats courses along with the machine learning course.

  3. Hi Daniel,

    Great post – good to see some insight on the BCS program. I definitely agree about the structure issue for the first year, and I am going to be trying to challenge the BCS exam next month.

    I’m wondering if you have any tips for someone getting ready for challenging the exam? Any particular parts to focus on?

    One issue I am having is keeping up mentally with the deep recursive trees and accumulators. I’m focusing more on writing down any trees that I am going to be mutually recursing through to try to keep track better. Functional programming just seems so much harder to visualize for me than imperative (loops vs. recursion) but I think it will be beneficial to me ultimately.

    Appreciate it!

    • Personally I think the key to understanding recursion is to start at the bottom. One of the beautiful things about recursion is that you can generally think about just the base case and then about whether each recursive step is doing the right small step, trusting that the recursive call will return the correct data up to that point.

      Generally I would make sure that you really have the core of the course (the design recipes etc.) down. Just following the design recipes perfectly and having moderate knowledge of the later parts of the course should get you a decent grade.

      Best of luck on the exam! I definitely think it will make the program better for you “skipping” 110.

Leave a Reply

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