SFU Software Systems Degree Overview

January 7, 2024

I thought it would be worthwhile to write about my overall experience after completing my bachelor’s at SFU. The exact degree I earned was a Bachelor of Science, Computer Science majoring in Software Systems. There are minimal differences between the Software Systems program and the regular Computing Science program. You avoid less relevant courses such as MACM 316 and instead take software development courses. At the end of the day, the programs seem like 85% the same to me. Apparently, though, Software Systems students end up making $8000 more per year than students in the Computing Science program.

CMPT 105w - Social Issues and Communication Strategies in Computing Science

This course is only really useful for learning how to write an academic paper, as well as the general principles of effective writing. You end up writing a multi-page paper on a topic of your choice, and that’s about it. It does teach you a lot about writing academically, but otherwise, I don’t think it applies very much outside of university.

CMPT 106 - Applied Science, Technology and Society

An extremely odd course that teaches you the history of engineering as a whole but also pairs it up with a group project. I found the historical component actually quite interesting and useful as it basically gave an overview of the history of engineering. I found the group project odd since students in their first semester could have zero programming experience.

CMPT 130 - Introduction to Computer Programming I

The first programming course you take, which is taught using C++. If you don’t enjoy this course, then you should probably find a different major. I thought C++ was a great introductory language as it forces you to understand some core principles of programming languages early. A lot of this course involved writing fairly old C++ so you can understand the underlying elements of C++.

MACM 101 - Discrete Mathematics I

Discrete mathematics gives you an introduction to many weird areas that you probably didn’t know existed in computer science. A lot of these topics provide the foundation to understand future computer science topics.

BUS 238 - Introduction to Entrepreneurship and Innovation

I took this business course as an elective since it was taught at the campus nearby where I lived. I feel like a lot of this content was pretty common sense and could be self-taught with minimal googling. If future business courses are anything like this, I don’t think you should be going to school for a business degree.

CMPT 135 - Introduction to Computer Programming II

The second introduction to programming course taught in C++. Just another solid course to teach you more principles of C++ and general computer programming.

MSE 110 - Mechatronics Design I

One of the most useless courses I took in my entire degree. You design Lego Mindstorm robots and program them using ROBOTC. The issue is that this is an introduction course for students in Mechatronics, which means you can’t assume any prior programming knowledge. So the entire course is learning some messed-up version of C at a snail’s pace. I’m pretty sure they are planning on removing this course from the program.

CMPT 225 - Data Structures and Programming

An extremely important course learning about the various data structures you will encounter for the rest of your life. In my case, all the assignments were done in C++.

MATH 150 - Calculus I

Your classic calculus I course that is probably the same at most universities. You probably won’t need to use derivatives in 90% of the jobs in the real world. I can see this course being useful for future mathematics courses and specific areas in computer science.

CMPT 354 - Database Systems I

An introduction to basic SQL and how databases function. You will probably encounter both in your career, so this is important to have taken at some point.

IAT 210 - Introduction to Game Studies: Theory and Design

A blow-off elective that teaches you some basic elements of game theory. A lot of this is common sense so this course ends up being useless. If you want to learn how to make games, just make some yourself.

MACM 201 - Discrete Mathematics II

The second in discrete mathematics which ended up being the most convoluted mathematics course I have ever taken. Some of the topics are useful, but the majority are abstract mathematical concepts that only apply to niche computer science areas. This course ended up being the worst grade I received during my entire degree.

CMPT 213 - Object-Oriented Design in Java

A solid object-oriented programming (OOP) course taught in Java. Teaches you the common elements of OOP that you will see throughout almost all programming languages. Just another useful course that teaches you more general programming.

CMPT 276 - Introduction to Software Engineering

A group project course to teach you the aspects of working within a group. Introduces a lot of theory about working within a group but also practical knowledge such as working with git. The project we were assigned was writing an emulator which was actually very interesting.

COGS 100 - Exploring the Mind

Cognitive science elective I took since I was interested in this area. A lot of interesting topics that would apply more to a cognitive science major.

EVSC 100 - Introduction to Environmental Science

Another blow-off elective I took in the area of environmental sciences. You can basically attribute all of climate change to fossil fuels. It isn’t really a topic I’m interested in.

Software Engineer Intern at Kabam

CMPT 295 - Introduction to Computer Systems

Gives you an underlying understanding of how some of the core components work within a computer system. Introduces the C programming language alongside assembly. A lot of people probably won’t touch assembly within their career, but I still feel it’s important to have a grasp of how computer systems function.

CMPT 373 - Software Development Methods

One of the most insightful programming courses I took during my entire degree. It taught me to write modern C++ and just generally how to write clean code. Everything taught by Professor Sumner was exactly the type of code I saw when I ended up writing C++ at NVIDIA.

MATH 232 - Applied Linear Algebra

Typical linear algebra course that you’ll probably take at most universities. The only application I can really see is if you are interested in going into computer graphics or game development.

Mobile Developer Intern at HomeX

CMPT 376w - Professional Responsibility and Technical Writing

