Top

CSC209H: Software Tools and Systems Programming

Thank you to Prof. Karen Reid for providing this information!

So, what exactly IS CSC209H1??

The course is really about what it means to run a program, understanding how memory works, and learning how programs ask for services from the operating system.

CSC209 is different from some of your previous CS courses in that students do all of the assignments on their own and are expected to be able to use the tools they have learned from previous courses, such as how to navigate the file system, how to use Git, and how to use a debugger. It’s important that you have familiarity with the command-line tools on Linux, Mac, or WSL on Windows.

Keys to Success!

  • Stay on top of the course because everything is cumulative.

  • When working on assignments, write a small bit of code and then test it. Make sure it does what you think it does before moving to the next step!

How is CSC209H1 going to help me?

  • The most important things from CSC209H1 to help prepare you for future studies and job searches are:

    • learn how to use the debugger

    • learn how to use the command-line, including being able to work on a terminal on a remote machine.

    • Students say: “[The concepts in CSC209H1 are] directly applicable to the internship I did over summer 2021. I was able to use concepts I learned in CSC209H1 like processes, forking, or the C programming language in general in my back-end development role.”

How will CSC209H assignments help me learn?

We have a general plan for each of the assignments. There is often quite a bit of starter code, so it is important to spend some time understanding what this code does. The second assignment typically involves some kind of dynamically allocated data structure. Last year, students used decision trees to solve a machine learning problem. The starter code included the important mathematics parts of the algorithm, so students could focus on building and traversing the tree.

When learning about programming, it is really important to be able to try things out and to problem-solve. You don’t really understand how memory works until you can explain why a segmentation fault happens, or why it is a bad idea to return a pointer to a local variable, and the best way to be able to explain it is to try it yourself.

A few last words from the instructor:

  • Students like the course because it is practical. Even if they don’t write any more C programs, they have learned about how things work “under the hood,” and it helps them with programming in other languages.

  • Some students find C a bit hard to learn, but if you understand the memory model, it gets a lot easier!

  • I like teaching CSC209 because I really like figuring out how things work.

CSC209H is a prerequisite for... 

  • CSC301H1 — Introduction to Software Engineering

  • CSC309H1 — Programming on the Web

  • CSC317H1 — Computer Graphics

  • CSC320H1 — Introduction to Visual Computing

  • CSC367H1 — Parallel Programming

  • CSC369H1 — Operating Systems

  • CSC385H1 — Microprocessor Systems

  • CSC401H1 — Natural Language Computing

  • CSC417H1 — Physics-Based Animation

  • CSC419H1 — Geometry Processing

  • CSC428H1 — Human-Computer Interaction

  • CSC456H1 — High-Performance Scientific Computing

  • CSC458H1 — Computer Networking Systems

  • CSC485H1 — Computational Linguistics