## You are here

# Computer Science

### Faculty List

**University Professor Emeritus **

S. Cook, SM, PhD, FRS, FRSC

G. Hinton, PhD, FRS, FRSC

**Professors Emeriti **

R. Baecker, MSc, PhD

D. Corneil, MA, PhD

J. Danahy, MScUrb & DesPl

W. Enright, MSc, PhD (University of Toronto Scarborough)

E. Fiume, PhD, FRSC

E. Hehner, MSc, PhD

R.C. Holt, PhD

H. Levesque, MSc, PhD, FRSC

R. Mathon, MSc, PhD (University of Toronto Mississauga)

J. Mylopoulos, MSc, PhD, FRSC

R. Neal, PhD

C. Rackoff, PhD (University of Toronto Mississauga)

D. Wortman, MSc, PhD

**Senior Lecturer Emeritus **

J. Clarke, MSc, PhD

**University Professor **

A. Borodin, MSc, PhD, FRSC

**Professor and Chair of the Department **

R. Balakrishnan, MSc, PhD

**Associate Professor and Associate Chair (Research)**

Y. Ganjali, MSc, PhD

**Associate Professor and Associate Chair (Graduate Studies) **

A. Demke-Brown, MSc, PhD

**Associate Professor, Teaching Stream and Associate Chair (Undergraduate Studies) **

M. Craig, MSc

**Professors **

T. Abdelrahman, MSc, PhD

A. Aspuru-Guzik, PhD

F. Bacchus, MSc, PhD

R. Balakrishnan, MSc, PhD

M. Brudno, MSc, PhD

M. Chechik, MSc, PhD

E. de Lara, MSc, PhD

S. Dickinson, MSc, PhD

S. Easterbrook, PhD

F. Ellen, MMath, PhD

D. Fleet, MSc, PhD (University of Toronto Scarborough)

A. Gupta, PhD

V. Hadzilacos, PhD (University of Toronto Scarborough)

G. Hirst, MSc, PhD (University of Toronto Scarborough)

K. Jackson, MSc, PhD

A. Jepson, PhD

N. Koudas, MSc, PhD (University of Toronto Scarborough)

K. Kutulakos, MSc, PhD

P. Marbach, MSc, PhD

S. McIlraith, MMath, PhD

R. Miller, MSc, PhD, FRSC

M. Molloy, MMath, PhD (University of Toronto Scarborough)

G. Penn, MSc, PhD

T. Pitassi, MSc, PhD

K. Singh, MSc, PhD

S. Stevenson, MSc, PhD

S. Toueg, MA, PhD

R. Zemel, MSc, PhD

**Associate Professors **

A. Bonner, MSc, PhD (University of Toronto Mississauga)

C. Christara, MSc, PhD

A. Demke-Brown, MSc, PhD

A. Farzan, PhD

Y. Ganjali, MSc, PhD

B. Schroeder, MSc, PhD (University of Toronto Scarborough)

K. Truong, PhD

R. Urtasun, PhD

D. Wigdor, MSc, PhD (University of Toronto Mississauga)

**Assistant Professors **

I. Ahmed, PhD

A. Anderson, PhD (University of Toronto Scarborough)

J. Ba, PhD

F. Chevalier, PhD

D. Duvenaud, PhD

M. Erdogdu, PhD

S. Fidler, PhD

M. Ghassemi, PhD

R. Grosse, PhD

A. Jacobson, PhD

D. Levin, PhD

F. Long, PhD

A. Nikolov, PhD

G. Pekhimenko, PhD (University of Toronto Scarborough)

B. Rossman, PhD

S. Sachdeva, PhD (University of Toronto Mississauga)

N. Shah, PhD

Y. Xu, PhD

H. Yuen, PhD

**Associate Professors, Teaching Stream **

G. Baumgartner, MSc

J. Campbell, MMath

M. Craig, MSc

S. Engels, MMath

T. Fairgrieve, MSc, PhD

P. Gries, MEng

D. Heap, MSc

D. Horton, MSc

F. Pitt, MSc, PhD

K. Reid, MSc

**Assistant Professors, Teaching Stream **

D.Liu, MSc

J.Smith, MSc

**Cross Appointed **

C. Amza, PhD

P. Andritsos, PhD

G. Bader, PhD

T. Barfoot, PhD

C. Beck, PhD

M. Chignell, PhD

M. Consens, PhD

B. Frey, PhD

A. Goel, PhD

M. Gruninger, PhD

A. Jacobsen, MSc, PhD

P. Kim, PhD

B. Li, MSc, PhD

D. Lie, PhD

J. Liebeherr, PhD

K. Lyons, MSc, PhD

E. Mendelsohn, MSc, PhD (Professor Emeritus) (University of Toronto Scarborough)

A. Mihailidis, PhD

Q. Morris, PhD

A. Moses, PhD

C. Munteanu, PhD

F. Roth, PhD

D. Roy, PhD

S. Sanner, PhD

M. Stumm, MSc (Math), PhD

A. Urquhart, MA, PhD (Professor Emeritus)

A. Veneris, MSc, PhD

E. Yu, MSc, PhD

D. Yuan, PhD

Z. Zhang, PhD

**Adjunct and Status Only **

A. Borgida, PhD

C. Boutilier, PhD

B. Buxton, MSc

A. Fazley, PhD

G. Gibson, PhD

B. Glavic, PhD

A. Goldenberg, PhD

M. Grech, MBA

B. Haibe-Kains, PhD

A. Hertzmann, PhD

M. Hoffman, PhD

R. Johnson, PhD

I. Jurisica, PhD

G. Lakemeyer, PhD

C. Landreth, MS

K. Larson, PhD

D. Penny, PhD

K. Pu, PhD

F. Rudzicz, PhD

P. Salvini, PhD

R. Schmidt, PhD

J. Simpson, PhD

J. Stam, PhD

B. Taati, PhD

T. Topalouglou, PhD

J. Tsotsos, PhD

## Introduction

What is Computer Science?

Despite the name, Computer Science is not really a science of computers at all. Computers are quite remarkable electronic devices, but even more remarkable is what they can be made to do: simulate the flow of air over a wing, manage communication over the Internet, control the actions of a robot, synthesize realistic images, play grandmaster-level chess, and on and on. Indeed the application of computers in activities like these has affected most areas of modern life. What these tasks have in common has little to do with the physics or electronics of computers; what matters is that they can be formulated as some sort of computation. This is the real subject matter of Computer Science: computation, and what can or cannot be done computationally.

In trying to make sense of what we can get a computer to do, a wide variety of topics come up. There are, however, two recurring themes. The first is the issue of scale: how big a system can we specify without getting lost in the design, or how big a task can a computer handle within reasonable bounds of time, memory, and accuracy. A large part of Computer Science deals with these questions in one form or another. In the area of programming languages and methodology, for example, we look for notations for describing computations, and programming methodologies that facilitate the production of manageable and efficient software. In the theory of computation area, we study resource requirements in time and memory of many basic computational tasks.

The second theme concerns the scope of computation. Computers were originally conceived as purely numerical calculators, but today, we tend to view them much more broadly. Part of Computer Science is concerned with understanding just how far computational ideas can be applied. In the area of artificial intelligence, for example, we ask how much of the intelligent behaviour of people can be expressed in computational terms. In the area of human-computer interaction, we ask what sorts of normal day-to-day activities of people might be supported and augmented using computers.

Some Computer Science courses are offered in the evening, to allow part-time students to pursue our programs. Introductory courses and some higher-level courses are offered in the summer.

The Professional Experience Year Co-op Program (PEY Co-op) offers students the opportunity to gain valuable work experience in industry, over a twelve to sixteen-month period. It is available to eligible, full-time students. Students may also take advantage of the International Exchange Program offered by CIE. Please refer to the Student Services & Resources chapter of this Calendar.

Academic Advisors, Undergraduate Office: Bahen Building, 40 St. George Street, Rooms 4290, M5S 2E4 (416-978-6360 or 416-946-8870), email: ug@cs.utoronto.ca).

Web site: web.cs.toronto.edu

### Computer Science Programs

### Data Science Specialist (Science Program) - ASSPE1687

**Description:**

The field of Data Science is a combination of statistics and computer science methodologies that enable ‘learning from data’. A data scientist extracts information from data, and is involved with every step that must be taken to achieve this goal, from getting acquainted with the data to communicating the results in non-technical language. The Data Science Specialist program prepares students for work in the Data Science industry or government and for graduate studies in Data Science, Computer Science, or Statistics. Students in the program will benefit from a range of advanced courses in Computer Science and Statistics offered by the University of Toronto, as well as from a sequence of three integrative courses designed especially for the program.

The Data Science Specialist program comprises three fundamental and highly-integrated aspects. First, students will acquire expertise in statistical reasoning, methods, and inference essential for any data analyst. Seconds, students will receive in-depth training in computer science: the design and analysis of algorithms and data structures for handling large amounts of data, and best practices in software design. Students will receive training in machine learning, which lies at the intersection of computer and statistical sciences. The third aspect is the application of computer science and statistics to produce analyses of complex, large-scale datasets, and the communication of the results of these analyses; students will receive training in these areas by taking integrative courses that are designed specifically for the Data Science Specialist program. The courses involve experiential learning: students will be working with real large-scale datasets from the domain of business, government, and/or science. The successful student will combine their expertise in computer and statistical science to produce and communicate analyses of complex large-scale datasets.

Skills that graduates of the program will acquire include proficiency in statistical reasoning and computational thinking; data manipulation and exploration, visualization, and communication that are required for work as a data scientist; the ability to apply statistical methods to solve problems in the context of scientific research, business, and government; familiarity and experience with best practices in software development; and knowledge of current software infrastructure for handling large data sets. Graduates of the program will be able to demonstrate the ability to apply machine learning algorithms to large-scale datasets that arise in scientific research, government, and business; create appropriate data visualizations for complex datasets; identify and answer questions that involve applying statistical methods or machine learning algorithms to complex data, and communicating the results; present theresults and limitations of a data analysis at an appropriate technical level for the intended audience.

**Enrolment Requirements:**

This is a limited enrolment program that can only accommodate a certain number of students. Eligibility is based on the average of a student's grades in CSC148H1 and MAT137Y1/ MAT157Y1 and STA130H1. ( MAT157Y1 grades will be adjusted to account for the course's greater difficulty.)

In addition, students must have completed at least 4.0 FCEs and achieved a minimum grade of 70% in each of CSC148H1, MAT137Y1/ MAT157Y1 and STA130H1.

Students will be assessed based on a competitive average across these courses, and a supplemental application which will be considered alongside their academic results.

Important:

