The University of Guelph’s Bachelor of Computing, a Review From a Recent Graduate

Damian Sandhu-Franceschi
30 min readJun 9, 2020

--

As a recent graduate of the University of Guelph, I felt like publishing my notes and experiences to hopefully assist future/current students (I'm also stuck in quarantine and am extremely bored, so why not write an article!).

This article will start off with a comparison between the Computer Science and Software Engineering programs at the school and a small blurb about COOP. I'll then give a general review of the program followed by a more detailed review of each semester, along with some tips. Finally ill write a little blurb about every single course the school currently offers for Computer Science/Software Engineering students, talk about the elephant in the room (The University of Waterloo), and ill try and come up with some sort of conclusion for this article.

Below is a link to every version of the Computing program at the school, these pages state the various program requirements. Change the year range within the URL if you are reading this article in any year other than the 2020–2021 school year:

Computer Science COOP:

Computer Science:

Software Engineering COOP:

Software Engineering:

General Program:

Why You Shouldn’t Choose Software Engineering

Before I dive into this, I will say that I was in Computer Science COOP at the University, just for transparency's sake. But I did know a lot of people in Software Engineering.

As you can probably tell by the title of this section, I'm not a fan of the Software Engineering degree. Even if you do a General degree id encourage you to take courses directly from the Computer Science calendar rather than the Software Engineering one. Why you might ask? the required Software Engineering courses are a joke and the degree does not require/allow you (due to semester/time slot conflicts) to take the theory courses that the Computer Science students take.

Computer Science students take theory courses, Software Engineering kids take group project courses that teach you the same concepts you've either learned during internships or have learned in other courses you have already taken. Now there are 3 Software Engineering courses that I would recommend everyone take: Software Design I (CIS*1250), Software Reliability and Testing (CIS*4150) and Human Computer Interaction (CIS*4300). The first course gives you a good, first semester, introduction to the software industry and practices. The other two courses are good at filling in gaps you have within your testing and UI design skills. All other required Software Engineering courses, in my opinion, are useless and should be avoided.

I'll give the school some credit in that they now require Software Engineering students to take algorithms (a recent change) which is a step in the right direction. But really, these students still miss out on courses that teach them basic theory that they will need in the industry. Graph theory, NP-completeness, Finite Automata, Counting Theory, and more. These are all key concepts that apply to everyday programming and working in the industry heavily. Missing out on learning these concepts is an absolute tragedy and screws you over when the time comes to interview for jobs and whenever you code.

The Software Engineering degree is much easier than the Computer Science degree, so if all your looking for is a quick and easy degree that will turn you into a programmer and you have the motivation to actually teach yourself the key theory and concepts you need to know that are taught in Computer Science then take it. If you want a complete degree that fully prepares you for working in the software industry and teaches you everything you need to know to build a solid base then take Computer Science. In my opinion, don't waste your time taking bullshit group project courses that reteach the same concepts every semester, take the program that challenges you and teaches you things you actually need to know, without repetition. University isn't meant to be easy if it is you might be doing something wrong.

Why You Should Choose COOP

You might think to yourself, “5 years vs 4 years, definitely doing 4 years and skipping COOP”, I thought like this originally as well, till my friend told me I was being an idiot.

I cannot recommend COOP enough. Yes, you are doing an extra year of school but you're not doing any extra school semesters, you just get 5 terms in which you can take time to do internships. You do get 3 summers in which you can look for internships in the regular degree as well but 5 > 3, your probably not going to find a placement after first year since really you don't know all that much, and companies get government tax credits for hiring COOP students so fewer companies are going to want to hire you.

COOP gives you the opportunity to look for internships throughout your degree at various points in the year (summer, winter, and fall) and gives you a nice break in between school semesters (can make some money to pay off your student debts and so you can buy top-shelf ramen at the grocery store). COOP also provides you with a simple job application website and interview space organized by the University as well as advisors who are there to help you find some sort of computing job every work term. The University of Guelph’s COOP program does need a lot of work, it's much smaller than other schools such as Waterloo, and the number of quality jobs they have is quite low. But its constantly improving, Guelph students are highly renowned in the industry and more companies are hiring out of the school. You can also apply to jobs external of the University’s system at any time, companies don't have to hire you through the University to get that tax credit I mentioned.

The only thing I absolutely hate about the University’s COOP program is that they don't have advisors who have actually worked in the software industry nor do they have a round-based hiring system like Waterloo. The lack of advisors leads to you not getting the best advice for applying to jobs (Software resumes are unique, much simpler than any other industry, something that the school's advisors don't really understand. Also, cover letters aren't generally a thing in the industry yet they try and shove the statement “you should write cover letters” down your throat constantly). The lack of a round-based hiring system leads to students accepting jobs they applied to as “backups” before they hear if they got the jobs they actually wanted. At Waterloo, job offers come in rounds, meaning you interview and then get all your offers at once so you can make a more informed decision. They repeat this rounds process 2 times before the free for all starts. Guelph just uses the free for all format. What happens is that companies, usually the “lower tier” ones', interview early and get their offers out within the first few days of the job search. The “higher tier” companies usually take much longer to interview and get offers out. You can only turn down a single job offer per job search term so once you get 2 job offers you're left with a few days to make a decision. Usually, people end up just taking one of the 2 or more offers they received since they don't want to risk not getting a job at all. Doing this leads to them missing out on ever interviewing with or hearing back from other companies they applied to. I luckily never got screwed over by this job search system and completed 5 extremely solid work terms with 3 companies I wanted to work for, but I do know a lot of people who got screwed. I do have faith in the University to bring in more advisors from the industry and to fix this free for all problem. When will they actually do it? who knows.

