Surviving your First Year of CS @ UTM

Jarrod Servilla
10 min readMay 16, 2021

Brief introduction — Hi I’m Jarrod, I’m a 4th Year CS Specialist at UTM, currently on my co-op year, and I’ve TAed a bunch of courses (CSC108, CSC148, CSC301).

This article was written with the help of Naaz Sibia and Akira Takaki, who provided amazing insight on CSC148 and mathematics, respectively.

If you haven’t read my other blog posts, I suggest you do as they cover pretty much all the other aspects of your uni career. If you want to read about another student’s entire uni career and their thoughts on each class, check out Ju Hong Kim’s “Bias UTM CS Course Review”.

Lastly, shout out to the UTM White Van Discord. Feel free to join and ask questions — we’re always happy to help out and provide advice :)

Credit to /u/xalana0x on /r/UTM for this hilarious post!

What is POSt?

After applying for CS and being admitted to UTM, you’re not in the program yet. If you check Acorn, your program will be listed as “First Year Studies in Computer Sc. Math & Stats”.

To get into CS POSt (program of study), you’ll need to make the requirements. They release a set of guaranteed maximum cutoffs (i.e. if you get this you’re good) for CS Major & Specialist and then release the official cutoffs later in May.

For CS Major/Specialist, you’re evaluated based on your mark in CSC148 (Introduction to Computer Science), MAT102 (Introduction to Mathematical Proofs), and your CGPA (Cumulative Gradepoint Average).

What are the requirements?

For 2020–2021, the finalized requirements were:

  • 80% minimum grade in CSC148
  • 73% minimum grade in MAT102
  • 3.0 CGPA

The maximum cutoffs announced at the start of the year were an 80 in both CSC148 and MAT102, & 3.3 CGPA.

Typically the final cutoffs are lesser than the maximum, however to have peace of mind you should definitely aim to have ≥ the maximum cutoffs.

How hard is it?

It’s difficult but definitely doable. For reference, 2019–2020 had identical requirements and ~23% of applicants got in (keep in mind that this is including applicants not only in 1st year).

Coming into UTM, you should know that POSt isn’t a guarantee and plan accordingly. See my comprehensive guide to UTM for fallback plans.

Okay, cool — now that POSt is out of the way let’s talk about the courses you’ll need to take and succeeding in them!


CS Specialist, from the Academic Calendar

A semester course at UofT counts as 0.5 credits, and a year long course (like MAT137) counts as 1.0 credits.

Overall to apply for CS POSt, you’ll need to ensure that you have:

  • a minimum of 4.0 credits
  • CSC108 (Intro to Computer Programming)
  • CSC148
  • MAT102
  • Calculus: MAT135+MAT136 or MAT137 or MAT157 or MAT132 + MAT134
  • EDIT: You also need ISP100

Note: You can only take MAT132/MAT134 if you’re in the life science stream

Putting aside the mandatory courses, we have 1.5 credits left (or 2.5 if you’re doing 5.0 credits in a year). It’s a good idea to get your distribution requirements out of the way in first year (1.0 in humanity (HUM) courses and 1.0 social science (SSc) courses).


Automator, defy the laws of nature
Electronic monolith, throw a jam upon the disc — Deltron 3030, Mastermind

CSC108 is your first CS course where you’ll be using Python. It assumes no prior programming experience, and in it you learn about the basics of coding: functions, strings, conditionals, loops, lists, file parsing, an intro to object oriented programming, and more. For those without coding experience, it can be a lot since it’s following university pace.

While the assessments may change for each offering, normally you’ll have three assignments, weekly labs, weekly PCRS, one or two term tests, and then the final exam.

Code assessments are marked on correctness and style. For correctness, they run your code against a testing suite. For style, your code will be run against a style checker that measures things like appropriate whitespacing, variable names, etc.

Assignments: Each assignment has a concept (e.g. Twitter, Bike Station Rentals, etc) tailored to course content, and you’ll be required to write functions that achieve certain goals. The functions get progressively more difficult, with the first few being very simple to larger functions that may require 40+ lines of code.

Labs: For the fall semester, we provided an overview(30 mins or so) on the lab and relevant content, and then the rest of the time was for you to attempt the lab and ask us questions. Use your TAs as a resource! If you’re stuck on anything or have any questions, definitely reach out and get assistance.

PCRS: PCRS is an online system where you watch lessons and practice the content: by answering true/false or multiple choice questions or by submitting code and having it run against test cases. Content is done in three stages throughout the week: Prepare, Practice, Perform-so just make sure you stay on top of the work and you’ll be great.

Doing Well: Practice, practice, practice! If you ever think “huh I wonder what happens in Python when I…” just try it out and learn right then and there! The term tests can be a bit tricky as there are some questions that focus on certain interactions exclusive to Python, so knowing how Python works for certain cases can go a long way.

Last year’s syllabus here

Course website here


Written by: Naaz Sibia

CSC148 assumes you have knowledge from CSC108, but the concepts taught here are going to be quite different from CSC108. While CSC108 is a “programming” focused course, CSC148 is an introduction to computer science, so there is more focus on the concepts you learn in class. What this can mean: don’t worry too much if your CSC108 mark isn’t great! While CSC148 requires CSC108 knowledge, the concepts are quite different. So even if your CSC108 mark isn’t great, there is still a chance that you can get a good mark in CSC148.

CSC148 starts off by building on the OOP concepts that CSC108 usually ends with. After learning OOP principles, and designing classes, the course switches to talking about abstract data types (stacks, queues, linked lists).

After about 6 weeks — you’ll start learning about recursion, which is what the course is mainly infamous for. A lot of students dread this, but you don’t need to! The instructors usually teach recursion slowly, and provide lots of examples. They assume you don’t know recursion, so you can trust the teaching process, and make sure you practice a lot.

