I’ve done this after each term so if you stumbled on this one first I would recommend starting at the first post here.
I’ve not been looking forward to writing this. Two of my four summer classes were frustrating and stressful. In general my summer was busy, stressful, and exhausting. This will be a quick update.
Don’t take 4 intense classes during the summer while also TAing, especially if you are going to be applying for co-op jobs. Like me, you could have easily taken one of them in your next study term without really losing anything.
In the first summer term I took 310: “Introduction to Software Engineering” and 221 “Basic Algorithms and Data Structures”. 221 is a great course and our instructor was excellent. The material was presented really well and if you are into core CS topics it is a great introduction.
310 was not as good. The material presented in the lectures was artificial and generally not clear. I feel like a better use of time would be to read a software design practices book yourself than to sit through those lectures. The group project where you build a website in teams of 4 had the potential to be a really great learning experience but it fell a little flat. We were forced to use Google Web Toolkit which was absolutely not the right tool for what we were doing and beyond that is just not well documented and there are few resources available. It also works fairly differently than most web frameworks and hides important details so the skills aren’t even very transferable to more reasonable frameworks. If you can, take this course outside of summer when they usually let you use other web frameworks.
In the second summer term I took 213: “Introduction to Computer Systems” and 320: “Intermediate Algorithm Design and Analysis”. 213 was generally a very good course. About half of it focuses on how C and Java code gets compiled down to a machine language that your CPU can actually run. I really enjoyed learning about this and I felt it makes you a better programmer to have this understanding. The second part deals with different aspects of how a CPU and connected components work. Once again, this knowledge is really good to know, even if you mostly program in languages that extract away most of the machine level stuff from you.
320 was probably one of the worst course experience I had at UBC. I should say that thanks to some scaling it was actually my best mark of the summer, and that in the end I learnt a lot, but very little of what I learnt came from lectures or course materials provided by my instructor. Lecture were more confusing than helpful. Expectations for quizzes and assignments were rarely clear. Ultimately I got a lot out of it, only because I feared doing poorly so I spent a lot of time studying the concepts from various textbooks and watching lectures from similar courses at schools like Stanford and MIT online.
Applying for co-op jobs at the start of the summer took a lot of time. I applied for quite a few jobs before I heard anything back. Ultimately I ended up getting a really awesome job at a company full of smart motivated people. In general, people in the BCS program seemed to do pretty well in finding jobs although there was enormous variance. Having some sort of demoable project that you could show employers seemed to be the most important thing to getting a job. Good grades may have helped but were nowhere near enough.
Ultimately with an excellent internship starting and courses lined up that look quite interesting I am feeling good about my choice to do BCS. It’s a program that forces you to learn a lot yourself in order to do well in co-ops, but absolutely gives you the chance, within a year or two of starting, to be doing interesting work in an exciting tech company.