- Requests for admission will be considered in the first program request period only. For detailed program enrolment instructions and application deadlines for restricted programs please click here.
- Due to the limited enrolment nature of this program students are strongly advised to plan to enroll in backup programs.
- Students admitted to the program after second or third year will be required to pay retroactive deregulated program fees.

**Completion Requirements:**

(13.0-13.5 Full Course Equivalents [FCEs], including at least 1.5 FCEs at the 400-level)

*First year (3.0 FCEs)*

MAT137Y1/ MAT157Y1; MAT223H1/ MAT240H1 ( MAT240H1 is recommended); STA130H1; CSC108H1; CSC148H1;

Note: Students with a strong background in an object-oriented language such as Python, Java or C++ may omit CSC108H1 and proceed directly with CSC148H1. There is no need to replace the missing half-credit for program completion; however, please base your course choice on what you are ready to take, not on "saving" a half-credit. Consult with the Computer Science Undergraduate Office for advice on choosing between CSC108H1 and CSC148H1.

*Second year (3.5-4.0 FCEs)*

MAT237Y1/ MAT257Y1; STA257H1; STA261H1; CSC207H1; ( CSC165H1, CSC236H1)/ CSC240H1 ( CSC240H1 is recommended); JSC270H1 (Data Science I)

Note: CSC240H1 is an accelerated and enriched version of CSC165H1 plus CSC236H1, intended for students with a strong mathematical background, or who develop an interest after taking CSC165H1. If you take CSC240H1 without CSC165H1, there is no need to replace the missing half-credit for program completion; however, please base your course choice on what you are ready to take, not on "saving" a half-credit. Consult the Computer Science Undergraduate Office for advice on choosing between CSC165H1 and CSC240H1.

*Later years (6.5 FCEs)*

- STA302H1; one of STA303H1 or STA305H1; STA355H1; CSC209H1; CSC263H1/ CSC265H1 ( CSC265H1 is recommended); CSC343H1; CSC373H1; JSC370H1 (Data Science II)
- STA314H1/ CSC311H1/ CSC411H1;
- 2.0 FCEs from the following list, including at least 1.0 FCE at the 400 level (see below for additional conditions): STA303H1/ STA305H1 (whichever one was not taken previously), STA347H1, CSC401H1, STA414H1/ CSC412H1, CSC413H1/ CSC421H1, any 400-level STA course; JSC470H1 (Data Science III).

The choices from 3 must satisfy the requirement for an integrative, inquiry-based activity by including at least 0.5 FCE from the following: JSC470H1 (Data Science III); CSC454H1, CSC490H1, CSC491H1, CSC494H1, CSC495H1, STA490Y1, STA496H1, STA497H1, STA498Y1, STA499Y1. This requirement may also be met by participating in the PEY Co-op (Professional Experience Year Co-op) program.

Students will be advised to develop domain expertise in at least one area where Data Science is applicable, by taking a sequence of courses in that area throughout their program. Examples of such areas will be provided to students by program advisors and will form the basis for a later proposal for program Focuses (to be approved through internal Arts & Science governance procedures).

### Computer Science Specialist (Science Program) - ASSPE1689

**Enrolment Requirements:**

This is a limited enrolment program. To be eligible to submit an application, students must have completed at least 4.0 FCEs including CSC148H1 (with a minimum grade of 70%) and CSC165H1/ CSC240H1 (with a minimum grade of 70%). Students will be assessed based on a competitive average across these courses, and a supplemental application which will be considered alongside their academic results.

Important:

- Requests for admission will be considered in the first program request period only. For detailed program enrolment instructions and application deadlines for restricted programs please click here.
- Due to the limited enrolment nature of this program students are strongly advised to plan to enroll in backup programs.
- Students admitted to the program after second or third year will be required to pay retroactive deregulated program fees.

**Completion Requirements:**

(12.0 full course equivalents [FCEs], including at least 1.5 FCEs at the 400-level)

*First year* (2.5 FCEs):

1. CSC108H1, CSC148H1, CSC165H1/ CSC240H1; MAT137Y1/ MAT157Y1/( MAT135H1, MAT136H1)

Notes:

- Students with a strong background in an object-oriented language such as Python, Java or C++ may omit CSC108H1 and proceed directly with CSC148H1. There is no need to replace the missing half-credit for program completion; however, please base your course choice on what you are ready to take, not on “saving” a half-credit.
- CSC240H1 is an accelerated and enriched version of CSC165H1 plus CSC236H1, intended for students with a strong mathematical background, or who develop an interest after taking CSC165H1. If you take CSC240H1 without CSC165H1, there is no need to replace the missing half-credit for program completion; but please see Note (a).
- Consult the department's Undergraduate Office for advice about choosing among CSC108H1 and CSC148H1, and between CSC165H1 and CSC240H1.
- We recommend that students take MAT137Y1 or MAT157Y1, as they have been determined to provide the best preparation for upper-year courses in computer science and benefit students in CSC165H1/ CSC240H1. Similarly, we recommend MAT223H1 or MAT240H1 from the options in second year.

*Second year* (3.5 FCEs):

2. CSC207H1, CSC209H1, CSC236H1/ CSC240H1, CSC258H1, CSC263H1/ CSC265H1; MAT223H1/ MAT240H1/ MAT221H1; STA247H1/ STA255H1/ STA257H1

*Later years* (6.0 FCEs):

4. 5.0 FCEs from the following:

- Any 300-/400-level CSC course;
- BCB410H1, BCB420H1, BCB330Y1/ BCB430Y1;
- ECE385H1, ECE489H1;
- MAT224H1/ MAT247H1, MAT235Y1/ MAT237Y1/ MAT257Y1, any 300-/400-level MAT course except MAT329Y1, MAT390H1, MAT391H1;
- STA248H1/ STA261H1, any 300-/400-level STA course

with at most 2.0 FCEs from MAT or STA courses, and at least 1.5 FCEs from 400-level CSC, BCB, or ECE courses.

No more than 1.0 FCE from CSC490H1, CSC491H1, CSC494H1, CSC495H1, BCB330Y1/ BCB430Y1 may be used to fulfill program requirements.

The choices in 4 must satisfy the requirement for an integrative, inquiry-based activity by including one of the following half-courses: CSC301H1, CSC318H1, CSC404H1, CSC311H1/ CSC411H1, CSC418H1, CSC420H1, CSC428H1, CSC454H1, CSC485H1, CSC490H1, CSC491H1, CSC494H1, CSC495H1. This requirement may also be met by participating in the PEY (Professional Experience Year) program. Transfer credits cannot comprise more than 1.0 FCE at the 300-/400-level, and cannot be used to satisfy the requirement for an integrative, inquiry-based activity. In addition, transfer credits cannot comprise more than 0.5 FCE of the 400-level CSC, BCB, or ECE courses required.

**Choosing courses**

This program offers considerable freedom to choose courses at the 300-/400-level, and you are free to make those choices on your own. We are eager to offer guidance, however, and both our Undergraduate Office and individual faculty members are a rich source of advice.

### Focus in Artificial Intelligence - ASFOC1689B

**Description:**

(3.5 FCEs)

Artificial Intelligence (AI) is aimed at understanding and replicating the computational processes underlying intelligent behaviour. These behaviours include the perception of one's environment, learning how that environment is structured, communicating with other agents, and reasoning to guide one's actions. This focus is designed to provide students with an introduction to some of the key scientific and technical ideas that have been developed in AI. There are four different sub-areas of AI represented in our department: Computer Vision, Computational Linguistics, Machine Learning, and Knowledge Representation and Reasoning. These areas cover a wide variety of ideas and techniques. Students wanting to achieve this focus are required to take courses from at least two of these sub-areas (as in point 2, below).

**Enrolment Requirements:**

Enrolment in the Computer Science Specialist Program (ASSPE1689).

### Focus in Computational Linguistics and Natural Language Processing - ASFOC1689C

**Description:**

(4.0 FCEs)

How can we build and analyze systems that enable users to communicate with computers using human language (also called natural language) and automatically process the vast amounts of data on the web available in the form of text? The focus covers appropriate material on natural language interfaces, as well as tools such as document summarization, intelligent search over the web, and so on. Students considering this focus are encouraged to consider a Major in Linguistics. [Note 0.5 FCE in LIN is in addition to the 12.0 FCEs required to complete the Specialist program]

**Enrolment Requirements:**

Enrolment in the Computer Science Specialist Program (ASSPE1689).

**Completion Requirements:**

Required Courses:

- CSC318H1
- CSC401H1, CSC485H1
- LIN101H1/ LIN200H1
- 1.5 FCEs from the following: CSC309H1, CSC413H1/ CSC421H1/ CSC321H1, CSC311H1/ CSC411H1, CSC428H1, CSC486H1
- 0.5 FCE from the following: PSY100H1, COG250Y1

Suggested Related Courses:

Other relevant Computer Science courses, depending on the student's interests, include other courses in artificial intelligence such as CSC384H1 or CSC420H1. Linguistics, Psychology, and Cognitive Science are all directly relevant to this focus, and we recommend that interested students take additional courses from any or all of those disciplines.

### Focus in Computer Systems - ASFOC1689F

**Description:**

(3.5 FCEs)

Software systems are complex and interesting. Poorly done systems can be incredibly expensive: they can cost society billions of dollars and sometimes make the difference between life and death. Rapid changes in technology and applications means that the underlying systems must continually adapt. This focus takes you under the covers of software systems, laying bare the layers and introducing you to concurrency issues, scalability, multiprocessor systems, distributed computing, and more.

**Enrolment Requirements:**

Enrolment in the Computer Science Specialist Program (ASSPE1689).

### Focus in Computer Vision - ASFOC1689D

**Description:**

(3.5 FCEs)

Computer vision is the science and technology of machines that can see. As a science, the goal of computer vision is to understand the computational processes required for a machine to come to an understanding of the content of a set of images. The data here may be a single snapshot, a video sequence, or a set of images from different viewpoints or provided by medical scanners.

The computer vision focus introduces students to the study of vision from a computational point of view. That is, we attempt to clearly define computational problems for various steps of the overall process, and then show how these problems can be tackled with appropriate algorithms.

Students who wish to pursue computer vision should have an understanding of linear algebra and calculus of several variables. Moreover, they should be solid programmers and have a good understanding of data structures and algorithm design. These basic tools are required in order to first pose computational vision problems, and then develop and test algorithms for the solution to those problems.

**Enrolment Requirements:**

Enrolment in the Computer Science Specialist Program (ASSPE1689).

**Completion Requirements:**

Required Courses:

- MAT235Y1/ MAT237Y1/ MAT257Y1, CSC320H1, CSC336H1, CSC311H1/ CSC411H1, CSC420H1
- 0.5 FCE from the following: CSC412H1, CSC418H1, CSC2503H (Note: students must petition to take a graduate course.)