Just another writing course to learn how to communicate effectively. I feel like a lot of it was common sense but I learned a few things here or there.

Mobile Developer Intern at HomeX

CA 104 - Music Fundamentals

I started learning how to play piano over the COVID era since I really do love music. A solid course if you are interested in getting an introduction to music theory.

CMPT 320 - Social Implications - Computerized Society

My favourite writing/ethics course I did during my entire degree. I believe largely due to the fact that Professor Pearce was teaching it. He allowed students to engage in meaningful conversations regarding various ethical dilemmas.

Perflab Intern at NVIDIA

CMPT 218 - Special Topics in Computing Science

A special topics course that later evolved into CMPT 272. SFU was missing web development courses so it is nice that SFU finally offered one to students. It ended up being a front-end web development course taught using Angular. I don’t know if Angular was the right choice, but it’s hard to say since web frameworks are constantly being cycled out. A really solid course to have taken since almost everything interacts with the web.

Software Intern at NVIDIA

Software Intern at NVIDIA

CA 135 - Introduction to Cinema

Film course where you watch a few films and write your thoughts about said films. I thought it was enjoyable since I was introduced to some classics such as “Rear Window” by Alfred Hitchcock.

BUS 232 - Business Statistics

I was required to do STAT 205 as part of my major but this course was discontinued by the time I got around to taking it. Instead, they allowed me to take BUS 232 to fulfill the requirement. The course covered some basic introductory statistical concepts, but that is about it. I don’t imagine this course being useful in the majority of jobs out there.

CMPT 300 - Operating Systems I

Operating systems course building upon the ideas from CMPT 295. This course provides a lot of useful information about how operating systems function. I don’t have much to add other than I believe it is useful to have as part of a computer science curriculum.

CMPT 363 - User Interface Design

Covers a lot of theoretical concepts regarding user interface design. It’s a nice course to have as a lot of programmers out there have no idea how to design interfaces at all.

IAT 359 - Mobile Computing

An elective I took in order to learn how to write mobile apps. Unfortunately, what I realized is Android native is my least favourite ways to develop mobile apps. The idea of dragging and dropping UI components feels awful to me. I feel like there is a reason why every single modern way to design UI doesn’t do this. I hated Android native so much that I did my project using Flutter instead.

CMPT 371 - Data Communications and Networking

Networking course that dives into extreme detail about how networking functions. A lot of this information felt useless as it talks about internal details about how the networking stack works. For example, how Wi-Fi handles conflicts between other nodes. Thankfully, there is enough information about TCP and UDP alongside a game networking project to make it mostly useful.

CMPT 372 - Server-side Development

The second course after CMPT 272 that mostly covers back-end development. An extremely useful class as you end up building a full-stack web application during the duration of this course.

CMPT 383 - Comparative Programming Languages

One of my favorite courses in my degree as it covered various unique programming languages I probably wouldn’t have touched in my life. During my section, we covered the following…

  • Go
  • LISP
  • Haskell
  • Ruby
  • Prolog

All of these languages had unique ideas, and it was interesting to see how future programming languages took ideas from them but also improved upon them.

CMPT 454 - Database Systems II

The second in the database series which I thought was a complete waste of time. It basically ended up being like the compilers of database systems. It went into extreme depth about how modern DBMS function. Too much detail instead of continuing with learning to interact with databases instead.

CA 149 - Sound

Another music elective I took since I was interested in music/audio. Fairly easy course with some interesting information regarding how sound works.

CMPT 379 - Principles of Compiler Design

The most difficult programming course I took during my entire degree by far. I actually felt challenged for once since all of my internships and personal projects made me a fairly competent programmer. A barebones compiler is given to you at the start, and you continually add more complex features to it throughout the semester. This course got me really interested in compiler development and it ended up being one of my favorites during my degree.

CMPT 473 - Software Testing, Reliability and Security

CMPT 473 introduces tons of different ways to verify program correctness, presenting numerous tools that I wouldn’t have known existed without being introduced to them. Additionally, it provides general guidelines on how to write meaningful tests in the first place. Another great course to consider taking.

EDUC 100w - Selected Questions and Issues in Education

Another blow-off elective that first-year education students take. It felt like a high school writing course to me; nothing else to say.

CMPT 307 - Data Structures and Algorithms

One of the most theory-heavy courses that teaches quite a bit about algorithms and algorithm analysis. Pay attention in this one as it covers extremely important foundational information when writing and analyzing complicated algorithms.

CMPT 475 - Requirements Engineering

Definitely the most useless CMPT course I took during my entire major. It was also one of the first times I decided not to show up to any of the lectures. I don’t think this course properly covered how any modern software requirements are created.

EDUC 437 - Ethical Issues in Education

I was completely burnt out of school and needed four elective credits to graduate. Extremely low-effort elective if you aren’t interested in learning anything.

As I’ve talked about in this blog post, I thought the knowledge I gained in university to be invaluable. There were definitely a few courses during my degree that I thought were completely pointless and could be replaced. Regardless, I would highly recommend this program to any prospective students.