Overall, yes, yes you should take COOP. If you don't get into it through your application to the school from high school, work your ass off in first year to get into it. The COOP program at Guelph does have its downfalls, but like I said, it's constantly improving and the advantages easily outweigh the disadvantages, some internship experience is always better than none.

General Review + Tips

Overall I had a decent experience with the University of Guelph, I learned pretty much the exact same things as my friends at competing University’s (Mainly the University of Waterloo), gained a solid knowledge of software development and theory, and was able to launch my career through various internship opportunities. The school, like most, has some problems with questionable professors (some of which, in my opinion, should not be teaching anymore) however we are in an industry where pretty much any concept can be learned online. The school’s gradually growing bigger and is hiring on more staff so I have faith in the program to develop into a top computer science program in the future, if the school plays its cards right.

One more “complaint” I thought of was that the school uses the C programming language as its main language for the program. I don't mind C, I think it's a good language to start in but I feel as though an OOP language like C++ might be a better choice. Not a big deal though. Schools don't exist to teach you programming languages, they exist to teach you how to program and how to learn. The school does have more classes that use languages such as Java, Python, and Javascript in the upper years, but most of the lower year courses are in C.

The University also has quite a few graduate programs including a new software security program. I have only heard good things about the graduate programs but do not know much about them my self.

Below are some general tips:

  • Start assignments early. Yes I know you have probably heard this 9001 times, you can get away with slacking off in first year and parts of second year, after that, not so much.
  • Spend time outside of the classroom expanding your knowledge. School gives teaches you the basics, it's on you to look deeper into these topics so you can truly master them. Work on side projects, contribute to open source, attend hackathons, read books, practice problems on Leetcode and HackerRank. School can only get you so far, if you want to land your dream job you need to do things outside of school and you can never stop doing things on the side, even when you are working.
  • Build connections. Talk with your peers, your professors, and your TA’s, you will almost always learn something new from them and maybe even give yourself a gateway into companies they work for in the future.
  • Attend job fairs. Pretty obvious as to why you should do this. It can get you a job and at the bare minimum an interview and a connection.
  • Constantly challenge yourself. Never settle, if you're not challenging yourself your giving up. You need to always be learning, you will struggle at first but the more and more you learn the easier it gets, and the more you know the easier finding a job will be.
  • Review Professors and TA’s. If you have had a crap experience with a professor or a TA, make sure to fill out the assessments that get sent out at the end of each term, otherwise, things will never change. If things are going really bad during the semester, reach out to the computer science school admin and give them your feedback. They exist to help provide you with the best educational experience possible, and in most cases, they will intervene to attempt to solve your issues.
  • Pick an area of application you enjoy. The school forces you to complete an area of application, essentially a minor minus 1.0 credits. Utilize your first year to try out a variety of courses, business, psychology, whatever piques your interest and choose your area of application-based on what you enjoy the most. Don't pick one because it's easy, your paying for these classes, do something you genuinely enjoy.
  • The internet is your best friend, learn how to use it wisely. In software development, the internet is like Heaven, if you ever need a question answered you can usually find the answer online, or at least some more information that will help you answer the question on your own. Pretty much every programming language and theory concept has a plethora of online search results that can help you greatly. Learn how to properly research and your life will become a lot easier.
  • Take computing electives. If a computing course interests you, or is related to a field you want to get into, take it. Don't worry about how hard it is, taking it will only benefit you.
  • Negotiate internship salaries and lengths. Never settle, a company won't revoke an offer because you are trying to negotiate it (unless you are being rude about). And try to negotiate for 4-month terms only. Even if it is your dream company you might hate the job after the first 4 months, if you love it you can always request an extension.