Suggested Related Courses:

The following are examples of topics and courses that fit naturally with a study of computational vision. The list is meant to be illustrative of the range of cognate topics, but is not necessarily complete. The ordering is alphabetical and not indicative of importance. Note: there are prerequisites for many of these courses that we do not list here.

APM462H1, COG250Y1, CSC384H1, CSC485H1, CSC486H1, ECE216H1, PHL232H1, PHY385H1, PSL440Y1, PSY270H1, PSY280H1, STA257H1/ STA261H1

### Focus in Game Design - ASFOC1689G

**Description:**

(3.0 FCEs)

Video game design combines several disciplines within computer science, including software engineering, graphics, artificial intelligence, and human-computer interaction. It also incorporates elements of economics, psychology, music, and creative writing, requiring video game researchers to have a diverse, multidisciplinary set of skills.

Students who wish to pursue video game design should have an understanding of linear algebra (for computer graphics modelling), computer hardware and operating systems (for console architecture), data structures, and algorithm design. Students will gain a general knowledge of the more advanced topics listed in the courses below.

**Enrolment Requirements:**

Enrolment in the Computer Science Specialist Program (ASSPE1689).

### Focus in Human-Computer Interaction - ASFOC1689H

**Description:**

(6.5 FCEs)

Human-Computer Interaction (HCI) is the scientific study of the use of computers by people and the design discipline that informs the creation of systems and software that are useful, usable, and enjoyable for the people who use them. HCI students have exciting opportunities for research and graduate school; HCI professionals often have jobs with titles such as user interface architect, user interface specialist, interaction designer, or usability engineer. [Note 3.5 FCEs in SOC & PSY are in addition to the 12.0 FCEs required to complete the Specialist program]

**Enrolment Requirements:**

Enrolment in the Computer Science Specialist Program (ASSPE1689).

**Completion Requirements:**

Required Courses:

- CSC300H1, CSC301H1, CSC318H1, CSC428H1
- ( SOC100H1, SOC150H1)/ SOC101Y1, SOC202H1, SOC204H1/ SOC200H1, SOC252H1/ SOC254H1/ SOC302H1 [To enrol in restricted SOC courses, please contact the CS Undergraduate Office in the July preceding the academic year in which you plan to take the course]
- 1.0 FCE from the following: CSC309H1, CSC320H1, CSC321H1, CSC343H1, CSC384H1, CSC401H1, CSC404H1, CSC418H1, CSC485H1, CSC490H1/491H1
- PSY100H1, PSY270H1/ PSY280H1

Suggested Related Courses:

- CSC454H1, CSC290H1
- At least one half-course in Human Factors or Ergonomics offered by the Department of Mechanical and Industrial Engineering, such as MIE240H1, MIE343H1, MIE344H1, MIE448H1, or MIE449H1. Human factors is a discipline closely associated with human-computer interaction that approaches problems in slightly different ways.
- ENV281H1, ENV381H1
- IRE260H1

### Focus in Scientific Computing - ASFOC1689A

**Description:**

(3.5 FCEs)

Scientific computing studies the world around us. Known and unknown quantities are related through certain rules, e.g. physical laws, formulating mathematical problems. These problems are solved by numerical methods implemented as algorithms and run on computers. The numerical methods are analyzed and their performance (e.g. accuracy, efficiency) studied. Problems, such as choosing the optimal shape for an airplane (to achieve, for example, minimal fuel consumption), finding the fair price for derivative products of the market, or regulating the amount of radiation in medical scans, can be modelled by mathematical expressions and solved by numerical techniques.

Students wishing to study scientific computing should have a strong background in mathematics—in particular calculus of several variables, linear algebra, and statistics—be fluent in programming, and have a good understanding of data structures and algorithm design.

**Enrolment Requirements:**

Enrolment in the Computer Science Specialist Program (ASSPE1689).

**Completion Requirements:**

Required Courses:

- MAT235Y1/ MAT237Y1/ MAT257Y1,
- 1.5 FCEs from the following: CSC336H1, CSC436H1, CSC446H1, CSC456H1, CSC466H1
- 1.0 FCE from the following: CSC320H1/ CSC418H1, CSC311H1/ CSC411H1, CSC343H1, CSC384H1, CSC358H1/ CSC458H1

Suggested Related Courses:

It is also recommended that students in this focus consider taking a half-course or two from the basic sciences (such as physics, chemistry, biology), as these sciences are the source of many problems solved by numerical techniques.

### Focus in Theory of Computation - ASFOC1689I

**Description:**

(5.5 FCEs)

Why is it easy to sort a list of numbers, but hard to break Internet encryption schemes? Is finding a solution to a problem harder than checking that a solution is correct? Can we find good approximate solutions, even when the exact solutions seem out of reach? Theory of Computation studies the inherent complexity of fundamental algorithmic problems. On one hand, we develop ground-breaking efficient data structures and algorithms. On the other, we have yet to develop good algorithms for many problems despite decades of effort, and for these problems we strive to prove no time- or space-efficient algorithms will ever solve them. While the field has seen some successful impossibility results, there are still many problems (such as those underlying modern cryptography and security) for which we do not know either efficient algorithms or strong lower bounds!

This focus takes a rigorous, mathematical approach to computational problem-solving: students will gain a deep understanding of algorithm paradigms and measures of problem complexity, and develop the skills necessary to convey abstract ideas with precision and clarity. Many of our students go on to graduate studies and sophisticated algorithmic work in industry. This focus has natural ties with many branches of mathematics and is the foundation of many computer science fields. Consequently, our students often apply their theoretical knowledge to other fields of interest.

We strongly encourage taking the enriched theory courses ( CSC240H1, CSC265H1) as well as specialist/major versions of the MAT requirements for our focus. [Depending on courses selected for points 3 & 4, students may need to complete 0.5–1.0 FCE in addition to the 12.0 FCEs required to complete the Specialist program.]

**Enrolment Requirements:**

Enrolment in the Computer Science Specialist Program (ASSPE1689).

**Completion Requirements:**

Required Courses:

- MAT137Y1/ MAT157Y1/ MAT237Y1 (Note: If MAT237Y1 is used here, it cannot be counted as part of the 2.0 FCEs for point 4, below.)
- CSC463H1
- 2.0 FCEs from the following: CSC304H1, CSC336H1, CSC438H1, CSC448H1, CSC473H1; MAT309H1, MAT332H1, MAT344H1; at UTM: MAT302H5; graduate courses: CSC2221H1, CSC2401H1, CSC2410H1, CSC2412H1, CSC2420H1, CSC2421H1, CSC2426H1, CSC2451H1, CSC2556H1 (note that students must petition to take a graduate course)
- 2.0 FCEs from the following: APM236H1/ MIE262H1, MIE263H1, APM421H1, APM461H1, MAT224H1/ MAT247H1, MAT237Y1/ MAT257Y1, MAT244H1/ MAT267H1, MAT301H1/ MAT347Y1, MAT315H1, MAT327H1, MAT334H1/ MAT354H1, MAT335H1, MAT337H1/ MAT357H1, any 400-level MAT course, STA248H1/ STA261H1, STA347H1

Notes:

- Students who complete an independent study project ( CSC494H1/ CSC495H1) under the supervision of a faculty member from the Theory group may request to substitute one of CSC494H1/ CSC495H1 for one of the courses in list 3 above. This request must be made directly to the department's Undergraduate Office.
- Students who complete a graduate Topics course in Theory may request to count it towards the completion of list 3 above. This request must be made directly to the department's Undergraduate Office.

Recommended Courses:

### Focus in Web and Internet Technologies - ASFOC1689J

**Description:**

(3.5 FCEs)

The Web and Internet Technologies focus introduces students to the systems and algorithms that power today's large-scale web and Internet applications such as search engines, social networking applications, web data mining applications, and content distribution networks. The focus covers the algorithm foundations of web and internet technologies, as well as implementation and system architecture.

Students who wish to pursue the Focus in Web and Internet Technologies should have a solid understanding of statistics, be good programmers, and have a good understanding of data structures and algorithm design.

To get practical experience, students pursuing the web and Internet technologies focus are encouraged to do either a term project or a summer USRA project in web and internet technologies.

**Enrolment Requirements:**

Enrolment in the Computer Science Specialist Program (ASSPE1689).

### Computer Science Major (Science Program) - ASMAJ1689

**Enrolment Requirements:**

This is a limited enrolment program. To be eligible to submit an application, students must have completed at least 4.0 FCEs including CSC148H1 (with a minimum grade of 70%) and CSC165H1/ CSC240H1 (with a minimum grade of 70%). Students will be assessed based on a competitive average across these courses, and a supplemental application which will be considered alongside their academic results.

Important:

- Requests for admission will be considered in the first program request period only. For detailed program enrolment instructions and application deadlines for restricted programs please click here.
- Due to the limited enrolment nature of this program students are strongly advised to plan to enroll in backup programs.
- Students admitted to the program after second or third year will be required to pay retroactive deregulated program fees.

**Completion Requirements:**

(8.0 full course equivalents [FCEs], including at least 0.5 FCE at the 400-level)

*First year* (2.5 FCEs):

1. CSC108H1, CSC148H1, CSC165H1/ CSC240H1; MAT137Y1/ MAT157Y1/( MAT135H1, MAT136H1)

Notes:

- Students with a strong background in an object-oriented language such as Python, Java or C++ may omit CSC108H1 and proceed directly with CSC148H1. [There is no need to replace the missing half-credit for program completion; however, please base your course choice on what you are ready to take, not on “saving” a half-credit].
- CSC240H1 is an accelerated and enriched version of CSC165H1 plus CSC236H1, intended for students with a strong mathematical background, or who develop an interest after taking CSC165H1. If you take CSC240H without CSC165H1, there is no need to replace the missing half-credit for program completion; but please see Note (a).
- Consult the Undergraduate Office for advice about choosing among CSC108H1 and CSC148H1, and between CSC165H1 and CSC240H1.
- We recommend that students take MAT137Y1 or MAT157Y1, as they have been determined to provide the best preparation for upper-year courses in computer science and benefit students in CSC165H1/ CSC240H1. Similarly, we recommend MAT223H1 or MAT240H1, if students choose one of these options in their later years.

*Second year* (2.5 FCEs):

2. CSC207H1, CSC236H1/ CSC240H1, CSC258H1, CSC263H1/ CSC265H1; STA247H1/ STA255H1/ STA257H1

*Later years* (3.0 FCEs):

3. 3.0 FCEs from the following:

- Any 200-/300-/400-level CSC course;
- BCB410H1, BCB420H1, BCB330Y1/ BCB430Y1;
- ECE385H1, ECE489H1;
- MAT223H1/ MAT240H1/ MAT221H1, MAT235Y1/ MAT237Y1/ MAT257Y1, any 300-/400-level MAT course except MAT329Y1, MAT390H1, MAT391H1

