Choosing Your First-Year Courses

This page will help you choose your first-year computer science courses whether you plan to enrol in a computer science program, are taking CSC courses to fulfill requirements for a different program, or just want to take a course or two to learn a bit about computer science.

If you have further questions, please contact our Undergraduate Office ( for advice.

What’s The Difference Between Computer Science And Computer Engineering?
Do You Offer A Software Engineering Program?

Computer science and computer engineering are two sides of a technology spectrum, where computer engineers mostly focus on creating hardware and computer scientists focus on creating software. There is overlap in the courses that they take, as well as the jobs that graduates typically apply for. However, engineering is a professional program with a very rigid set of courses, whereas computer science has a broader set of requirements for completing a degree. As a result, there are some jobs that only accept computer engineering graduates, but there are not as many of them compared to the overwhelming number of computer science jobs available (especially in the GTA).

The requirements are different for getting in as well. Computer Science requires U-level Calculus and English, whereas Computer Engineering requiring U-level Physics, Chemistry, two Maths and English. The entrance average for engineering is typically more competitive than computer science.

Software engineering means different things at different universities. As a general term, "software engineering" refers to the use of processes and principles when designing software, much in the same way that architects employ certain practices when designing buildings. Within a university program, this means teaching students approaches that they need to know when designing software in the real world. Since this is a sub-area of computer science, students in CS get to learn about software engineering through a series of courses that we offer. However, different departments at different universities will offer actual Software Engineering programs as an extension of their Computer Engineering program. It is advisable to examine the content of these programs before determining if they are right for you.

What Can You Study In Computer Science?

In general, any field that uses computers is a potential area for computer scientists. More than ever, there is a need for people who can combine technological ability with interest and skills in other areas, which is why our double major program allows students to combine studies in computer science in equal parts with studies in other areas within the sciences, humanities or social sciences.

For people who want to take our computer science specialist program, nearly ever field in computer science is taught at U of T. Examples areas include: Applied Mathematics, Artificial Intelligence, Computer Vision, Machine Learning, Natural Language Processing, Computational Biology, Computer Graphics, Animation, Compilers, Operating Systems, Networks, Web Programming, Databases, Cloud Programming, Big Data Systems, Human Computer Interaction, Mobile Programming, Numerical Analysis, Programming Languages, Software Engineering, Theory of Computation and Video Game Design. Keep in mind that these are still broad areas within computer science, and our extensive and knowledgeable faculty enables U of T students to pursue as much breadth or depth as they wish within any fields that interest them. 

Studying Computer Science In A Major Or Specialist Program

Here are two typical first-year schedules for students intending on studying computer science.

Do you have little or no programming experience? Do you have programming experience roughly equivalent to CSC108H1?
Fall 2018
Winter 2019
Fall 2018
Winter 2019
CSC148H1 and CSC165H1/CSC240H1
CSC148H1 and CSC165H1
 CSC207H1 and CSC236H1/CSC240H1
First-year calculus: MAT137Y* or MAT157Y* or (MAT135H1 and MAT136H)*
First-year calculus: MAT137Y* or MAT157Y* or (MAT135H1 and MAT136H)*
Three additional half courses (or the equivalent)
Two additional half courses (or the equivalent)
Two additional half courses (or the equivalent)            

Two additional half courses (or the equivalent)

*Students are strongly encouraged to take MAT137Y or MAT157Y as they have been determined to provide the best preparation for upper-year courses in computer science and benefit students in CSC165H/CSC240H.

Note: grades in CSC148H1 and CSC165H1/CSC240H1 are used for admission to Computer Science Programs of Study. Please consult Program of Study Admission Requirements for more information.

Taking CSC Courses For Breadth Or For A Requirement In Another Program

Have you taken an introductory CSC course and want to know what to take next? See How to Continue Your Studies in Computer Science. If you are relatively new to programming, you have four courses to choose from: CSC104H1, CSC108H1, CSC120H1, and CSC121H1. None of these require or expect any prior programming experience.

Your planned area of study Suggested course Notes
Humanities CSC104H1 CSC104H1 is suitable for anyone with a curiosity about computer programming.
Natural and social sciences CSC120H1 CSC120H1 is a practical introduction to programming, mainly geared towards students in the natural and social sciences or anyone who will be working with quantitative data.                                                
Statistics CSC121H1 CSC121H1 is an introduction to programming for statistical applications. It is designed for students who are either planning to specialize in statistics or who expect to use statistics extensively while studying another field.


CSC108H1 is the first course in all of the CSC Programs of Study, although it is suitable for everyone. There are three versions to choose from:
  • The standard offering: on-campus lectures,
    3 hours a week
  • The online offering: there are no lectures
    — only the final exam is on campus — but this version covers the same material as the standard offering and is just as much work. It requires self discipline to do well.
  • Winter 2019, only: A small pilot project that is exploring a mastery-based approach (section L0201)

Do You Have Some Programming Experience?

If you do, you may consider skipping CSC108H1 and going straight to CSC148H1. CSC108H1 starts with the basics: print statements, what variables are, that sort of thing. To give you an idea of the pace, it teaches loops in week 4. To skip CSC108H1, you should be able to, in the programming language of your choice:

  • Design and implement a function (sometimes called a method or procedure) to sort a list (sometimes called an array) of numbers.

  • Write a program to read a text file and print only the words that start with a capital letter.

  • Describe the difference between a function that returns a value and one that prints a value.

  • Read and understand a 100-line program that contains several functions and confidently predict what it will do.

  • Write a function to count the number of zeroes in a list of lists (or 2D array).

  • Given a function description, write a set of unit tests for that function.

  • Given a buggy function that sorts a list of strings, find and fix the bug.

Here is a sample CSC108H1 final exam. If you're thinking about skipping CSC108H1 and proceeding directly to CSC148H1, you should be comfortable answering these questions in a programming language similar to Python.  If you don't know Python but understand the concepts in another language, you should be fine — read the next section, "What if you do not know Python?".

What If You Do Not Know Python?

CSC108H1 and CSC148H1 are currently taught using Python. CSC148H1 offers a full-day ramp-up session on the first weekend after the start of class. The ramp-up session quickly reviews how the CSC108H1 concepts look in Python. Students who have learned the same concepts in a similar language (e.g., C++, Java) typically find that the ramp-up is enough to get them ready to program in Python in CSC148H1. The exact times for each term's ramp-up session will be communicated by the instructor during the first week of classes.

Students may also benefit from completing the free Massive Open Online Courses (MOOCs) developed by experienced instructors of CSC108H who teach Python, available on the Coursera platform:

How To Continue Your Studies In Computer Science

As always, if you have questions, please contact our Undergraduate Office at for advice.

Scenario Suggested next step
Have you completed CSC104H1? Take CSC108H1 if you have no other programming experience besides this course, or CSC148H1 if you have some other experience.        
Have you completed CSC108H1? Proceed to CSC148H1.
Have you completed CSC120H1? Proceed to CSC148H1, but review the final few weeks of CSC108H1 (specifically, sorting algorithms, algorithm running time, and an introduction to classes). You can find notes to review on the most recent term's CSC108H1 website.
Have you completed CSC121H1? You will need to learn Python, and the CSC148H1 ramp-up session will likely be enough.  Proceed to CSC148H1, but review the final few weeks of CSC108H1 (specifically, sorting algorithms and algorithm running time). You can find notes to review on the most recent term's CSC108H1 website.