Semester Review + Tips

For this section, I'm just going to go over every semester, my experience and thoughts, and any tips I have. Keep in mind I was in Computer Science with COOP, so this section won't really fully apply to you if you're in Software Engineering, and the semester layout I describe might be slightly different than yours if you are in a non-COOP program. Also just a note, I was in school for the 2015–2016 calendar, but I have made this review to adhere to the 2020–2021 calendar.

Semester 1

When I was in this semester the only required courses were Programming (CIS*1300) and Calculus I (MATH*1200). Programming (CUS*1300)will be a breeze if you have previous programming experience, but still, pay attention to the course content as it might fill some knowledge gaps in for you. Calculus I (MATH*1200) is also not too bad, depending on how well your high school math teacher prepared you, but it definitely takes a lot of effort to come out of it with a good grade. Make sure to get help if you need it.

Overall I found this semester to be fairly easy, its your first semester so that is expected. They recently pushed up Discrete Structures in Computing I (CIS*1910) into this semester (previously it was in term 2). This course is fairly challenging, it introduces you to the basics of Computer Science theory and a lot of people I know, including myself, struggled in it. Make sure to pay attention in this class as you'll need the knowledge from it going forward. Youtube is your best friend for this class, if you don't understand a concept in it, look up a video, this applies to all the theory courses throughout the degree. Study hard for the midterm and final.

The Programming (CIS*1300) course can sometimes be difficult, even for experienced programmers, due to you having to adjust to following a spec and being graded under a magnifying glass. Make sure to read all information the professor provides you for assignments and labs meticulously, and ask questions if you're unsure of something.

I recommend taking Software Design I (CIS*1250) as an elective this semester if you are in Computer Science. It gives you some good base knowledge about software design and development.

Use this semester’s electives to figure out what you want to do as an Area of Application.

Semester 2

When I was in this semester the only required course was Intermediate Programming (CIS*2500). Its a step up from the intro course of term 1 and begins to introduce memory and data structures in C. It can be a bit of a pain at first, and you are definitely going to learn a lot more than in the intro course, but as long as you stay on top of assignments and ask questions when you are stuck you should be fine.

The school now requires students to take Linear Algebra I (MATH*1160) and Discrete Structures in Computing II (CIS*2910) during this term. I have never taken Linear Algebra I (MATH*1160), but from what I have heard, it's not too bad, if you're bad with math though you may struggle. Its contents should help you throughout your degree and career. Discrete Structures in Computing II (CIS*2910) is an absolute pain, I found the course really difficult, and it begins to introduce some more key, yet more complex, theory concepts. Just like the first course, pay attention, do your work, research online, study hard, and ask questions when you're stuck.

Use this semester to nail down the area you want to do your area of application in and don't slack off. With the added required courses I could see this semester being extremely difficult for first-year students.

Use your first and only summer off to learn things on the side. Contribute to open-source, read a book, create a side project, attend a hackathon, etc... Pad your resume and increase your knowledge and skills

Semester 3

This semester is where things start to kick off. You have a heavy course load and are also probably starting to worry about COOP and your area of application courses.