with at least 0.5 FCE from a 400-level CSC/BCB course, at least 1.0 additional FCE from 300-/400-level CSC/BCB/ECE courses, and at least 0.5 additional FCE from a 300-/400-level course.

No more than 1.0 FCE from CSC490H1, CSC491H1, CSC494H1, CSC495H1, BCB330Y1/ BCB430Y1 may be used to fulfill program requirements.

The choices in 3 must satisfy the requirement for an integrative, inquiry-based activity by including one of the following half-courses: CSC301H1, CSC318H1, CSC404H1, CSC311H1/ CSC411H1, CSC418H1, CSC420H1, CSC428H1, CSC454H1, CSC485H1, CSC490H1, CSC491H1, CSC494H1, CSC495H1. This requirement may also be met by participating in the PEY (Professional Experience Year) program. Transfer credits cannot comprise more than 1.0 FCE at the 300-/400-level, and cannot be used to satisfy the requirement for an integrative, inquiry-based activity. In addition, transfer credits cannot be used to satisfy the requirement for 0.5 FCE at the 400-level in CSC/BCB.

### Computer Science Minor (Science Program) - ASMIN1689

**Enrolment Requirements:**

This is a limited enrolment program. To be eligible to submit an application, students must have completed at least 4.0 FCEs including CSC148H1 (with a minimum grade of 70%) and CSC165H1/ CSC240H1 (with a minimum grade of 70%). Students will be assessed based on a competitive average across these courses, and a supplemental application which will be considered alongside their academic results.

Important:

- Due to the limited enrolment nature of this program students are strongly advised to plan to enroll in backup programs

**Completion Requirements:**

(4.0 full course equivalents [FCEs])

1. CSC108H1/ CSC120H1, CSC148H1, CSC165H1/ CSC240H1

Notes:

- Students with a strong background in Java or C++ may omit CSC108H1 and proceed directly with CSC148H1.
- CSC240H1 is an accelerated and enriched version of CSC165H1 plus CSC236H1, intended for students with a strong mathematical background, or who develop an interest after taking CSC165H1.
- Consult the Undergraduate Office for advice about choosing among CSC108H1 and CSC148H1, and between CSC165H1 and CSC240H1.

2. CSC207H1, CSC236H1/ CSC240H1

(Total of above requirements: 2.5 FCEs. If you take fewer than 2.5 FCEs, you must take more than 1.5 FCEs from the next list, so that the total is 4.0 FCEs.)

3. 1.5 FCEs from the following list, of which at least 1.0 FCE must be at the 300-/400-level:

- CSC: any 200-/300-/400-level

Note:

- Computer Science Minors are limited to three 300-/400-level CSC/ECE half-courses.
- Transfer credits cannot comprise more than 0.5 FCE at the 300-/400-level.

**Changes to 2020 Enrolment Process:**

In the past, Computer Science has accepted courses equivalent to CSC148H1 and CSC165H1/CSC240H1 when considering applications to Computer Science programs. Beginning in 2020, only grades from CSC148H1 and CSC165H1/CSC240H1 will be accepted for purposes of application to the Computer Science Specialist, Major and Minor and the Data Science Specialist. However, equivalent courses will be accepted for purposes of prerequisites for course enrolment.

**Advice on choosing courses towards a Major in Computer Science**

A Major program in any discipline may form part (but not the whole) of your degree requirements. The Major program in Computer Science is designed to include a solid grounding in the essentials of Computer Science, followed by options that let you explore one or a few topics more deeply. You will also realize what areas you have not studied, and be ready to explore them if your interests change after completing the Major.

To give you freedom to choose your path through Computer Science, we have designed the Major to include a minimal set of required courses. There are some courses that we think you ought to consider carefully as you make those choices. CSC373H1 is fundamental to many more advanced Computer Science topics, where designing appropriate algorithms is central. CSC209H1 is a prerequisite to effective work in many application areas.

We have designed “packages” of related courses that are intended to accompany the Specialist program in Computer Science, and you may find them helpful in completing your Major too. Please see our web site at http://web.cs.toronto.edu/program/ugrad.htm

A significant role of the Major is to allow you to integrate your studies in Computer Science and another discipline. For example, many Computer Science students are also interested in statistics, economics, physics or mathematics. In those cases, it makes sense to enrol in a Major in one discipline and either a Major or a Specialist in the other. If your interests are evenly balanced, the obvious choice is to do two Majors, and that is what we assume here.

If you are doing a double Major (two Majors in related disciplines), you might want to consult your college registrar’s office for advice on satisfying the degree requirements with overlapping Majors. A number of sample combinations are listed below for your reference. This is not a complete list: many other combinations are possible.

A Major program is generally not enough to prepare you for graduate study in Computer Science, though a complete Specialist is not required. Please consult the advice about graduate study included with the description of the Specialist program in Computer Science.

**CSC and Mathematics**

The theoretical foundations of Computer Science are essentially a branch of mathematics, and numerical analysis (the area of CS that studies efficient, reliable and accurate algorithms for the numerical solution of continuous mathematical problems) is also a topic in applied mathematics. If you are interested in both Computer Science and Mathematics, a double major is a good choice.

In this double major, you should choose all the theoretical courses in the first three years: CSC165H1, CSC236H1, CSC263H1, CSC373H1, and CSC463H1. If the "enriched" versions are available as alternatives, you should prefer them: CSC240H1 in place of CSC165H1 and CSC236H1, and CSC265H1 in place of CSC263H1. You should also take at least one of CSC438H1, CSC448H1, CSC465H1 and CSC473H1.

You should also make sure you take courses in numerical analysis -- CSC336H1 and CSC436H1, and possibly CSC446H1.

In the Major in Mathematics, you should prefer courses that are also in the Specialist program in Mathematics: MAT157Y1, MAT240H1, MAT247H1 and so on. Ask the advisors in the Department of Mathematics which courses they would recommend if you're planning a career in mathematics. Don't be afraid to admit your interest in CS.

**CSC and Bioinformatics/Computational Biology**

Bioinformatics is a field that came into existence only in the 1990s but has become an extremely fruitful interaction between biological scientists and computer scientists. Deciphering the genome requires not just extremely clever biology but also extremely clever computer science, drawing from the study of algorithms and data structures and from data mining.

To study bioinformatics, you should enrol in the Specialist program in Bioinformatics and Computational Biology sponsored by the Department of Biochemistry, and also in the Major in Computer Science. Your Computer Science Major should include a selection of courses something like this:

CSC373H1

CSC321H1/CSC343H1

CSC336H1/CSC436H1

BCB410H1, BCB420H1

CSC311H1

Some of CSC310H1, CSC324H1, CSC412H1, CSC456H1, CSC463H1

You should seek advice from both the Department of Biochemistry and the Department of Computer Science on how to distribute your courses across the two programs.

**CSC and Statistics**

Here your Computer Science course choices should be somewhat similar to those for Computer Science and Mathematics: take the theoretical Computer Science courses up to the 300-level, and prefer the higher-level MAT and STA courses. For example, take STA257H1 and STA261H1 rather than STA247H1 and STA248H1.

Within Computer Science, take courses in numerical analysis (CSC336H1 and CSC436H1). Choose also from among information theory (CSC310H1), machine learning (CSC321H1 and CSC411H1), and natural language processing (CSC401H1).

**CSC and Economics**

There is considerable opportunity for mutually supporting interests in Computer Science and economics in the area of economic modelling, econometrics, and numerical analysis. In Computer Science, you might choose courses such as CSC343H1 (databases), CSC358H1 (networks), and CSC369H1 (operating systems) to acquire the technical background for working with large systems and data sets, and CSC336H1 and CSC436H1(numerical analysis) to understand the difficulties of large numerical models.

If you are interested in financial modelling, you will also want to take CSC446H1 to learn how to handle partial differential equations; to do that, you would want to have taken the necessary mathematical courses.

Applying ideas from economics to Computer Science is a little harder, but certainly economic principles apply to databases (CSC443H1) and networks (CSC458H1). CSC358H1 discusses how to model the processes involved in computer networks and in other customer-server systems. CSC304H1(Algorithmic Game Theory and Mechanism Design) and CSC454H1 (Business of Software) would also complement your background in economics.

**CSC and Linguistics**

If you are interested in both Computer Science and Linguistics, you should consider doing a Major in both. Your Major in Computer Science should focus on computational linguistics (CL), the sub-area of AI concerned with human languages (“natural languages”); researchers in this area are interested in developing programs that can “understand” and generate natural language. You should take our Computational Linguistics courses, CSC401H1 and CSC485H1. (They can be taken in either order.) As preparation, you should also take CSC324H1 (programming languages). Other courses you might find valuable are CSC384H1 (AI), CSC343H1 (databases), and the theoretical courses CSC373H1 and CSC463H1.

**CSC and Physics**

If you want to study Computer Science and physics, then as a physicist, you will be interested in how natural processes and human design can take us from the materials and laws of nature to useful computational machinery, and you will want to study CSC258H1 (computer organization—the way solid-state devices can be combined to build a machine that repeatedly executes instructions) and CSC369H1 (operating systems—the large software systems that organize the programs people write and run to present the appearance of a well-run self-policing machine).

As a computer scientist, you will wonder how accurately you can compute the results of calculations needed in simulating or predicting physical processes. CSC336H1 and CSC436H1 introduce you to numerical analysis, and CSC446H1 applies it to partial differential equations, used to model many physical systems.

Both a computer scientist and a physicist will wonder how to write effective programs. CSC263H1 and CSC373H1 teach you to choose appropriate data structures and algorithms, and CSC463H1 helps you to understand whether a problem is computable, and if so, whether the computation takes a reasonable amount of time.

In fourth year, you may choose CSC418H1, which depends on and also simulates the behaviour of light and mechanical systems. CSC456H1 deals with high-performance computing of the kind used in scientific computing. CSC420H1 might also be a good choice, though some preparation in artificial intelligence would be helpful for this course.

## Regarding Computer Science Courses

**Enrolment notes**

1. The University of Toronto Mississauga and University of Toronto Scarborough Computer Science Minor subject POSts are not recognized as restricted Computer Science programs for St. George course enrolments.

2. No late registration is permitted in any Computer Science course after the first two weeks of classes. Enrolment in most Computer Science courses above 100-level MAY be restricted. Consult the Calendar or the Arts & Science Registration Instructions and Timetable for details.

3. Students not enrolled in the Computer Science Major or Specialist programs are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Prerequisites and exclusions**