The course has 2–3 assignments and weekly readings + prep exercises that you complete before class. The first assignment is about OOP principles, and the second assignment is usually about recursion and trees.

Like CSC108 — code assignments are marked based on correctness and style. For the OOP assignment, there is also manual marking to check if you used OOP principles correctly.

Lecture Prep: CSC148 at UTM usually doesn’t use PCRS. However, the course has readings and prep exercises that students usually need to complete before lecture. The prep exercises include a code writing exercise that is automarked on markus, and a Quercus multiple choice quiz which has infinite attempts. The class typically follows an ALC format, so you will be reviewing the prep briefly and working on new questions in lecture.

This summer offering’s syllabus here

Course website here


Written by: Akira Takaki, edited by me

You want to know how to rhyme, you better learn how to add
It’s mathematics — Mos Def, Mathematics

Coming into university, a lot of students ask: “why do I need to take so many math courses when I’m just going to be centering buttons on the job?”, which is fair.

The answer: You’re studying computer science, not frontend development or game development. Mathematics is the basis of computer science, and computer science as a major is meant to provide a strong foundation enabling you to excel in whatever field you so wish (embedded software, full stack development, machine learning, etc). In doing mathematics, you learn a lot of applicable skills like logic, comprehension, and more.

mathematics, as a field can be separated into two teaching styles:

  • do: (MAT135, MAT136, MAT223, MAT232). Your focus here are on a very layman’s understanding of the theorems, and the main teaching objective is by assuming theorems, making you know how to do the computations. practicing the textbook problems is the key here.
  • understand: (MAT102, MAT137, MAT157, MAT240, MAT257). your focus here is about arguments, so the professor proves big theorems in class, and you need to understand how they related the visual logic with the symbolic logic. Meditating on theorems is as important as practicing problems here.

How does one survive these courses? By understanding what the learning objective is, and doing that.

  • do: for MAT135/MAT136 (and similar courses), you want to make sure you understand the weird behaviour that happens in theorems. for example, the limit of a composition of functions given by a graph!
  • The first time you might look at these problems it might look easy, but you should not passively learn. Practice, practice and practice on your own. It doesn’t need to be a lot of time, but if you can dedicate a focused amount of time each day (start with 15–30 minutes!) to doing practice and/or assignments, you’ll go far.
  • understand: for MAT137/MAT240 (and similar courses), you want to make sure you understand the dance (yes, dance!) between the symbols and the visuals. The dance between these two is a fundamental theme in mathematics, where you’re able to translate words into symbols and vice-versa.
  • in this vein, you should really clarify any confusions you have with TAs and profs, since they have their own understanding tricks for each concept! personally, i end up spending shower time and toilet time really thinking about these concepts (haha nerd) and get eureka! moments


For students coming from Ontario highschools, MAT102 is pretty difficult to wrap your head around. This is your first exposure to non-computational maths, where you use theorems and logic to prove things!

You need to understand that this is the CSC108 of math. It’s very different from actual math courses just like programming is not computer science. Here are MAT102-specific tips.

  • Be aware of the nit-picky stuff. just like in CSC108, there’s a lot of nit-picky details that us 102 TAs want you to state. Proofs are just arguments in math, and you should justify (with English!) how what you did is true, because it follows from other true things.
  • Stay on the ball. There’s usually a 10% quiz within one or two weeks of the class starting, and it’s going to hit you — hard. If it doesn’t, maybe math is your thing? Either way, you want to make sure you know your deadlines and don’t fall behind, because this course has a ton of deadlines.
  • Practice, a lot. You need to start practicing every day, early on, by doing practice problems. MAT102 has a decent amount of computational practice that you need to get down pat.
  • Start early! If something comes out, you need to look at it as early as possible. You can’t cram this course, and you need to really start asking questions early. Problem sets are a marathon, never a sprint.
  • If you end up liking this course, consider taking MAT240 (linear algebra for proofs), which is offered only in the winter. It’s a really fun continuation of some of the concepts you’ve now learnt, and is less pedantic.

General Advice

  • Do not procrastinate. Try to get into the habit of starting early!

It can get easy to fall behind on work where you have three assignments due, two tests to study for, and weekly assessments. CS Assignments are typically given a timeframe of two weeks. Use that time! Even if it’s just reading the handout and getting the concept in your head, that can help a lot.

  • Find friends that align with your goals and collaborate together

One thing to note: people may want different things out of university, and that’s totally okay. Some people may focus on grad school, others just want to graduate and find employment. Try to find people with similar values/goals and motivate each other!

Obviously don’t cheat with them, but having a support system to bounce ideas off, keep you accountable & on track, and generally bond with will go a long ways to navigating your uni career.

  • Use the resources available to you

Lots of resources are available to you — prof office hours, tutorials, Piazza, etc. Reach out and get assistance whenever needed: we’re here to help! Another resource that’s overlooked: upper years/alumni! Technically you’re using one right now lol, but reach out to upper years and learn from them. Getting advice on what courses to take, their co-op experiences, and learning about how certain courses work can be comforting and provide a lot of reassurance.

  • Study from past materials

Every UTM student has access to the old exam repository, so definitely use that to get an idea of what you may be tested on, the general format for certain courses, etc.

In addition, you may be provided with old problem sets, tests, or quizzes so definitely study those!


The last thing that I wanted to say is: you belong here. UofT is known for being academically rigorous, and during your time here you’ll be challenged and pushed to your limit. It happens to a lot of people — even some of my most accomplished peers experience imposter syndrome. But at the end of the day, grades are just a number. Your academics make up a small portion of what makes you you.

So keep at it, we all believe in you and welcome to UTM :)