Structure and Application of Microcomputers (CIS*2030) is a heavy course, plenty of content, plenty of assignments, and plenty of labs. A lot of people I know struggled in this class, I found it easy because I was very interested in the content but I think I was a minority. Keep your head down, start things early, and ask a lot of questions. The professor may seem tough and scary but he's actually a nice guy. The course deals with assembly language and low-level concepts so it might be a bit shocking at first.

Object-Oriented Programming (CIS*2430), this course isn't too bad since its just teaching you the basics of OOP and Java. Its fairly simple at the beginning but the new concepts and new way to think of programming can confuse you. Like any course, utilize online resources and the knowledge of your peers. Keep up with the assignments and labs and try not to slack off, it will bite you in the ass.

Data Structures (CIS*2520). This course is a pain, it introduces you to key data structures in computing and teaches you how to create them and all about why they exist. It is a pain in the ass because it is in C, so be ready to deal with a bunch of memory errors, you may have a few late nights in this course. Do not slack in this class, it will catch up to you and swallow you whole. The content of this course is extremely important for a programmer to know.

Introduction to Co-operative Education (COOP*1100), this course is a joke, I'm not sure why it exists really. It's not worth any credits and just forces you to write a resume that fits the course professors' standards (generally the resume you come out with from this course is crap). Don't focus on this course, just pass it and move on.

Use the winter break to create a solid resume. Keep an eye out for internships outside of the University’s system. Big company internships usually open up applications in October/November for the summer.

Semester 4

This is the toughest semester of the degree, its the weeding semester. You're faced with a COOP job search + interviews, 2 hard courses, and The Angel of Death. DO NOT SLACK OFF WHATEVER YOU DO.

Operating Systems I (CIS*3110), I hated this class, it teaches you some good concepts such as threading but I just hated it. The content was dry, it was all taught in a super old fashion way and the course was tough. Just pay attention in class and talk with your peers a lot in this course. You are in for a ride, do not fall behind.

The Analysis and Design of Computer Algorithms (CIS*3490), this class is really tough. The content isn't exciting, the professors generally aren't great and the assignments and tests are not easy. Don't put this course on the back burner, learn as much as you can from it and research its topics online to learn even more. Algorithms are a core computing topic and will help you out in interviews.

The Angel of Death, Software Systems Development and Integration (CIS*2750). This course has a notorious reputation. You will definitely hear about it before this semester and you will fear it. When I took it I believe the drop fail rate was around 85%. It absolutely wrecked me. I was extremely swamped this term and this class is an absolute gong show. They have made the course a lot easier now, the drop fail rate has decreased significantly, and they brought in new professors. However, the course is still one of the hardest classes you will take. My only advice to you is to start the assignments the second they are released, ask questions as soon as you think of them, and don't fall behind. If you do this, you will be spared. Also don't not study for the midterm and final, you can study for a day for these and use them to boost your grade. Write good expandable code and always aim to get 100 on every assignment, they all build off each other and the TA’s/Professor regression test your previous assignments as part of your grade for the newer ones(This applies for most upper-year courses).

COOP job search, your first job search is an exciting time. You are about to take an 8-month break from school and learn 10x the amount of things you learned in the last 2 years of school in the upcoming 8 months. My advice to you is to apply to as many jobs as possible, even ones you may not like. This first job search is really just about getting any job and getting some initial experience for your resume. I applied to over 80 jobs in this term and took the first one I got. Try to negotiate for a 4-month placement so that you can move on for the second term if you really don't like your job (you can always ask for an extension). Once you start working make sure to network, learn from your coworkers and put your heart into your work, you need to make a lasting impression, doing so will only help you in future job searches.

Try to take easy electives this term, for your own sake.

Semester 5

This semester will feel weird at first since your coming off of 8 months of working and have to get right back into school + job search. Just take some time to readjust, I highly recommend taking an online course during work terms, even a bird course, this will keep you in a somewhat academic mindset.

You only have 1 required course this term and it’s System Analysis and Design in Applications (CIS*3750). This course is a joke, its a group project course and is fairly easy. The professor might throw a lot of work at you for fun but this course will teach you a lot of things you already know from previous classes/COOP. It may fill some gaps in for you but overall it is super simple.