Prerequisites and exclusions for all courses are strictly enforced. Prerequisite waivers can be granted by instructors if the student demonstrates that s/he has background covering the material of the prerequisite course(s).

Please refer to the Arts & Science Registration Instructions and Timetable for prerequisite waiver deadlines.

**Dropping down from enriched to regular courses**

Students may go to their college to drop down from enriched courses to regular courses. The courses are as follows: from CSC148H1 to CSC108H1, from CSC240H1 to CSC165H1 (or to CSC236H1 if you have already passed CSC165H1 with at least 60%), and from CSC265H1 to CSC263H1. Students may only drop down if there is space in the course into which they are moving.

Drop down deadlines:

20189, Fall session: October 4, 2019

20191, Winter session: January 31, 2020

**Students with transfer credits**

If you have transfer credits in Computer Science, or a similar subject, for courses done at another university or college, contact our Undergraduate Office (BA4290) for advice on choosing courses. Also ask for advice even if you don’t have transfer credits yet but are considering degree study at the University of Toronto. Without advice, you risk poor course choice or other adverse consequences.

**First -Year Foundation Seminars**

First-Year Foundation Seminars are open only to newly-admitted, Faculty of Arts & Science students (3.5 credits or less). They are full-credit or half-credit courses that focus on discussion of issues, questions and controversies surrounding a particular discipline (or several disciplines) in a small-group setting that encourages the development of critical thinking, writing skills, oral presentation and research methods. FYF seminars are as rigorous and demanding as any other first-year course and require in addition the acquisition of those skills expected of successful undergraduate students. With a maximum enrolment of 30 students each, they are an ideal way to have an enjoyable and challenging small-class experience in your first year.

First-Year Foundation Seminars:

- Count as 1.0 or 0.5 of the 20 credits required for an Hon. B.A., Hon B.Sc. or B. Com.

- Can be counted towards the breadth requirement.

**Choosing first year courses**

To help you select the programming course that is right for you, see http://web.cs.toronto.edu/program/ugrad/courses_ug/1st.htm

## Computer Science Courses

### CSC104H1 - Computational Thinking

**Hours:**24L/12T

Humans have solved problems for millennia on computing devices by representing data as diverse numbers, text, images, sound and genomes, and then transforming the data. A gentle introduction to designing programs (recipes) for systematically solving problems that crop up in diverse domains such as science, literature, and graphics. Social and intellectual issues raised by computing. Algorithms, hardware, software, operating systems, the limits of computation.

Note: you may not take this course concurrently with any Computer Science course, but you may take CSC108H1/CSC148H1 after CSC104H1.

**Exclusion:**Any Computer Science course

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC108H1 - Introduction to Computer Programming

**Hours:**36L

Programming in a language such as Python. Elementary data types, lists, maps. Program structure: control flow, functions, classes, objects, methods. Algorithms and problem solving. Searching, sorting, and complexity. Unit testing. No prior programming experience required.

NOTE: You may not take this course concurrently with CSC120H1/CSC148H1, but you may take CSC148H1 after CSC108H1.

**Exclusion:**CSC120H1, CSC121H1, CSC148H1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC120H1 - Computer Science for the Sciences

**Hours:**36L/12P

An introduction to computer science for students in other sciences, with an emphasis on gaining practical skills. Introduction to programming with examples and exercises appropriate to the sciences; web programming; software tools. Topics from: database design, considerations in numerical calculation, using UNIX/LINUX systems. At the end of this course you will be able to develop computer tools for scientific applications, such as the structuring and analysis of experimental data. With some additional preparation, you will also be ready to go on to CSC148H1. Practical (P) sections consist of supervised work in the computer laboratory. No programming experience is necessary.

**Exclusion:**Any CSC course, with the exception of CSC104H1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC121H1 - Computer Science for Statistics

**Hours:**36L/12P

An introduction to computer science for students planning to use computers for statistical analysis and research. Using a statistical programming environment, fundamental programming concepts, and computational topics relevant to statistics, such as issues with numerical calculation, random number generation, and management of data. Practicals consist of supervised work in the computer laboratory to reinforce concepts and develop programming skills. No previous programming experience is necessary. Please consult with the CS Undergraduate office if you intend to continue on to CSC148H1.

**Exclusion:**Any CSC course, with the exception of CSC104H1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC148H1 - Introduction to Computer Science

**Hours:**36L/24P

Abstract data types and data structures for implementing them. Linked data structures. Encapsulation and information-hiding. Object-oriented programming. Specifications. Analyzing the efficiency of programs. Recursion. This course assumes programming experience as provided by CSC108H1. Students who already have this background may consult the Computer Science Undergraduate Office for advice about skipping CSC108H1. Practical (P) sections consist of supervised work in the computing laboratory. These sections are offered when facilities are available, and attendance is required. NOTE: Students may go to their college to drop down from CSC148H1 to CSC108H1. See above for the drop down deadline.

**Prerequisite:**CSC108H1/(equivalent programming experience)

**Exclusion:**CSC207H1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC165H1 - Mathematical Expression and Reasoning for Computer Science

**Hours:**36L/12T

Introduction to abstraction and rigour. Informal introduction to logical notation and reasoning. Understanding, using and developing precise expressions of mathematical ideas, including definitions and theorems. Structuring proofs to improve presentation and comprehension. General problem-solving techniques. Running time analysis of iterative programs. Formal definition of Big-Oh. Diagonalization, the Halting Problem, and some reductions. Unified approaches to programming and theoretical problems.

**Corequisite:**CSC108H1/ CSC120H1/(equivalent programming experience)

**Exclusion:**CSC236H1, CSC240H1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC197H1 - What, Who, How: Privacy in the Age of Big Data Collection

**Hours:**24S

The rapid advance of technology has brought remarkable changes to how we conduct our daily lives, from how we communicate, consume news and data, and purchase goods. As we increase our online activity, so too do we increase the amount of personal data that we're sharing, often without realizing it. The questions of exactly what data is being collected, who is collecting and accessing this data, and how this data is being used, have significant implications for both individuals and our larger social and political institutions. Organized by a wide variety of case studies drawn from current events, we'll study how personal data can be collected and tracked, how personal and social factors may influence our own decisions about whether and how much to share our data, and what broader political and legal tools are used to either protect or subvert individual privacy. Restricted to first-year students. Not eligible for CR/NCR option.

**Distribution Requirements:**Social Science

**Breadth Requirements:**Society and its Institutions (3)

### CSC198H1 - Computing for Science

**Hours:**48L

Computational skills for the modern practice of basic and applied science. Applied computer programming with an emphasis on practical examples related to the simulation of matter, drawing from scientific disciplines including chemistry, biology, materials science, and physics. Studio format with a mixture of lecture, guided programming, and open scientific problem solving. Students will be exposed to Python numerical and data analysis libraries. Restricted to first-year students. Not eligible for CR/NCR option.

**Exclusion:**Any CSC course, except CSC104H1

**Recommended Preparation:**We recommend students also be enrolled in CHM151H1, PHY151H1, or another science course

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC199H1 - Intelligence, Artificial and Human

**Hours:**24S

What is human intelligence? How close are we to replicating it? How productive/reductive is the brain-computer analogy? What ethical challenges are posed by AI on workers, society, and the environment? Can we put a hold on "progress"? Is Silicon Valley the seat of a new techno-religion? What can they teach us about today's research priorities? What insight (or inspiration) can we get from works of science fiction about the future of human-AI interaction? Through reading discussion, written assignment, and workshops, this seminar will present students with the opportunity to integrate their computer science interests with philosophy, history, and literature. *There is an equivalent course offered by St. Michael’s College. Students may take one or the other but not both. *Restricted to first-year students. Not eligible for CR/NCR option.

**Exclusion:**SMC199H1 (Intelligence, Artificial and Human)

**Distribution Requirements:**Science

**Breadth Requirements:**Society and its Institutions (3)

### CSC204H1 - Collaborating with Computer Scientists

**Hours:**48L/24P

This course teaches the language, culture, and communication mechanisms necessary for effective collaboration on large-scale software projects involving both computer scientists and non-computer scientists. This course is intended for students with little or no computer science background.

**Distribution Requirements:**Humanities

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC207H1 - Software Design

**Hours:**24L/12T

An introduction to software design and development concepts, methods, and tools using a statically-typed object-oriented programming language such as Java. Topics from: version control, unit testing, refactoring, object-oriented design and development, design patterns, advanced IDE usage, regular expressions, and reflection. Representation of floating-point numbers and introduction to numerical computation.

**Prerequisite:**60% or higher in CSC148H1 (Please note: The minimum prerequisite grade in CSC148H1 is lower than the minimum grade for program admission in Computer Science. If you take this course when your grade in CSC148H1 is lower than the requirement for program admission, you will be unable to enrol in a Computer Science program. If you hope to enrol in a Computer Science program in future, please ensure that you satisfy the program admission grade requirements in CSC148H1 before completing CSC207H1.)

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC209H1 - Software Tools and Systems Programming

**Hours:**24L/12T

Software techniques in a Unix-style environment, using scripting languages and a machine-oriented programming language (typically C). What goes on in the operating system when programs are executed. Core topics: creating and using software tools, pipes and filters, file processing, shell programming, processes, system calls, signals, basic network programming.

**Prerequisite:**CSC207H1

**Exclusion:**CSC372H1, CSC369H1, CSC469H1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC236H1 - Introduction to the Theory of Computation

**Hours:**24L/12T

The application of logic and proof techniques to Computer Science. Mathematical induction; correctness proofs for iterative and recursive algorithms; recurrence equations and their solutions; introduction to automata and formal languages. This course assumes university-level experience with proof techniques and algorithmic complexity as provided by CSC165H1. Very strong students who already have this experience (e.g. successful completion of MAT157Y1) may consult the undergraduate office about proceeding directly into CSC236H1 or CSC240H1.

**Prerequisite:**60% or higher in CSC148H1, 60% or higher in CSC165H1 (Please note: The minimum prerequisite grade in CSC148H1 and CSC165H1/ CSC240H1 is lower than the minimum grade for program admission in Computer Science. If you take this course when your grade in CSC165H1/ CSC240H1 is lower than the requirement for program admission, you will be unable to enrol in a Computer Science program. If you hope to enrol in a Computer Science program in future, please ensure that you satisfy the program admission grade requirements in CSC165H1/ CSC240H1 before completing CSC236H1. Students will not be permitted to retake CSC165H1 after completing CSC236H1.)

**Exclusion:**CSC240H1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC240H1 - Enriched Introduction to the Theory of Computation

**Hours:**24L/12T

