Software tools and development in a Unix/Linux environment, using a machine-oriented programming language (typically C). Core topics: software tools (shell utilities and make), processes and program execution, the memory model, system calls, file processing, interprocess communication (pipes and signals), and an introduction to concurrency, including multithreading.
We will use Piazza for announcements/Q&A. Important announcements are only made on Piazza, so it is essential for you to regularly check Piazza or ensure that your email preferences is such that you receive them through email. There is also a Discord server that is only meant for informal discussion between the students and TAs; joining it is optional and official announcement will not be posted there.
Videos and required exercises to be completed before each class are hosted on PCRS. Additionally, you may find it useful to have good C and syscall references handy. Recommended (but optional) readings are as follows:
Research consistently shows us that students remember only a small fraction of what we present in lecture. It is not easy to make sense of material that you see for the first time in the first half-hour of a fast-paced lecture environment, let alone to stay focused for 2 hours. It is also important to space out your studying (spaced repetition). To prime you for what we will discuss, you will view a set of videos and complete exercises by Tuesday at 6:00pm (one hour before the lectures). In some weeks, the videos will be supplemented or replaced by recommended readings and an activity.. These are the Preparation exercises hosted on PCRS
There are three assignments. They must be submitted electronically through Markus git repository. Grading will be done by an automated testing program, so you must follow the submission instructions exactly. Any program that does not compile on a CS lab machine or that crashes (e.g., seg fault or bus error) will receive a grade of 0. Check your submission carefully; verify that you have submitted exactly the files you intended to submit and that they compile on a lab machine.
There is one midterm. It will take place on Tuesday, July 5th at 19:00 (during the lecture).
The final exam is comprehensive and takes place after classes are over. To pass the course, you must receive at least 40% on the final exam. The highest mark you will receive if your grade on the final exam is less than 40% is 47%. The final exam schedule is not yet available but will be posted later in the term. We will make an announcement once the registrar’s site has final exam information.
Both exams are paper-based. More information will be posted on Piazza prior to the exam dates.
We recognize that unexpected problems sometimes make it difficult to submit assignments on time. For this reason, we will be using grace tokens to give you some flexibility with assignment deadlines. Each student will receive 18 grace tokens; each grace token can be used for a four-hour extension for an assignment. For example, you may choose to use all 18 grace tokens on A1, extending its deadline by 72 hours. Alternatively, you may wish to use nine tokens for each of A1 and A2 (and none on A3), extending each deadline by 36 hours.
MarkUs automatically deducts grace tokens when you submit an assignment late. That is, you do not need to explicitly say you are using a grace token, just submit your work within the grace token four-hour periods.
Aside that policy, no late submissions are accepted. If you used up all your grace tokens, or you want to save them for another assignment, you should hand in a working (and tested) version of a program that accomplishes a subset of the requirements. This will be easy to do if you have written and debugged a series of programs that accomplish more and more of the assigned problem.
Note that the grace token policy only applies to assignments. Therefore, weekly prep exercises do not have grace tokens or late submissions.
If you feel there was an error in the marking of an assignment, you may request a remark directly on Markus. You must give a specific reason for the request, referring to a possible error or omission by the marker. Stating specific potential grading errors for your remark request is mandatory for us to even consider your request. However, we will review your entire work, not just the items you pointed out. Please keep in mind that your grade may stay the same, may increase, or may even decrease, after your remark request is assessed. Remark requests must be received within three days of when you received the grade for that item.
To request special consideration, bring supporting documentation to the instructor in person during office hours at least one week in advance.
In the event of an illness or other catastrophe, please contact me and provide supporting documentation within one week of the missed work. You must also declare your absence on Acorn. Do not wait until the due date has passed. It is always easier to make alternate arrangements before the due date.
Students who cannot complete their final examination due to illness or other serious causes must file an online petition within 72 hours of the missed examination. Late petitions will not be considered. Students must also record their absence on Acorn on the day of the missed exam or by the day after at the latest. Upon approval of a deferred exam request, a non-refundable fee of $70 is required for each examination approved.
Honesty and fairness are fundamental to the University of Toronto’s mission. Plagiarism is a form of academic fraud and is treated very seriously. You are also expected to read the handout How not to plagiarize and to be familiar with the Code of behaviour on academic matters, which is linked from the UTM calendar under the link Codes and policies.
Assignments are individual work which means that you will not be allowed to seek advice from other students or copy/paste someone else's code, even open source codes from the internet. However, you are allowed to look at online resources, tutorials, and Q&A websites over the course of solving the problems. The entire code must be written by yourself.
Course intro, binary logic, gates, bitwise operations, comparison
Assembly & machine code, C, variables, loops, functions, Unix & Linux, terminal & commands, gnu compiler, makefile
Arrays, memory safety, the "&" operator, call by value and reference, pointers, the "*" operator
More pointers, casting, dynamic memory allocation, freeing and memory leaks, command line arguments
Strings definition, String manipulation, memory safety
Struct definition and usage, padding, attribute access, file I/O tools and funtions
Midterm
Syscalls, processes, memory model, forking, exec, wait, low-level I/O, file descriptors
Inter-process communication, pipes, known signals, signal handling
UDP, TCP, sockets, server & client, IP addresses, endianness
Reading from multiple file descriptors, select, non-blocking reads
Threads vs Processes, thread creation & termination, joining, shared variables, mutexes, condition variables
I taught this course to people of all sort of ages. In hindsight, perhaps it is not really meant for 7th grade students.
Finally, I realize winter break and summer break mean so much to me. Unfortunately, it's probably too late.
Yes I know my email is long, I promise it's not meant to discourage emails. Anyway hi all, CSC209 was one of my favorite courses and I hope you will enjoy it too!
Hi, I’m Dan! A little about me, I’m a big CS nerd, I have two cats, I love being outside in nature, and this summer I’m trying to get back into running/jogging. I’m excited to be TA-ing CSC209 again as it is honestly one of my favourite courses here at UTM. I really look forward to meeting you all and helping you to excel in this course! 💯
I'm a Master's student at the St. George campus. I have TAed 209 many times across all three campuses, and I am looking forward to TAing it yet again!
I really enjoyed taking and TAing CSC209, and have full confidence this offering will live up to its reputation for being fun yet challenging!!