Take a computer science elective that interests you this term and focus on your area of application.

For your COOP job search, since you are entering your 3rd work term you can be a bit more selective of companies that you apply to. Pick ones that interest you, look for positions outside of the COOP system, and try to get an internship that you know you will really enjoy and learn a lot from. Go back to your previous company if you need to, but its generally better to try something new.

Semester 6

This semester can be a bit rough for one reason and one reason only, Theory of Computation (CIS*3150). I don’t know a single person who did not struggle in this course, it teaches advanced computer science theory including np-completeness, Turing machines, and finite automata. Make sure you remember your previous theory course content and be sure to keep up with this class. Study continuously throughout the term otherwise the midterm and final will kill you and the assignments will deface your grave.

The other two courses required this term are fairly easy. Software Engineering (CIS*3760) kind of reiterates over what System Analysis and Design in Applications taught you with some new concepts and once again, a group project. This course is more oriented towards the group project and heavily focuses on the software process. You probably won't learn anything new and if you do it will either be useless or will fill a gap in your knowledge. The other required course is Statistics I (STAT*2040), fairly simple and straight forward, you can take it earlier than this term if you want. The course will teach you basic statistics, a bit about R and that's it. Some professors that teach it allow you to use cheat sheets on the tests which is nice.

Focus hard on Theory of Computation (CIS*3150), make sure you pass it and take electives to help you with your area of application. Take a computing elective if you are able to.

For this COOP search be extremely selective, try and get a 4-month COOP at a company you really want to work for, and be more aggressive with negotiating salary, you are more experienced and more wanted at this point. If you like the job you get, extend it for another 4 months, if not, search for a new one for the second 4 months.

Semester 7

This semester will be hard at first, you are once again coming off of 8 months of internships except this time you can see the light at the end of the tunnel, graduation. Don't slack off, keep grinding and keep focused, otherwise you might screw up. Take electives that challenge you and that prepare you for the real world and spend time this semester refining your resume and applying for full-time jobs or master's programs. Do an undergraduate research project if you think you may be interested in a master's. If you find out you hate doing research, a master’s might not be right for you.

Chances are you will have some full-time job interviews during this term. These are a new beast, make sure you practice your basics. Leetcode is your friend.

I highly recommend taking Software Reliability and Testing (CIS*4150)and Human Computer Interaction (CIS*4300)during this semester. They are Software Engineering required courses that teach valuable skills and can fill in some blanks in your skillset.

Semester 8

The end of the journey, you have finally made it, your final term. This term was tough for me personally, I had secured my full-time job and was fighting off “senioritis” aka the urge to stop caring about school. Do not succumb to senioritis, I've seen many succumb to it and they were more or less saved by the Bell that was COVID-19 forcing classes online and canceling finals. This semester will mostly be electives for you, potentially an undergraduate research project, and will probably be fairly stressful as you try to figure out what you want to do with your life.

Focus on interviewing for full-time jobs, and applying for grad school. But keep focussed on the contents of your final semester as well, you might just learn something new that will help you in the future.

The one required course this semester is Compilers (CIS*4650). A lot of people are scared of this course, I know I for sure was. The course content isn't really that relevant, it uses theory you learned throughout your degree and teaches you a bunch of stuff you will probably never actually use. The term project is to build a compiler, its not too bad of a task but I definitely recommend taking the pairs option and doing it with a good friend. You use some weird tools and write a bunch of code that you hope will work but as long as you start early the project will go smoothly. The project checkpoints are graded in person as well so you can probably talk your way around some program errors :). The midterm for the course was fairly challenging, youtube is your best friend. I never wrote the final because of COVID-19 but from what I have heard the midterm is harder than the final.

My Notes on Every Computer Science Course Currently Offered

You can view a list of courses offered and the requirements here:

Change the year range within the URL if you are reading this article in any year other than the 2020–2021 school year.

Introduction to Computer Applications (CIS*1000) & Introduction to Computing (CIS*1200)

You can’t take these courses if you are in the program so uh… ignore them.

Web Design and Development (CIS*1050)