The rigorous application of logic and proof techniques to Computer Science. Propositional and predicate logic; mathematical induction and other basic proof techniques; correctness proofs for iterative and recursive algorithms; recurrence equations and their solutions (including the Master Theorem); introduction to automata and formal languages. This course covers the same topics as CSC236H1, together with selected material from CSC165H1, but at a faster pace, in greater depth and with more rigour, and with more challenging assignments. Greater emphasis will be placed on proofs and theoretical analysis. Certain topics briefly mentioned in CSC165H1 or CSC236H1 may be covered in more detail in this course, and some additional topics may also be covered.

NOTES:

- If you completed CSC165H1 with a course grade less than 85, you should take CSC236H1 instead of CSC240H1.
- Students may go to their college to drop down from CSC240H1 to CSC165H1 (or to CSC236H1 if they have already passed CSC165H1). See note in Calendar Section for the drop down deadlines.

**Corequisite:**CSC148H1; MAT137Y1/ MAT157Y1

**Exclusion:**CSC236H1, CSC263H1/ CSC265H1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC258H1 - Computer Organization

**Hours:**24L/12T/13P

Computer structures, machine languages, instruction execution, addressing techniques, and digital representation of data. Computer system organization, memory storage devices, and microprogramming. Block diagram circuit realizations of memory, control and arithmetic functions. There are a number of laboratory periods in which students conduct experiments with digital logic circuits.

**Prerequisite:**60% or higher in CSC148H1, 60% or higher in CSC165H1/ CSC240H1 (Please note: The minimum prerequisite grades in CSC148H1 and CSC165H1/ CSC240H1 are lower than the minimum grades for program admission in Computer Science. If you take this course when your grade in CSC148H1 or CSC165H1/ CSC240H1 is lower than the requirement for program admission, you will be unable to enrol in a Computer Science program. If you hope to enrol in a Computer Science program in future, please ensure that you satisfy the program admission grade requirements in CSC148H1 and CSC165H1/ CSC240H1 before completing CSC258H1.)

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC263H1 - Data Structures and Analysis

**Hours:**24L/12T

Algorithm analysis: worst-case, average-case, and amortized complexity. Expected worst-case complexity, randomized quicksort and selection. Standard abstract data types, such as graphs, dictionaries, priority queues, and disjoint sets. A variety of data structures for implementing these abstract data types, such as balanced search trees, hashing, heaps, and disjoint forests. Design and comparison of data structures. Introduction to lower bounds.

**Prerequisite:**CSC207H1, CSC236H1/ CSC240H1; STA247H1/ STA255H1/ STA257H1

**Exclusion:**CSC265H1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC265H1 - Enriched Data Structures and Analysis

**Hours:**24L/12T

This course covers the same topics as CSC263H1, but at a faster pace, in greater depth and with more rigour, and with more challenging assignments. Greater emphasis will be placed on proofs, theoretical analysis, and creative problem-solving. Certain topics briefly mentioned in CSC263H1 may be covered in more detail in this course, and some additional topics may also be covered. Students without the exact course prerequisites but with a strong mathematical background are encouraged to consult the Department about the possibility of taking this course.

NOTE: Students may go to their college to drop down from CSC265H1 to CSC263H1. See above for the drop down deadline.

**Prerequisite:**CSC240H1 or an A- in CSC236H1

**Corequisite:**STA247H1/ STA255H1/ STA257H1

**Exclusion:**CSC263H1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### JSC270H1 - Data Science I

**Hours:**24L/24P

This course is restricted to students in the Data Science Specialist program. Data exploration and preparation; data visualization and presentation; and computing with data will be introduced. Professional skills, such as oral and written communication, and ethical skills for data science will be introduced. Data science workflows will be integrated throughout the course. These topics will be explored through case studies and collaboration with researchers in other fields.

**Prerequisite:**STA257H1, CSC207H1

**Corequisite:**STA261H1, MAT237Y1/ MAT257Y1, CSC236H1/ CSC240H1

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC300H1 - Computers and Society

**Hours:**24L/12T

Privacy and Freedom of Information; recent Canadian legislation and reports. Computers and work; employment levels, quality of working life. Electronic fund transfer systems; transborder data flows. Computers and bureaucratization. Computers in the home; public awareness about computers. Robotics. Professionalism and the ethics of computers. The course is designed not only for science students, but also those in social sciences or humanities.

**Prerequisite:**Any half-course on computing

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**Society and its Institutions (3)

### CSC301H1 - Introduction to Software Engineering

**Hours:**24L/12T

An introduction to agile development methods appropriate for medium-sized teams and rapidly-moving projects. Basic software development infrastructure; requirements elicitation and tracking; estimation and prioritization; teamwork skills; basic UML; design patterns and refactoring; security, discussion of ethical issues, and professional responsibility.

**Prerequisite:**CSC209H1, CSC263H1/ CSC265H1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC302H1 - Engineering Large Software Systems

**Hours:**24L/12T

An introduction to the theory and practice of large-scale software system design, development, and deployment. Project management; advanced UML; reverse engineering; requirements inspection; verification and validation; software architecture; performance modelling and analysis.

**Prerequisite:**CSC301H1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC303H1 - Social and Information Networks

**Hours:**24L/12T

A course on how networks underlie the social, technological, and natural worlds, with an emphasis on developing intuitions for broadly applicable concepts in network analysis. Topics include: introductions to graph theory, network concepts, and game theory; social networks; information networks; the aggregate behaviour of markets and crowds; network dynamics; information diffusion; popular concepts such as "six degrees of separation," the "friendship paradox," and the "wisdom of crowds."

**Prerequisite:**CSC263H1/ CSC265H1, STA247H1/ STA255H1/ STA257H1/ ECO227Y1, MAT221H1/ MAT223H1/ MAT240H1

**Exclusion:**CSCC46H3. NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC304H1 - Algorithmic Game Theory and Mechanism Design

**Hours:**24L/12P

A mathematical and computational introduction to game theory and mechanism design. Analysis of equilibria in games and computation of price of anarchy. Design and analysis mechanisms with monetary transfers (such as auctions). Design and analysis of mechanisms without monetary transfers (such as voting and matching). This course is intended for economics, mathematics, and computer science students.

**Prerequisite:**STA247H1/ STA255H1/ STA257H1/ PSY201H1/ ECO227Y1, ( MAT135H1, MAT136H1)/ MAT137Y1/ MAT157Y1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Recommended Preparation:**MAT223H1, CSC373H1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC309H1 - Programming on the Web

**Hours:**24L/12T

An introduction to software development on the web. Concepts underlying the development of programs that operate on the web; survey of technological alternatives; greater depth on some technologies. Operational concepts of the internet and the web, static client content, dynamic client content, dynamically served content, n-tiered architectures, web development processes, and security on the web. Assignments involve increasingly more complex web-based programs. Guest lecturers from leading e-commerce firms will describe the architecture and operation of their web sites.

**Prerequisite:**CSC209H1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Recommended Preparation:**CSC343H1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC311H1 - Introduction to Machine Learning

**Previous Course Number:**CSC411H1

**Hours:**24L/12T

An introduction to methods for automated learning of relationships on the basis of empirical data. Classification and regression using nearest neighbour methods, decision trees, linear models, and neural networks. Clustering algorithms. Problems of overfitting and of assessing accuracy. Basics of reinforcement learning.

**Prerequisite:**CSC207H1, MAT235Y1/ MAT237Y1/ MAT257Y1/(minimum of 77% in MAT135H1 and MAT136H1)/(minimum of 73% in MAT137Y1)/(minimum of 67% in MAT157Y1), MAT221H1/ MAT223H1/ MAT240H1, STA247H1/ STA255H1/ STA257H1

**Exclusion:**CSC411H1, STA314H1, ECE421H1. NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Recommended Preparation:**MAT235Y1/ MAT237Y1/ MAT257Y1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC318H1 - The Design of Interactive Computational Media

**Hours:**24L/12T

User-centred design of interactive systems; methodologies, principles, and metaphors; task analysis. Interdisciplinary design; the role of graphic design, industrial design, and the behavioural sciences. Interactive hardware and software; concepts from computer graphics. Typography, layout, colour, sound, video, gesture, and usability enhancements. Classes of interactive graphical media; direct manipulation systems, extensible systems, rapid prototyping tools. Students work on projects in interdisciplinary teams.

**Prerequisite:**Any CSC half-course

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Recommended Preparation:**CSC300H1 provides useful background for work in CSC318H1, so if you plan to take CSC300H1 then you should do it before CSC318H1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC320H1 - Introduction to Visual Computing

**Hours:**24L/12P

Image synthesis and image analysis aimed at students with an interest in computer graphics, computer vision, or the visual arts. Focus on three major topics: (1) visual computing principles—computational and mathematical methods for creating, capturing, analyzing, and manipulating digital photographs (image acquisition, basic image processing, image warping, anti-aliasing); (2) digital special effects—applying these principles to create special effects found in movies and commercials; (3) visual programming—using C/C++ and OpenGL to create graphical user interfaces for synthesizing and manipulating photographs. The course requires the ability to use differential calculus in several variables and linear algebra.

**Prerequisite:**CSC209H1/( CSC207H1, proficiency in C or C++); MAT221H1/ MAT223H1/ MAT240H1, ( MAT136H1 with a minimum mark of 77)/( MAT137Y1 with a minimum mark of 73)/( MAT157Y1 with a minimum mark of 67)/ MAT235Y1/ MAT237Y1/ MAT257Y1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Recommended Preparation:**MAT235Y1/ MAT237Y1/ MAT257Y1

**Distribution Requirements:**Science

### CSC324H1 - Principles of Programming Languages

**Hours:**24L/12T

Programming principles common in modern languages; details of commonly used paradigms. The structure and meaning of code. Scope, control flow, datatypes, and parameter passing. Two non-procedural, non-object-oriented programming paradigms: functional programming (illustrated by languages such as Lisp/Scheme, ML or Haskell) and logic programming (typically illustrated in Prolog).

**Prerequisite:**CSC263H1/ CSC265H1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC336H1 - Numerical Methods

**Hours:**24L/12T

The study of computational methods for solving problems in linear algebra, non-linear equations, and approximation. The aim is to give students a basic understanding of both floating-point arithmetic and the implementation of algorithms used to solve numerical problems, as well as a familiarity with current numerical computing environments.

**Prerequisite:**CSC148H1; MAT133Y1(70%)/( MAT135H1, MAT136H1)/ MAT135Y1/ MAT137Y1/ MAT157Y1, MAT221H1/ MAT223H1/ MAT240H1

**Exclusion:**CSC350H1, CSC351H1. NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC343H1 - Introduction to Databases

**Hours:**36L

Introduction to database management systems. The relational data model. Relational algebra. Querying and updating databases: the query language SQL. Application programming with SQL. Integrity constraints, normal forms, and database design. Elements of database system technology: query processing, transaction management.

