CPSC 110 and CPSC 210 (the prerequisite stream for this course) were probably my two favourite courses I had taken at UBC so far. Thus, I was definitely a bit excited to be taking CPSC 310 this term.

I was “scheduled” by my program to take this course in Summer 2016, before I had ever been on a co-op work term. Unfortunately, the CPSC department has had trouble meeting the recent demand for courses, and this is amplified in the summer. So, I was unable to take this course in either 2016S or 2017S (it wasn’t offered!) so this term was my first opportunity.

This will help to prepare you for work

Part of me wants to plead with you to DEFINITELY TAKE THIS COURSE BEFORE CO-OP. I am not ashamed to say it – mostly because I already told all my co-workers this – but the first couple weeks of my co-op, I went home every day and cried about how stupid I felt. Why the heck was I typing “run build” into a console window? Why was I using a console window?!? WHAT IS A CONSOLE WINDOW??? (This was just one of my many baby-software-developer existential crises).

CPSC 210 is a great intro to object-oriented programming, but it doesn’t at all show you how many software modules interact to form a coherent program. It also doesn’t familiarize you with version control, Scrum, or anything else you’re going to need to know working in a software development team. Having taken CPSC 310 before co-op, I definitely would have felt a bit less like I was slowly dying my first few weeks of work.

This is way easier if you’ve already worked

However, part of me wants to say just save it until after co-op, so you never have to attend tutorial/lab. In this course, tutorial/lab is optional. The exception is weeks after deliverables are due, which includes only 3 or 4 weeks of the total ~12 weeks of term.

I, being a keener, always attend optional tutorials. Except for 310 post-co-op. I did attend the beginning of the first tutorial, but they were teaching me how to use Git – something I had been literally using 8 hours a day for about 8 months. So I left and I never attended tutorials again! (In retrospect, there were many helpful topics in the tutorials, but the slides were posted after! And then I got to go home before rush hour!)

You need to create engineering tasks for your TODOs for the project (oh, did I mention there was a huge project in this class?), which was made way easier by doing this in real life. You also need to use version control to collaborate with your SINGLE MANDATORY TEAMMATE (they also need to be in your lab section, so make your friend register in the same lab section as you). This is also made way easier by having done it before.

The project takes a lot of time (a lot a lot) – but I found it generally very enjoyable and fulfilling to work on. Write 10 tests -> write a function -> 10 tests pass (I am possibly skipping some intermediate cursing / screaming at my computer). However, if you hated CPSC 110 and/or 210, I can see this class being excruciatingly painful for you. My partner and myself didn’t really hit too many complete roadblocks, and it was still a slog to put in the hours to complete it.

The rest of it

An interesting difference between this class and CPSC 110/210 is you do almost no in-class coding: the course is highly theoretical. You will spend more time staring at UML class diagrams for design patterns rather than actually refactoring code to use these patterns. You talk about Agile and Waterfall and software project risks – of course, this is useful stuff, but it is a huge change from the flipped-classroom model of the earlier software courses.

Overall, I really liked CPSC 310 – I felt the project was a really significant accomplishment to me (even if literally everyone did it), since you start with an almost entirely empty project file. This is a far cry from the CPSC 210 “fill in the blank/TODO” model. In the end, you have actual working software that performs a non-trivial task – it answers queries about UBC courses and rooms.

I would be taking 410 next term (because I like this stream so much), but ALAS UBC IS NOT OFFERING IT (did I already complain about this? Yes.). Anyway, in closing – take this course before or after co-op (but probably before), this course isn’t really similar to 110/210 at all, and if you can, take it with Elisa because she is awesome. 🙂

3 thoughts on “UBC Course Review: CPSC 310 (Intro to Software Engineering)”

  1. John A says:

    Hey Kirbee, very informative blog!

    I’m starting the BCS program in September, and I plan on taking 310 in term 2 (I did 110 prior to being accepted to the program). I want to take it as soon as possible in preparation for coop and this blog post has definitely reinforced that.

    However, I am also registered for 221, 213 (which I have heard are both time consuming courses) and an elective that semester . What do you think about this workload?

  2. kirbeep says:

    Hi John!

    Honestly … I would not do that. Though 310 is useful for co-op, it is not critical – and due to most BCS students only being able to take it during the summer combined with it not being offered for the last 3 summers, it’s becoming increasingly common to *not* have it on your first co-op.

    221 and 213 are both time-hogging courses. Not quite on par with 110, but getting up there. 310 is another one – I personally don’t think I could have handled those three in a term, but it also depends on you and your commute / hobbies / social life. You could always see how your first term goes and evaluate whether you can take “more” in your second semester.

  3. John A says:

    I definitely want to have time for side projects, and other extra-curriculars. I guess I’ll stay registered in the course for now and see how the first term goes.

    Thanks for the advice!

Leave a Reply

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