I never took this course myself but from what I have heard its simple and just teaches you the extreme basics of web design and development. Maybe consider taking it as an easy elective but honestly you might be better off avoiding it and self-teaching.

Software Design I (CIS*1250)

I really enjoyed this class. It teaches you the basics of software design and is a good first-semester course, It puts you in the right mindset. It's a pretty easy course as well.

Introduction to Programming (CIS*1500)

Well, you cant take this course if you take Introduction to Programming, which you are required to take… so uh… ya…

Programming (CIS*1300)

If you have ever programmed before you will probably find this course quite simple. It might fill in some gaps for you or clear some things up but it probably won't teach you much. The assignments are generally easy. The professors tend to try and screw students on minor spec things or style so watch out for that. You can slack off quite a bit in this class, but don't hold me to that advice. Welcome to the world of C.

Discrete Structures in Computing I (CIS*1910)

This course is hard and it sucks. It is your first theory course, you are going to hate it, wonder why it's relevant and probably not pay it much attention. Don't do that, pay attention, learn the concepts, and start to figure out how they are useful in computing, you will need them in the future. The assignments are difficult and so is the midterm and final. Go to class, practice, do your homework, research, and keep up and you should be fine.

Structure and Application of Microcomputers (CIS*2030)

A lot of people I know hated this course and struggled with it. I found it easy but complicated, mostly because I was interested in its contents. It teaches assembly and low-level computing concepts and even some hardware talk. Don't slack off in this class, it's easy to fall behind and the amount of content, assignments, and labs can be overwhelming. Study hard for the midterm and final. The professor that usually teaches the course is super nice and is open to questions, as long as they are not dumb.

User Interface Design (CIS*2170)

Extremely easy. Almost everyone I know took this course and found it easy. It introduces you to the basics of UI design and generally has some simple UI design process related team project and various tests. Definitely a good course to take early on in your degree, it introduces you to a lot of basic UI concepts that you can build off of and will use if you ever do frontend work.

Software Design II (CIS*2250)

I never took this class, its meant for the Software Engineering majors. From what I've heard it's pretty easy, just teaches some basic concepts and generally involves a group project. Don’t take it if you are not in Software Engineering, there are far better electives you can take.

Object Oriented Programming (CIS*2430)

Not too hard of a class, introduces you to Java and basic OOP. Pay attention since these concepts will be good to know for interviews. The content isn't difficult nor are the assignments and tests. Probably don't slack off in this class though. Make sure to continue to use Java outside of this course and learn more about OOP, it will come in handy.

Intermediate Programming (CIS*2500)

Hard at first, but easy other than memory management. I despise memory management in C just because it’s a pain. This course involves a lot of that as well as basic data structures so it can be hard if you don't pay attention and start assignments early. Tests are easy though.

Data Structures (CIS*2520)

A bit of a pain, and can be difficult. It introduces you to core data structures used in everyday computing and teaches you how to implement them as well as some theory. A lot of people I know struggled in this class and it can be tough. Just keep up with the content, start the assignments early, and research if needed.

Software Systems Development and Integration (CIS*2750)

The Angel Of Death. As I said earlier, this course used to be a lot worse. When I took it the drop fail rate was insane (even the years before had high rates) and the course absolutely ruined everyone in it. From a high level its just a massive software project that starts in C and usually ends in Javascript/SQL, it also almost always involves parsing something complex without regex or libraries cause that would make it too easy ;). It's much easier now but do not take it lightly. Start the assignments early, ask questions as soon as you think of them and don't shrug off the midterm and final, they are easier but study for them to boost your grade in case you get destroyed on one of the assignments. The assignments all build on each other so don't write crap code (This applies for most upper-year courses).

Discrete Structures in Computing II (CIS*2910)

If you hated the first course, you are going to hate this one. Its tough, teaches more theory, and needs a lot of focus. Study hard, pay attention in class, and don't fall behind. Again you will need the theory taught in this course in the future. YOUTUBE.

Systems Programming (CIS*3050)

I never took this course but everyone I know who took it hated it and struggled hard. If it interests you then take it, but beware.

Parallel Programming (CIS*3090)