**Prerequisite:**CSC165H1/ CSC240H1/( MAT135H1, MAT136H1)/ MAT135Y1/ MAT137Y1/ MAT157Y1; CSC207H1. Prerequisite for Engineering students only: ECE345H1/ ESC190H1/ CSC190H1/ CSC192H1

**Exclusion:**CSC443H1. NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC358H1 - Principles of Computer Networks

**Hours:**24L/12T

Introduction to computer networks with an emphasis on fundamental principles. Basic understanding of computer networks and network protocols. Topics include network hardware and software, routing, addressing, congestion control, reliable data transfer, performance analysis, local area networks, and TCP/IP.

**Prerequisite:**CSC209H1, CSC258H1, CSC263H1/ CSC265H1, STA247H1/ STA255H1/ STA257H1/ ECO227Y1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC367H1 - Parallel Programming

**Hours:**24L/12T

Introduction to aspects of parallel programming. Topics include computer instruction execution, instruction-level parallelism, memory system performance, task and data parallelism, parallel models (shared memory, message passing), synchronization, scalability and Amdahl's law, Flynn taxonomy, vector processing and parallel computing architectures.

**Prerequisite:**CSC258H1, CSC209H1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC369H1 - Operating Systems

**Hours:**24L/12T

Principles of operating systems. The operating system as a control program and as a resource allocator. The concept of a process and concurrency problems: synchronization, mutual exclusion, deadlock. Additional topics include memory management, file systems, process scheduling, threads, and protection.

**Prerequisite:**CSC209H1, CSC258H1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### JSC370H1 - Data Science II

**Hours:**24L/24P

This course is restricted to students in the Data Science Specialist program. Students will learn to identify and answer questions through the application of exploratory data analysis, data visualization, statistical methods or machine learning algorithms to complex data. Software development for data science and reproducible workflows. Communication of statistical information at various technical levels, ethical practice of data analysis and software development, and teamwork skills. Topics will be explored through case studies and collaboration with researchers in other fields.

**Prerequisite:**JSC270H1, STA261H1, MAT237Y1/ MAT257Y1, CSC263H1, STA302H1, CSC343H1

**Corequisite:**STA303H1/ STA305H1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC373H1 - Algorithm Design, Analysis & Complexity

**Hours:**36L/12T

Standard algorithm design techniques: divide-and-conquer, greedy strategies, dynamic programming, linear programming, randomization, network flows, approximation algorithms. Brief introduction to NP-completeness: polynomial time reductions, examples of various NP-complete problems, self-reducibility. Additional topics may include approximation and randomized algorithms. Students will be expected to show good design principles and adequate skills at reasoning about the correctness and complexity of algorithms.

**Prerequisite:**CSC263H1/ CSC265H1

**Exclusion:**CSC375H1. NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC384H1 - Introduction to Artificial Intelligence

**Hours:**24L/12T

Theories and algorithms that capture (or approximate) some of the core elements of computational intelligence. Topics include: search; logical representations and reasoning, classical automated planning, representing and reasoning with uncertainty, learning, decision making (planning) under uncertainty. Assignments provide practical experience, in both theory and programming, of the core topics.

**Prerequisite:**( CSC263H1/ CSC265H1, STA247H1/ STA255H1/ STA257H1)/Permission of the Cognitive Science Director

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Recommended Preparation:**CSC324H1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC385H1 - Microprocessor Systems

**Hours:**24L/12T/36P

Microprocessor and embedded systems: Software techniques for real-time task creation and management. Connected device charachteristics and the hardware and software ramifications. System construction and management. An examination of the issues unique to or particulaly important to embedded computing. Laboratory experiments provide "hands on" experience. An open team project is done in the last few laboratory sessions.

**Prerequisite:**CSC258H1; CSC209H1/proficiency in C

**Exclusion:**CSC372H1, ECE385H1. NOTE: Students who are not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM or UTSC campuses may take a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC396Y0 - Designing Systems for Real World Problems

This Summer Abroad special offering provides students with an opportunity to explore new environments, which improves their ability to see their own world with increased sensitivity and germinates new design ideas. In this course, students will identify a real problem in the world and work in groups on projects addressing this problem. Students will explore their problem space and the people within that space, identify needs, constraints, and requirements, and ultimately design solutions. Their designs will be iterated by gathering feedback and conducting usability testing on the early prototypes. The course projects will culminate with development of a technological solution that addresses the identified problem. Final project presentations will take place at the end of the course. This course can be counted as 0.5 FCE at the 300-level for Computer Science program completion.

**Prerequisite:**Any CSC half course, and balloting

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC399Y1 - Research Opportunity Program

**Hours:**TBA

Credit course for supervised participation in faculty research project. Details at http://www.artsci.utoronto.ca/current/course/rop. Not eligible for CR/NCR option.

### CSC401H1 - Natural Language Computing

**Hours:**24L/12T

Introduction to techniques involving natural language processing and speech in applications such as information retrieval, speech recognition and synthesis, machine translation, summarization, and dialoque. N-grams, corpus analysis, neural methods, and information theory. Python and other software.

**Prerequisite:**CSC207H1/ CSC209H1; STA247H1/ STA255H1/ STA257H1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Recommended Preparation:**MAT221H1/ MAT223H1/ MAT240H1 is strongly recommended

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC404H1 - Introduction to Video Game Design

**Hours:**24L/12T

Concepts and techniques for the design and development of electronic games. History, social issues, and story elements. The business of game development and game promotion. Software engineering, artificial intelligence, and graphics elements. Level and model design. Audio elements. Practical assignments leading to team implementation of a complete game.

**Prerequisite:**CSC301H1/ CSC318H1/ CSC384H1/ CSC418H1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**Creative and Cultural Representations (1)

### CSC410H1 - Software Testing and Verification

**Hours:**24L/12T

Concepts and state-of-the-art techniques in quality assessment for software engineering; quality attributes; formal specifications and their analysis; testing, verification, and validation.

**Prerequisite:**CSC207H1, CSC236H1/ CSC240H1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Recommended Preparation:**CSC330H1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC412H1 - Probabilistic Learning and Reasoning

**Hours:**24L/12T

An introduction to probability as a means of representing and reasoning with uncertain knowledge. Qualitative and quantitative specification of probability distributions using probabilistic graphical models. Algorithms for inference and probabilistic reasoning with graphical models. Statistical approaches and algorithms for learning probability models from empirical data. Applications of these models in artificial intelligence and machine learning.

**Prerequisite:**CSC411H1/CSC311H1/ STA314H1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC413H1 - Neural Networks and Deep Learning

**Previous Course Number:**CSC321H1/CSC421H1

**Hours:**24L/12T

An introduction to neural networks and deep learning. Backpropagation and automatic differentiation. Architectures: convolutional networks and recurrent neural networks. Methods for improving optimization and generalization. Neural networks for unsupervised and reinforcement learning.

**Prerequisite:**CSC311H1/ CSC411H/ STA314H1, MAT235Y1/ MAT237Y1/ MAT257Y1, MAT221H1/ MAT223H1/ MAT240H1

**Exclusion:**CSC321H1/ CSC421H1. NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC418H1 - Computer Graphics

**Hours:**24L/12T

Identification and characterization of the objects manipulated in computer graphics, the operations possible on these objects, efficient algorithms to perform these operations, and interfaces to transform one type of object to another. Display devices, display data structures and procedures, graphical input, object modelling, transformations, illumination models, primary and secondary light effects; graphics packages and systems. Students, individually or in teams, implement graphical algorithms or entire graphics systems.

**Prerequisite:**CSC209H1/proficiency in C or C++, MAT235Y1/ MAT237Y1/ MAT257Y1, MAT221H1/ MAT223H1/ MAT240H1. Prerequisite for Engineering students only: ECE345H1 or ECE352H1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Recommended Preparation:**MAT244H1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC419H1 - Geometry Processing

**Hours:**24L/12T

Extending traditional signal processing, geometry processing interprets three-dimensional curves and surfaces as signals. Just as audio and image signal data can be filtered, denoised and decomposed spectrally, so can the geometry of a three-dimensional curve or surface. The course covers algorithms and mathematics behind fundamental operations for interpreting and manipulating geometric data. These essential tools enable: geometric modeling for computer aided design, life-like animations for computer graphics, reliable physical simulations, and robust scene representations for computer vision. Topics include: discrete curves and surfaces, curvature computation, surface reconstruction from point clouds, surface smoothing and denoising, parameterization, symmetry detection, and animation.

**Prerequisite:**CSC209H1/demonstrated proficiency in C or C++; MAT235Y1/ MAT237Y1/ MAT257Y1; MAT221H1/ MAT223H1/ MAT240H1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Recommended Preparation:**CSC418H1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC420H1 - Introduction to Image Understanding

**Hours:**24L/12P

Introduction to basic concepts in computer vision. Extraction of image features at multiple scales. Robust estimation of model parameters. Multiview geometry and reconstruction. Image motion estimation and tracking. Object recognition. Topics in scene understanding as time permits.

**Prerequisite:**CSC263H1/ CSC265H1, ( MAT135H1, MAT136H1)/ MAT135Y1/ MAT137Y1/ MAT157Y1, MAT221H1/ MAT223H1/ MAT240H1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Recommended Preparation:**CSC320H1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC428H1 - Human-Computer Interaction

**Hours:**24L/12T

Understanding human behaviour as it applies to user interfaces: work activity analysis, observational techniques, questionnaire administration, and unobtrusive measures. Operating parameters of the human cognitive system, task analysis and cognitive modelling techniques and their application to designing interfaces. Interface representations and prototyping tools. Cognitive walkthroughs, usability studies and verbal protocol analysis. Case studies of specific user interfaces.

**Prerequisite:**CSC318H1; STA247H1/ STA255H1/ STA257H1; CSC209H1/proficiency C++ or Java

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Recommended Preparation:**A course in PSY; CSC209H1; ( STA248H1/ STA250H1/ STA261H1)/( PSY201H1, PSY202H1)/( SOC202H1, SOC300H1)

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC436H1 - Numerical Algorithms

**Hours:**24L/12T

Numerical algorithms for the algebraic eigenvalue problem, approximation, integration, and the solution of ordinary differential equations. Emphasis is on the convergence, stability, and efficiency properties of the algorithms.

**Prerequisite:**CSC336H1/ CSC350H1

**Exclusion:**CSC351H1. NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Recommended Preparation:**MAT235Y1/ MAT237Y1/ MAT257Y1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC438H1 - Computability and Logic

**Hours:**24L/12T

Computable functions, Church's thesis, unsolvable problems, recursively enumerable sets. Predicate calculus, including the completeness, compactness, and Lowenheim-Skolem theorems. Formal theories and the Gödel Incompleteness Theorem. Ordinarily offered in years alternating with CSC448H1.