I really wanted to take this course but never could fit it in my schedule. Everyone I know who took it enjoyed it and learned a lot of good new skills from it. It was tough from what I have heard but definitely worth taking.

Operating Systems (CIS*3110)

Personally I hated this course but its required and teaches some concepts that are good to know. It can be hard but it's manageable. Just study hard at home and be prepared to look for more online resources than usual while taking this course.

Digital Systems I (CIS*3120)

I never took it myself, everyone who I know who took it said it was extremely difficult and had a massive workload. It is essentially a sequel to Structure and Application of Microcomputers. If you liked that course and are interested in this area, take this class.

System Modeling and Simulation (CIS*3130)

A brand new course at the University. I don't know anyone whos taken it but if you are interested in the course description give it a go.

Theory of Computation (CIS*3150)

Extremely hard. Its the culmination of all the theory you have been learning and teaches advanced yet extremely useful concepts such as finite automata, NP-Completeness, and Turing machines. Some parts of the course are useless if you aren't someone who is going into research but a good chunk of it is useful for every software developer to know.

Software for Legacy Systems (CIS*3190)

Really simple and easy course. No tests just 4 assignments. Teaches you COBOL, Ada, and Fortran. Not really useful unless you plan on getting a legacy programming job (Surprisingly a lot of companies are hiring people who know these languages, they are still used a lot. So if you don't mind coding in them, it’s a valid career path.)

Computer Networks (CIS*3210)

Pretty simple and straight forward course. Content isn't that difficult and the assignments are easy. Teaches you core concepts about computer networks which can be useful in general but extremely useful if you are looking for a job in that area.

Software Design III (CIS*3250)

Same opinion for Software Design II. Don't take it unless you have too. I believe it just teaches some of the same things as the previous two courses with some new content and once again, has a group project. Never heard anyone complain about this class

Software Design IV (CIS*3260)

Refer to above.

The Analysis and Design of Computer Algorithms (CIS*3490)

Hard, sometimes boring, but useful. Algorithms are a core computing topic and this course introduces you to them as well as Time and Space complexity. Pay attention, research if you don't understand a concept and apply what you learn. The course content will help you in your career and definitely in interviews.

Database Systems and Concepts (CIS*3530)

I never took this class, but I wish I did. It teaches you the basics of Databases, what they are, and how to use them as well as some theory. I have heard it can be difficult but just talk with your peers and keep up with the content and you will be fine. This course will teach you good job skills.

Introduction to Intelligent Systems (CIS*3700)

I never took this class. If you are interested in AI you should take it. I have heard it can be difficult though.

System Analysis and Design in Applications (CIS*3750)

Very easy, just a group project course that teaches basic concepts you already know about computing, it might fill some gaps in your knowledge though.

Software Engineering (CIS*3760)

Same as above.

Cloud Computing (CIS*4010)

No tests, just 3 projects, and a pretty open group project. It teaches you the basics of cloud computing in AWS and Azure (potentially GCloud in the future) and gives you the freedom to explore in the group project. The assignments were programming/research-heavy but overall the course was easy. Definitely recommend taking it, cloud computing is massive and is still growing.

Data Science (CIS*4020)

I don't know anyone who took this course. If you are interested in data science then take it, else avoid it.

Mobile Computing (CIS*4030)

Really easy course, all it involves is 2 group projects (one programming based and one teaching based) and 20 small android exercises. It teaches you the basics of Android development and is a good course if you are interested in mobile development.

Digital Systems II (CIS*4050)

Took Digital Systems I and didn't hate your life/the course? take this one if you are still interested. It is hard from what I have heard, which is expected.

Software Reliability and Testing (CIS*4150)

Pretty easy, I recommend taking it as it can patch some holes in your knowledge of testing and reliability. Content is good and the projects/tests are easy.

Software Design V (CIS*4250)

Refer to my other notes on previous Software Design courses.

Human Computer Interaction (CIS*4300)

I recommend taking this course as well. It teaches you more about UI design and human interaction with computers/the psychology behind it. It can fill in gaps in your UI design knowledge and is fairly easy and useful. The course has a lot of content and can be overwhelming at times but nothing in the course is actually hard.

Special Topics in Information Science (CIS*4450 & CIS*4500)

Technically there are 2 courses like this. They are offered in most terms and require instructor consent. What the actual course is about and who teaches it varies. I have seen game programming versions and advanced OOP versions. It is usually a testing ground for future classes and you should decide to take it based on your interest in the topic it teaches.

Computer Security Foundations (CIS*4510)

Difficult and new. If you are interested in security take it.

Introduction to Crytography (CIS*4520)

Same as above but replace the word security with Crytography

Compilers (CIS*4650)

It can be difficult, the project is annoying and weird and the content, to me at least, is irrelevant and complex. Study hard, focus on getting things done early. Youtube videos at 2x speed saved me in this class

Image Processing and Vision (CIS*4720)

I never took it, I have heard it is hard though. If you are interested in it then take it.

Computational Intelligence (CIS*4780)

Same as above.

Computer Graphics (CIS*4800)

I know a handful of people who took this course and found it difficult. It is an interesting course and if you want to get into game development or computer graphics then take it, otherwise avoid it.

Game Programming (CIS*4820)

Refer to above.

Computer Science Project (CIS*4900) & Computer Science Thesis (CIS*4910)

Technically two separate courses but if you take the first one 99.9% of the time you will be taking the second one. Essentially just gives you the taste of what a masters is like while in undergrad. So if you are interested in doing a masters or want to see what research is like then take these courses.

Conclusion? I Guess You Could Call This Section That

So… ya. If you have made it this far congrats! This is easily the longest article I have ever written and I hope it may assist some of its readers who attend/plan on attending the University of Guelph. Before I conclude this adventure lets talk about the elephant in the room, the University of Waterloo. Now I know that there is a laundry list of schools ranked above Guelph for computer science but Waterloo is easily the best and most popular computer science/engineering school in the country.

I was accepted to both the University of Waterloo and the University of Guelph. I mainly chose Guelph as my father used to work at the university so I got free tuition, I wanted more free time to do my own things on the side and I wanted to minor in chemistry because I hate my self (and I really loved chemistry before university). From what I have seen, the University of Guelph and the University of Waterloo more or less teach the same things. I know as much as my University of Waterloo friends, except for maybe some more complex math and theory since Waterloo tends to focus more on that. I have worked with developers from both schools and generally prefer to work with University of Guelph students (my previous employers were all impressed by the quality of University of Guelph students as well). I think this is because the University of Guelph better prepares you for the industry and the students from the University of Guelph have a bigger drive to prove themselves in the industry. University of Guelph students are generally better at the more social aspects of computing from what I have seen as well. However, Waterloo 100% beats Guelph when it comes to COOP. Waterloo has the best COOP program in the country and has thousands of job postings from massive global companies, Guelphs COOP system has max 200 jobs on it per term, and they aren't always the greatest quality jobs out there. Employers tend to prefer University of Waterloo students when hiring as well just because of how well known it is. Once Guelph gets a better COOP system in place it could easily be labeled as better than Waterloo, but for the moment it's not. If you want more free time, want to explore computer science more, and don't mind putting your heart and soul into your work to achieve your goals you will prefer Guelph. If you just want a solid education that teaches you more theory and makes it easier for you to get quality jobs choose Waterloo. There were times where I personally wish I went to Waterloo, and I think I could of more easily gotten jobs if I went there for sure, but I still enjoyed my time at Guelph and ended up with a new grad position at a top 3 software company.

Ok so now that that's over, time for a proper conclusion. I hope that this “summary” of my experience a the University of Guelph and all the information I have provided can help you throughout your degree. If you have any questions or want some tutoring feel free to reach out to me. Just remember, always put your heart and soul into your development, always expand your breadth of understanding when given the chance, and always challenge yourself. “Fear lies, learn to conquer it”

About the Author

Hello! my name is Damian Sandhu-Franceschi and I am a Software Developer who graduated from the University of Guelph in April of 2020. I have been a software developer for just over a decade now (As of June 2020) and have decided to start sharing my ideas and experiences through Medium. You can contact me and learn more about me through my website https://damiansf.dev/

--

--