**Prerequisite:**( CSC363H1/ CSC463H1)/ CSC365H1/ CSC373H1/ CSC375H1/ MAT247H1

**Exclusion:**MAT309H1; PHL348H1. NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC443H1 - Database System Technology

**Hours:**24L/12T

Implementation of database management systems. Storage management, indexing, query processing, concurrency control, transaction management. Database systems on parallel and distributed architectures. Modern database applications: data mining, data warehousing, OLAP, data on the web. Object-oriented and object-relational databases.

**Prerequisite:**CSC343H1, CSC369H1, CSC373H1/ CSC375H1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC446H1 - Computational Methods for Partial Differential Equations

**Hours:**24L/12T

Finite Difference and Finite Element methods for boundary value problems including 2-point boundary value problems and 2-dimensional problems. Convergence of methods. Efficiency of the solution of linear systems. Finite difference methods for initial value problems. Consistency, stability and convergence. Method of lines. Special topics of interest among domain decomposition, multigrid, FFT solvers. Ordinarily offered in years alternating with CSC466H1.

**Prerequisite:**CSC351H1/( CSC336H1 (75%))/equivalent mathematical background; MAT237Y1/ MAT257Y1; APM346H1/ MAT351Y1/( MAT244H1/ MAT267H1 and exposure to PDEs)

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC448H1 - Formal Languages and Automata

**Hours:**24L/12T

Regular, deterministic, context free, context sensitive, and recursively enumerable languages via generative grammars and corresponding automata (finite state machines, push down machines, and Turing machines). Topics include complexity bounds for recognition, language decision problems and operations on languages. Ordinarily offered in years alternating with CSC438H1.

**Prerequisite:**CSC236H1/ CSC240H1, CSC263H1/ CSC265H1

**Exclusion:**NOTE: Students who are not enrolled in the Major or Specialist program at the UTSG, UTM or UTSC campuses may take a maximum of three 300-/400-level CSC/ECE half-courses.

**Recommended Preparation:**CSC373H1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC454H1 - The Business of Software

**Hours:**24L/12T

The software and internet industries; principles of operation for successful software enterprises; innovation and entrepreneurship; software business definition and planning; business models, market and product planning; product development, marketing, sales, and support; financial management and financing of high-technology ventures; management, leadership, and partnerships. Students will all write business plans in teams.

**Prerequisite:**Five CSC half-courses at the 200-level or higher

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC456H1 - High-Performance Scientific Computing

**Hours:**24L/12T

Computationally-intensive applications in science and engineering are implemented on the fastest computers available, today composed of many processors operating in parallel. Parallel computer architectures; implementation of numerical algorithms on parallel architectures; performance evaluation. Topics from: matrix-vector product, solution of linear systems, sparse matrices, iterative methods, domain decomposition, Fourier solvers. For students in computer science, applied mathematics, science, engineering. Ordinarily offered in years alternating with CSC446H1.

**Prerequisite:**CSC436H1/( CSC336H1 (75%))/equivalent mathematical background; CSC209H1/proficiency in C, C++, or Fortran

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC458H1 - Computer Networking Systems

**Hours:**24L/12T

Computer networks with an emphasis on network programming and applications. An overview of networking basics: layering, naming, and addressing, packet switching fundamentals, socket programming, protocols, congestion control, routing, network security, wireless networks, multimedia, web 2.0, software-defined networking, and online social networks.

**Prerequisite:**CSC209H1, CSC258H1, CSC263H1/ CSC265H1, STA247H1/ STA255H1/ STA257H1/ ECO227Y1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC463H1 - Computational Complexity and Computability

**Hours:**24L/12P

Introduction to the theory of computability: Turing machines and other models of computation, Church’s thesis, computable and noncomputable functions, recursive and recursively enumerable sets, many-one reductions. Introduction to complexity theory: P, NP, polynomial time reducibility, NP-completeness, self-reducibility, space complexity (L, NL, PSPACE and completeness for those classes), hierarchy theorems, and provably intractable problems.

**Prerequisite:**CSC236H1/ CSC240H1

**Exclusion:**CSC363H1/CSCC63H3, CSC365H1. NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC465H1 - Formal Methods in Software Design

**Hours:**24L/12T

Using mathematics to write error-free programs. Proving each refinement; identifying errors as they are made. Program development to meet specifications; modifications that preserve correctness. Useful for all programming; essential for programs that lives depend on. Basic logic, formal specifications, refinement. Conditional, sequential, parallel, interaction, probabilistic programming, and functional programming.

**Prerequisite:**CSC236H1/ CSC240H1/ MAT309H1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC466H1 - Numerical Methods for Optimization Problems

**Hours:**36L

Numerical methods for unconstrained optimization problems, in particular line search methods and trust region methods. Topics include steepest descent, Newton's method, quasi-Newton methods, conjugate gradient methods and techniques for large problems. This course will normally be offered every other year.

**Prerequisite:**CSC336H1, MAT221H1/ MAT223H1/ MAT240H1, MAT235Y1/ MAT237Y1/ MAT257Y1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC469H1 - Operating Systems Design and Implementation

**Hours:**24L/12T

An in-depth exploration of the major components of operating systems with an emphasis on the techniques, algorithms, and structures used to implement these components in modern systems. Project-based study of process management, scheduling, memory management, file systems, and networking is used to build insight into the intricacies of a large concurrent system.

**Prerequisite:**CSC369H1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### JSC470H1 - Data Science III

**Hours:**24L/24P

This course is **restricted to** students in the Data Science Specialist program. Research topics and applications of data science methods will be explored through case studies and collaboration with researchers in other fields. Data analysis, visualization, and communication of statistical information at various technical levels, ethical practice of data analysis and software development, and teamwork skills.

**Prerequisite:**JSC370H1, STA314H1/ CSC411H1/ CSC311H1, STA303H1/ STA305H1

**Exclusion:**STA490Y1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC473H1 - Advanced Algorithm Design

**Hours:**24L/12P

Advanced algorithm design techniques, with emphasis on the role that geometry, approximation, randomization, and parallelism play in modern algorithms. Examples will be drawn from linear programming and basics of continuous optimization; randomized algorithms for string matching, graph problems, and number theory problems; streaming algorithms and parallel algorithms in the Map-Reduce model.

**Prerequisite:**CSC373H1, MAT221H1/ MAT223H1/ MAT240H1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC485H1 - Computational Linguistics

**Hours:**36L

Computational linguistics and the processing of language by computer. Topics include: context-free grammars; chart parsing, statistical parsing; semantics and semantic interpretation; ambiguity resolution techniques; reference resolution. Emphasis on statistical learning methods for lexical, syntactic, and semantic knowledge.

**Prerequisite:**STA247H1/ STA255H1/ STA257H1; CSC209H1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Recommended Preparation:**CSC324H1/ CSC384H1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC486H1 - Knowledge Representation and Reasoning

**Hours:**24L/12T

Representing knowledge symbolically in a form suitable for automated reasoning, and associated reasoning methods. Topics from: first-order logic, entailment, the resolution method, Horn clauses, procedural representations, production systems, description logics, inheritance networks, defaults and probabilities, tractable reasoning, abductive explanation, the representation of action, planning.

**Prerequisite:**CSC384H1, CSC363H1/ CSC365H1/ CSC373H1/ CSC375H1/ CSC463H1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Recommended Preparation:**CSC330H1

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC488H1 - Compilers and Interpreters

**Hours:**24L/12T

The structure of compilers, Programming language processing. Scanning based on regular expressions, Parsing using context free grammars, Semantic analysis (type and usage checking), Compiler dictionaries and tables. Runtime organization and storage allocation, code generation, optimization. Use of modern compiler building tools. Course project involves building a complete compiler.

**Prerequisite:**CSC258H1, CSC324H1, CSC263H1/ CSC265H1

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### ECE489H1 - Compilers II

**Hours:**24L/36P

Theoretical and practical aspects of building modern optimizing compilers. Topics: intermediate representations, basic blocks and flow graphs, data flow analysis, partial evaluation and redundancy elimination, loop optimizations, register allocation, instruction scheduling, interprocedural analysis, and memory hierarchy optimizations. Students implement significant optimizations within the framework of a modern research compiler. (This course is a cross-listing of ECE540H1, Faculty of Applied Science and Engineering.)

**Prerequisite:**CSC236H1/ CSC240H1

**Recommended Preparation:**ECE385H1, proficiency in C

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC490H1 - Capstone Design Project

**Hours:**48L

This half-course gives students experience solving a substantial problem that may span several areas of Computer Science. Students will define the scope of the problem, develop a solution plan, produce a working implementation, and present their work using written, oral, and (if suitable) video reports. Class time will focus on the project, but may include some lectures. The class will be small and highly interactive. Project themes change each year. Contact the Computer Science Undergraduate Office for information about this year’s topic themes, required preparation, and course enrolment procedures. Not eligible for CR/NCR option.

**Prerequisite:**Permission of the instructor

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC491H1 - Capstone Design Project

**Hours:**48L

This half-course gives students experience solving a substantial problem that may span several areas of Computer Science. Students will define the scope of the problem, develop a solution plan, produce a working implementation, and present their work using written, oral, and (if suitable) video reports. Class time will focus on the project, but may include some lectures. The class will be small and highly interactive. Project themes change each year. Contact the Computer Science Undergraduate Office for information about this year’s topic themes, required preparation, and course enrolment procedures. Not eligible for CR/NCR option.

**Prerequisite:**Permission of the instructor

**Exclusion:**NOTE: Students not enrolled in the Computer Science Major or Specialist program at the UTSG, UTM, or UTSC are limited to a maximum of three 300-/400-level CSC/ECE half-courses.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC494H1 - Computer Science Project

**Hours:**TBA

This half-course involves a significant project in any area of Computer Science. The project may be undertaken individually or in small groups. The course is offered by arrangement with a Computer Science faculty member. Not eligible for CR/NCR option.

**Prerequisite:**Three 300-/400-level CSC half-courses, and permission of the Associate Chair, Undergraduate Studies. Contact the Computer Science Undergraduate Office for information about course enrolment procedures.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)

### CSC495H1 - Computer Science Project

**Hours:**TBA

This half-course involves a significant project in any area of Computer Science. The project may be undertaken individually or in small groups. The course is offered by arrangement with a Computer Science faculty member. Not eligible for CR/NCR option.

**Prerequisite:**Three 300-/400-level CSC half-courses, and permission of the Associate Chair, Undergraduate Studies. Contact the Computer Science Undergraduate Office for information about course enrolment procedures.

**Distribution Requirements:**Science

**Breadth Requirements:**The Physical and Mathematical Universes (5)