Faculty of Arts & Science
2013-2014 Calendar

Calendar Home | Course Timetables


Computer Science

Faculty


University Professor Emeritus
S. Cook, SM, Ph D, FRS, FRSC

Professors Emeriti
D. Corneil, MA, Ph D
E. Hehner, M Sc, Ph D
R. Holt, Ph D
J. Hume, MA, Ph D, FRSC, CM
C. Gotlieb, MA, Ph D, D Math, D Eng, FRSC
G.S. Graham, M Sc, MA, Ph D (University of Toronto Mississauga)
R. Mathon, M Sc, PhD (University of Toronto Mississauga)
J. Mylopoulos, M Sc, Ph D, FRSC
D. Wortman, M Sc, Ph D

University Professors
A. Borodin, M Sc, Ph D, FRSC
G. Hinton, Ph D, FRS, FRSC

Professor and Chair of the Department
S. Dickinson, M Sc, PhD

Professor and Vice Chair of the Department
S. McIlraith, M Math, PhD

Professor and Associate Chair, Graduate Studies
A. Jepson, Ph D

Senior Lecturer and Associate Chair - Undergraduate Studies
K. Reid, M Sc

Professors
T. Abdelrahman, M Sc, Ph D
F. Bacchus, M Sc, Ph D
R. Baecker, M Sc, Ph D
R. Balakrishnan, M Sc, Ph D
C. Boutilier, M Sc, Ph D
M. Chechik, M Sc, PhD
S. Dickinson, M Sc, Ph D
S. Easterbrook, Ph D
F. Ellen, M Math, Ph D
W. Enright, M Sc, Ph D (University of Toronto Scarborough)
E. Fiume, M Sc, Ph D
D. Fleet, M Sc, PhD (University of Toronto Scarborough)
V. Hadzilacos, Ph D (University of Toronto Scarborough)
A. Hertzmann, M Sc, Ph D
G. Hirst, M Sc, Ph D (University of Toronto Scarborough)
K. Jackson, M Sc, Ph D
A. Jepson, Ph D
N. Koudas, M Sc, Ph D (University of Toronto Scarborough)
K. Kutulakos, M Sc, Ph D
H. Levesque, M Sc, Ph D, FRSC
P. Marbach, M Sc, Ph D
S. McIlraith, M Math, Ph D
R. Miller, M Sc, Ph D, FRSC
M. Molloy, M Math, Ph D (University of Toronto Scarborough)
R. Neal, B Sc, Ph D
T. Pitassi, M Sc, Ph D
C.W. Rackoff, Ph D (University of Toronto Mississauga)
K. Singh, M Sc, Ph D
S. Stevenson, M Sc, Ph D
S. Toueg, MA, Ph D
R. Zemel, M Sc, Ph D

Associate Professors
A. Bonner, M Sc, Ph D (University of Toronto Mississauga)
M. Brudno, M.Sc. Ph.D
C. Christara, M Sc, Ph D
J. Danahy, M Sc Urb & Des Pl
E. de Lara, M Sc, Ph D
A. Demke-Brown, M Sc, Ph D
Y. Ganjali, M ScPh D
G. Penn, M Sc, Ph D
K. Truong, Ph D

Assistant Professors
A. Farzan, Ph D
R. Johnson, M Sc, Ph D (University of Toronto Scarborough)
B. Schroeder, M Sc, Ph D (University of Toronto Scarborough)
V. Vaikuntanathan, SM, PhD (University of Toronto Mississauga)
D. Wigdor, M Sc, Ph D (University of Toronto Mississauga)

Senior Lecturers
G. Baumgartner, M Sc
J. Campbell, M Math
J. Clarke, M Sc, PhD
M. Craig, M Sc
S. Engels, M Math
P. Gries, M Eng
D. Heap, M Sc
D. Horton, M Sc
F. Pitt, M Sc, Ph D
K. Reid, M Sc
T. Fairgrieve, M Sc, Ph D

Cross Appointed
C. Amza, Ph D
G. Bader, Ph D
C. Beck, Ph D
M. Chignell, M Sc, Ph D
M. Consens, Ph D
M. Fox, Ph D
B. Frey, Ph D
A. Goel, Ph D
M. Gruninger, Ph D
A. Jacobsen, M Sc, Ph D
I. Jurisica, M Sc, Ph D
P. Kim, Ph D
B. Li, M Sc, Ph D
D. Lie, Ph D
J. Liebeherr, Ph D
K. Lyons, M Sc Ph D
E. Mendelsohn, M Sc, Ph D (Professor Emeritus) (University of Toronto Scarborough)
A. Mihailidis, Ph D
Q. Morris, Ph D
A. Moses, Ph D
A. Moshovos, M Sc, Ph D
F. Roth, Ph D
R. Salakhutdinov, Ph D (University of Toronto Scarborough)
G. Steffan, M Sc, Ph D
M. Stumm, M Sc (Math), Ph D
A.I.F. Urquhart, MA, Ph D (Professor Emeritus)
A. Veneris, M Sc, Ph D
E. Yu, M Sc, Ph D
Z. Zhang, Ph D

Adjunct and Status Only
D. Aruliah, Ph D
J. Birnholtz, Ph D
A. Borgida, Ph D
M.Braverman Ph D
B. Buxton, M Sc
J. Glasgow, Ph D
S.Goldberg, Ph D
A.Goldenberg, Ph D
A. Kreinin, MSc, Ph D
A. LaMarca, MS, Ph D
Y. Lesperance, MSc, Ph D
R. Lilien, Ph D
K. Moffat, Ph D
C. Munteanu, Ph D
D. Penny, Ph D
K. Pu, Ph D
D. Reilly, Ph D
F. Rudzicz, Ph D
P. Salvini, Ph D
S. Saroiu, Ph D
T. Savor, M Sc, Ph D
B. Selic, Magister Ing
F. Shein, Ph D, P Eng
C. Sminchisescu, MS, Ph D
J. Stam, Ph D
B.Taati, Ph D
T. Topalouglou, Ph D
R. Trefler, Ph D
J. Tsotsos, Ph D
G.Wilson, Ph D

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 Program (PEY) 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 pursuing their first degree. Students may also take advantage of the International Exchange Program offered by CIE.  Please refer to Student Services & Resources chapter of this Calendar.

Associate Chair - Undergraduate Studies: Professor K. Reid

Student Counsellors, Undergraduate Office: Bahen Building, 40 St. George Street, Rooms 4252/4254/4256, M5S 2E4 (416-978-6360, email: ug@cs.utoronto.ca.

Web site: http://web.cs.toronto.edu/home.html

Computer Science Programs

Tuition fees for students enrolled in Computer Science Specialist and Major programs are higher than for other Arts and Science programs.  For more information visit www.fees.utoronto.ca

Computer Science Specialist (Science program)

Enrolment in this program requires the completion of 4.0 courses.

(12 full course equivalents [FCEs])

First year (2.5 FCEs):
 1.  (CSC108H1, CSC148H1)/CSC150H1, CSC165H1/CSC240H1; (MAT135H1, MAT136H1)/MAT137Y1/MAT157Y1

 Second year (3.5 FCEs):
 2. CSC207H1, CSC209H1, CSC236H1/CSC240H1, CSC258H1, CSC263H1/CSC265H1; MAT223H1/MAT240H1; STA247H1/STA255H1/STA257H1

Notes:
1. 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; however, please base your course choice on what you are ready to take, not on “saving” a half-credit].
2. CSC150H1 is an accelerated alternative to CSC108H1 and CSC148H1, intended for students with previous programming experience in a procedural language. If you take CSC150H1 instead of CSC108H1 and CSC148H1, you do not need to replace the missing half-credit; but please see Note
3. 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; but please see Note 1.
4. Students may not omit CSC165H1 and proceed directly to CSC236H1. Either (CSC165H1 and CSC236H1), or CSC240H1 is required for program completion. CSC165H1 is different from CSC108H1 in this respect.
5. Consult the Undergraduate Office for advice about choosing among CSC108H1, CSC148H1, and CSC150H1, and between CSC165H1 and CSC240H1.

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

Later years (6 FCEs):
 3.  CSC369H1, CSC373H1/CSC375H1
 4.  1.5 FCEs from the following: any 400-level CSC course; BCB410H1, BCB420H1, BCB430Y1, with not more than 1.0 FCE from CSC490H1, CSC491H1, CSC494H1, CSC495H1, BCB430Y1
 5.  1.5 additional FCEs from the following: any 300+level CSC course; BCB410H1, BCB420H1, BCB430Y1; ECE385H1, ECE489H1
 6.  2 additional FCEs from the following list:
  CSC: any 300-/400-level;
  BCB410H1, BCB420H1, BCB430Y1;
  ECE385H1, ECE489H1;
  MAT224H1, MAT235Y1/MAT237Y1/MAT257Y1, any 300-/400-level except MAT329H1, MAT390H1, MAT391H1;
  STA248H1/STA261H1, any 300-/400-level

The choices in 4, 5 and 6 must satisfy the requirement for an integrative, inquiry-based activity by including one of the following half-courses: CSC301H1, CSC318H1, CSC404H1, 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.

Preparing for graduate study in Computer Science

Strong students should consider the option of further study in graduate school (where the degrees offered are typically M.Sc. and Ph.D.).  If you find yourself frequently receiving marks in the B+ range or better, you should consult with faculty members to learn more about graduate school and whether it would be a good option for you. You will want to ask for advice on your particular interests — and you will find faculty members are happy to talk to you — but there are also some course choices that should be considered by all students thinking of graduate study in Computer Science.

The focuses can help you further refine your areas of interest, but you should not take courses exclusively in one area. You will benefit by having taken an advanced course requiring considerable software development and a theoretical course.

It will be especially beneficial to have done a project course (CSC494H1/CSC495H1), a capstone course (CSC490H1/CSC491H1), and/or a summer research project. It is good if this individual work is in the area where you eventually decide you'd like to do your own research, but that is not essential; what you need most is some experience doing work on your own, under the mentorship of an experienced researcher.

Choosing courses

This program offers considerable freedom to choose courses at the 300+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.

You have the option of completing one or more of the focuses defined below. Focuses are sets of courses that direct you toward expertise in particular areas of Computer Science, such as game design, theory of computation, human-computer interaction, and many more. These focuses are meant to help your choice, not to constrain it, and each focus has at least one faculty member who would be happy to discuss it with you.

A longer description of the rationale behind each of the cfocuses can be found on our web site at http://web.cs.toronto.edu/program/ugrad.htm


Computer Science Specialist: Focuses

Each focus has a set of required courses that must be completed to satisfy the focus. Most focuses also have an additional list of related courses that students in the focus may find interesting.  In some cases these are courses offered by different departments or faculties.  Note that you must petition to take Engineering courses or graduate-level courses.

In many cases, the courses required of the focus will also satisfy Specialist program requirements. Focuses that require courses in addition to the Specialist requirements have a note in the descriptions below.

To enrol in one or more focuses, students must first be enrolled in the Computer Science Specialist program. Enrolment instructions can be found on the Arts & Science Current Students subject POSt enrolment web site. Focuses can be chosen beginning Monday, September 23, 2013, on the Arts & Science Current Students online services web page.

Computer Science Specialist: Focus in Scientific Computing (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 modeled 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.

Required Courses:

     1. MAT235Y1/MAT237Y1/MAT257Y1,

     2. 1.5 FCE from the following: CSC336H1, CSC350H1, CSC351H1, CSC446H1, 456H1

     3. 1 FCE from the following: CSC320H1/418H1, CSC321H1/411H1, CSC343H1, CSC384H1, CSC358H1/CSC458H1

Suggested Related Courses:

     1. MAT224H1/MAT240H1, MAT244H1, MAT334H1/MAT354H1, MAT337H1/MAT357H1

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 provide the sources of many problems solved by numerical techniques.

Focus in Artificial Intelligence (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 (CL), Machine Learning (ML), and Knowledge Representation and Reasoning (KR). 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.

Required Courses:

     1. 1 FCE from the following: MAT235Y1/237Y1/257Y1, APM236H1/MIE262H1/STA248/261H1, CSC350H1, CSC310H1, CSC330H1, CSC438H1, CSC448H1, CSC463H1

     2. 2.5 FCEs from the following covering at least two of the four areas

              a) CSC401H1, CSC485H1

              b) CSC320H1, CSC420H1

              c) CSC321H1, CSC411H1, CSC412H1

              d) CSC384H1, CSC486H1

Suggested Related Courses:

     CSC200Y1, CSC324H1, COG250Y1, PSY270H1, PHL232H1, PHL342H1, STA414H1

Focus in Computational Linguistics & Natural Language Processing (4.0 FCEs)

How can we build and analyze systems for enabling users to communicate with computers using human language (also called natural language), and for automatically processing 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 second Major in Linguistics. [Note 0.5 FCEs in LIN are in addition to the 12.0 FCEs required to complete the Specialist program]

Required Courses

     1.     CSC318H1

     2.     CSC401H1, CSC485H1

     3.     LIN200H1

     4.     1.5 FCE from the following: CSC309H1, CSC321H1, CSC330H1, CSC411H1, CSC428H1, CSC486H         

     5.     0.5 FCE from the following: PSY100H1, COG250Y1

Suggested Related Courses:

Other relevant CSC 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 them.

Focus in Computer Vision  (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 their solution.

Required Courses:

     1. MAT235Y1/MAT237Y1/MAT257Y1, CSC320H1, CSC350H1, CSC411H1, CSC420H1

     2. 0.5 FCE from the following: CSC418H1, CSC412H1, CSC2503H (Note: students must petition to take this course.)

Suggested Related Courses:

     1. ECE216H1

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, CSC384H, CSC485H1, CSC486H1, PHL232H1, PHY385H1, PSL440Y1, PSY270H1, PSY280H1, STA257H1/STA261H1

Focus in Formal Languages and Logic (3 FCEs)

How do we ensure that critical software and hardware systems work the way we intend them too? How do we develop computer systems that support decision making by people or by robots? How do we extract and update information from today's diverse and heterogeneous information sources? This focus exposes students to the mathematical foundations, tools, and techniques based on formal languages and logic to address these and many other related problems at the frontier of computer science.

Required Courses:

     1. CSC324H1, CSC330H1, CSC463H1, CSC438H1/CSC448H1

     2. 1 FCE from the following: CSC343H1, CSC384H1, CSC410H1, CSC465H1, CSC486H1

Focus in Computer Systems (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.

Required Courses:

     1. CSC324H1, CSC343H1, CSC443H1, CSC469H1, CSC488H1

     2. 1 FCE from the following: CSC372H1/ECE385H1, CSC358H1, CSC458H1

Suggested Related Courses:

     1. CSC301H1, CSC309H1, CSC410H1, ECE489H1

     2. Relevant courses offered at UTM: CSC347H5, CSC423H5, CSC427H5

     3. Relevant courses offered by Engineering: ECE454H1, ECE568H1

Focus in Game Design (3.5 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 modeling), 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.

Required courses:

     1. CSC300H1, CSC301H1, CSC318H1, CSC324H1, CSC384H1, CSC418H1, CSC404H1

Suggested Related Courses:

     1. CSC358H1, CSC458H1, CSC428H1,

     2. MUS300H1, INI222H1, INI465H1, ENG235H1

     3. ECO326H1, MGT2056H

Focus in Human-Computer Interaction (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]

Required Courses:

     1. CSC300H1, CSC301H1, CSC318H1, CSC428H1

     2. SOC101Y1, SOC200H1, SOC202H1, SOC302H1

     3. 1 FCE from the following: CSC309H1, CSC320H1, CSC321H1, CSC343H1, CSC384H1, CSC401H1, CSC404H1, CSC418H1, CSC485H1, CSC490H1/491H1

     4. PSY100H1, PSY270H1/PSY280H1

Suggested Related Courses:

     1. CSC454H1, CSC290H1

     2. At least one half-course in Human Factors or Ergonomics offered by the Department of Mechanical and Industrial Engineering, such as MIE240H, MIE343H, MIE344H, MIE448H, and MIE449H. Human factors is a sister discipline to human-computer interaction that approaches problems in slightly different ways.

     3. WDW260H1

Focus in Theory of Computation (4.5 FCEs + 2.0 FCEs from required Specialist courses)

This is a focus for students with strong mathematical aptitude who are interested in acquiring a solid background for graduate work in Theory of Computation.

Students pursuing this focus are strongly encouraged to take CSC240H1 rather than CSC165H1 and CSC236H1.  Students are also encouraged to take CSC290H1. [Depending on courses selected for points 6 & 7, students may need to complete 0.5-1.0 FCEs in addition to the 12.0 FCEs required to complete the Specialist program]

Required Courses:

     1. MAT137Y1/MAT157Y1/(MAT135H1, MAT136H1, MAT237Y1)  Note: if MAT237Y1 is used in this list it cannot be counted in the 2 FCE list below.

     2. CSC265H1(recommended)/CSC263H1

     3. CSC375H1(recommended)/CSC373H1

     4. CSC336H1/CSC350H1

     5. CSC463H1

     6. 1.5 FCEs from the following: CSC310H1, CSC438H1, CSC448H1, MAT332H1, MAT344H1, MAT443H1, CSC322H5/MAT302H5 (UTM), CSC422H5 (UTM). An appropriate CSC494H1/CSC495 project supervised by a faculty member from the Theory group or a relevant introductory graduate course in theory may also be used to satisfy this requirement.  (Note that students must petition to take a graduate course.)

     7. 2 FCEs from the following: APM236H1/MIE262H1, MIE263H1, APM421H1, APM461H1, MAT224H1/247H1, MAT237Y1/257Y1, MAT244H1/267H1, MAT301H1/347Y1, MAT315H1, MAT327H1, MAT334H1/MAT354H1, MAT337H1/357H1, any 400 level MAT course (except MAT443H1), STA248H1/250H1/261H1, STA347H1

Suggested Related Courses:

     1. CSC240H1

     2. CSC290H1

     3. BCB 410H1

     4. CSC320H1/CSC418H1/CSC420H1, CSC321H1/CSC384H1/CSC411H1/CSC485H1, CSC343H1/CSC443H1, CSC351H1/CSC456H1, CSC358H1/CSC458H1, CSC412H1/CSC465H1/CSC486H1, CSC488H1

Focus in Web and Internet Technologies (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 both the algorithm foundations of Web and Internet Technologies, as well as the implementation and system architecture.

Students who wish to pursue the Web and Internet Technologies focus should have a solid understanding of statistics, should 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 carrying out a project in web and internet technologies.

Required courses:

     1. STA248H1, CSC309H1, CSC343H1, CSC358H1, CSC458H1, CSC411H1

     2. 0.5 FCEs from the following: CSC310H1, CSC443H1, CSC469H1

Suggested Related Courses:

     1. Courses offered at UTM: CSC347H5, CSC423H5, CSC427H5

     2. ECE568H1

Computer Science Major (Science program)

Enrolment in this program requires the completion of 4.0 courses.

(8 credits)

First year (2.5 FCEs):
  1. (CSC108H1, CSC148H1)/CSC150H1, CSC165H1/CSC240H1; (MAT135H1, MAT136H1)/MAT137Y1/MAT157Y1
Second year (2.5 FCEs):
  2. CSC207H1, CSC236H1/CSC240H1, CSC258H1, CSC263H1/CSC265H1; STA247H1/STA255H1/STA257H1

Notes:
1. 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; however, please base your course choice on what you are ready to take, not on “saving” a half-credit].
2. CSC150H1 is an accelerated alternative to CSC108H1 and CSC148H1, intended for students with previous programming experience in a procedural language. If you take CSC150H1 instead of CSC108H1 and 148H1, you do not need to replace the missing half-credit; but please see Note 1.
3. 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; but please see Note 1.
4. Students may not omit CSC165H1 and proceed directly to CSC236H1. Either (CSC165H1 and CSC236H1), or CSC240H1 is required for program completion. CSC165H1 is different from CSC108H1 in this respect.
5. Consult the Undergraduate Office for advice about choosing among CSC108H1, CSC148H1, and CSC150H1, and between CSC165H1 and CSC240H1.

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

Later years (3 FCEs).
 3.  0.5 FCE from the following: any 400-level CSC course; BCB410H1, BCB420H1, BCB430Y1
 4.  1.0 additional FCE from the following: any 300+level CSC course; BCB410H1, BCB420H1, BCB430Y1; ECE385H1, ECE489H1
 5.  1.5 additional FCEs from the following list, of which at least 0.5 FCE must be at the 300-/400-level:
  CSC: any 200-/300-/400-level;
  BCB410H1, BCB420H1, BCB430Y1;
  ECE385H1, ECE489H1;
  MAT223H1MAT/240H1, MAT235Y1/MAT237Y1/MAT257Y1, any 300-/400-level except MAT329H1, MAT390H1, MAT391H1

The choices in 3, 4 and 5 must satisfy the requirement for an integrative, inquiry-based activity by including one of the following half-courses: CSC301H1, CSC318H1, CSC404H1, 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.

Advice on choosing courses towards a Major in CSC

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 CS, 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 CSCtopics, 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 CS and another discipline. For example, many CS 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 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 CS 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 and CSC375H1  in place of CSC263H1 and CSC373H1 respectively. If you come to realize that your interests are mathematical after taking some of the non-enriched courses, it's not too late; you should ask us for advice. You should also take at least one of CSC438H1, CSC448H1 and CSC465H1.

You should also make sure you take courses in numerical analysis -- CSC350H1 and CSC351H1, 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 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 CSC Major should include a selection of courses something like this:

  CSC373H1/CSC375H1
  CSC321H1/CSC343H1
  CSC336H1/CSC350H1
  BCB410H1, BCB420H1
  CSC411H1
  Some of CSC324H1, CSC463H1, CSC310H1, CSC412H1, CSC456H1

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 CS course choices should be somewhat similar to those for CSC and Mathematics: take the theoretical CSC courses up to the 300 level, and prefer the higher-level MAT and STA courses. For example, take STA 257H1 and 261H1 rather than STA 247H1 and 248H1.

Within Computer Science, take courses in numerical analysis (CSC350H1 and CSC351H1). Choose also from among information theory (CSC310H), machine learning (CSC321H1 and CSC411H1), and natural language processing (CSC401H).

CSC and Economics
There is considerable opportunity for mutually supporting interests in CS and economics in the area of economic modelling, econometrics and numerical analysis. In CS, you might choose courses such as CSC343H1 (databases),CSC 358H1 (networks) and CSC369H1 (operating systems) to acquire the technical background for working with large systems and data sets, and CSC350H1 and CSC351H1 (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 CS 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. CSC454H1 (business of software) would also benefit from your background in economics.

CSC and Linguistics
If you are interested in both CS 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 CL 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/CSC375H1 and CSC463H1.

CSC and Physics
If you want to study CS 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. CSC350H1 and CSC351H1 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.

Computer Science Minor (Science program)

Enrolment in this program requires the completion of 4.0 courses.

(4 credits)

(CSC108H1, CSC148H1)/CSC150H1, CSC165H1/CSC240H1, CSC207H1, CSC236H1/CSC240H1

Notes:
1. Students with a strong background in Java or C++ may omit CSC108H1 and proceed directly with CSC148H1.
2. CSC150H1 is an accelerated alternative to CSC108H1 and CSC148H1, intended for students with previous programming experience in a procedural language.
3. 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.
4. Students may not omit CSC165H1 and proceed directly to CSC236H1. Either (CSC165H1 and CSC236H1), or CSC240H1 is required for program completion. CSC165H1 is different from CSC108H1 in this respect.
5. Consult the Undergraduate Office for advice about choosing among CSC108H1, CSC148H1, and CSC150H1, and between CSC165H1 and CSC240H1.

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

1.5 credits from the following list, of which at least 1 credit must be at the 300-/400-level:
  CSC209H1, CSC258H1, CSC263H1/CSC265H1
  CSC: any 300-/400-level

Note:

1. Computer Science Minors are limited to three 300+ level CSC/ECE half-courses

Computer Science Courses


Enrolment notes

NOTE: The University of Toronto Mississauga and University of Toronto Scarborough computer science Minor subject POSt is not recognized as a restricted CS subject POSt for St. George courses enrolments.

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


Prerequisites and exclusions

Prerequisites and exclusions for all courses are strictly enforced. Non-CGPA related waivers can be granted by instructors if the student demonstrates that s/he has background covering the material of the prerequisite courses. 

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 CSC150H1 to CSC108H1, from CSC240H1 to CSC165H1(or to CSC236H1 if you have already passed CSC165H1), from CSC265H1 to CSC263H1, and from CSC375H1 to CSC373H1. Please refer to Please refer to the Arts & Science Registration Instructions and Timetable for drop down deadlines.


Drop down deadlines:

Drop down deadlines:

20139, Fall session: October 4, 2013

20141, Winter session January 31, 2014


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 (BA4252/4254) 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 Seminars

The 199Y1 and 199H1 seminars are designed to provide the opportunity to work closely with an instructor in a class of no more than twenty-four students. These interactive seminars are intended to stimulate the students’ curiosity and provide an opportunity to get to know a member of the professorial staff in a seminar environment during the first year of study. Details can be found at www.artsci.utoronto.ca/current/course/.


CSC104H1    Computational Thinking[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 CSC course, but you may take CSC108H1/CSC148H1 after CSC104H1.

Exclusion: SMC104H1 (as taught before 1990); VIC104H1 (as taught before 1990); any CSC course.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

Choosing first year courses

 To help you select the programming course that is right for you, see www.cs.toronto.edu/dcs, Choose Programs & Courses > Undergraduate Courses > Choosing Your First Year Courses.


CSC108H1    Introduction to Computer Programming[36L/12T/12P]

Structure of computers; the computing environment. Programming in a language such as Python. Program structure: elementary data types,statements, control flow, functions, classes, objects, methods, fields. Lists; searching, sorting and complexity. Practical (P) sections consist of supervised work in the computing laboratory. These sections are offered when facilities are available, and attendance is required.

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

Exclusion: CSC107H1, CSC120H1, CSC139H1, CSC148H1, CSC149H1, CSC150H1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC120H1    Computer Science for the Sciences[24L/12P]

An introduction to computer science for students in other sciences, with an emphasis on gaining practical skills. Introduction to programming; web programming; database design; software tools; examples and exercises taken from the sciences. 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. Practical (P) sections consist of supervised work in the computer laboratory. No programming experience is necessary. Students who wish to do more can progress directly to CSC150H1.

Exclusion: any CSC course.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC148H1    Introduction to Computer Science[24L/12T/12P]

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 in a language such as Python, C++, or Java, 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; MHF4U(advanced functions)/MCV4U(calculus and vectors)
Exclusion: CSC139H1, CSC149H1, CSC150H1; you may not take this course after taking more than two CSC courses at the 200-level or higher.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC150H1    Accelerated Introduction to Computer Science[36L/12T/12P]

An accelerated course covering object-oriented topics from CSC108H1 (classes, objects, methods and fields, and program design), as well as all the material of CSC148H1. Suitable for students with a solid programming background in Turing, C, Scheme, or a similar language, who are willing to accept a heavier workload than in CSC108H1 and CSC148H1. NOTE: Students may go to their college to drop down from CSC150H1 to CSC108H1. See above for the drop down deadline.

Prerequisite: MHF4U(advanced functions)/MCV4U(calculus and vectors). Students should thoroughly understand arrays, searching, sorting, functions/procedures/subprograms, arguments and parameters, and modular design.
Exclusion: CSC107H1, CSC108H1, CSC139H1, CSC148H1, CSC149H1; you may not take this course after taking more than two CSC courses at the 200-level or higher.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC165H1    Mathematical Expression and Reasoning for Computer Science[36L/24T]

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. Diagonalization, the Halting Problem, and some reductions. Unified approaches to programming and theoretical problems.

Prerequisite: MHF4U (advanced functions)/MCV4U (calculus and vectors)
Corequisite: CSC108H1/CSC148H1/CSC150H1
Exclusion: CSC236H1, 238H1, 240H1; MAT102H5 (University of Toronto Mississauga); You may not take this course after taking more than two CSC courses at the 200-level or higher
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

200-level courses

Note:   To enrol in any CSC course at the 200-level or higher, you must have a cumulative GPA of at least 1.50 (3.00 for 300-AND 400-level courses) or be enrolled in a restricted subject POSt sponsored by the Department of Computer Science. The University of Toronto at Mississauga Computer Science Minor and the University of Toronto at Scarborough Minor are not restricted subject POSts. If you are in your first year of studies at the University, the GPA requirement does not apply.


CSC200Y1    Economic and Social Networks: Models and Applications[48L/24T]

The course will provide an informal, but rigourous treatment of a variety of topics, introducing students to the relevant background in graph theory, social network formation, incentives and game theory, and providing exposure to the relevant mathematical and computational tools required to analyze relevant phenomenon. Topics may include: structural analysis of social networks, matching markets, trading networks, web search, information cascades, prediction markets, and online advertising, among others.

Prerequisite: one OAC/U math
Distribution Requirement Status: This is a Science course
Breadth Requirement: Society and its Institutions (3) + The Physical and Mathematical Universes (5)

CSC207H1    Software Design[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, build management, unit testing, refactoring, design patterns, advanced IDE usage, regular expressions, markup languages, parsing using finite state machines, and reflection.  Representation of floating-point numbers and introduction to numerical computation.

Prerequisite: CSC148H1/CSC150H1; CGPA 1.5/enrolment in a CSC subject POSt.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC209H1    Software Tools and Systems Programming[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/enrolment in Bioinformatics and Computational Biology (BCB) subject POSt; CGPA 1.5/enrolment in a CSC subject POSt.
Exclusion: CSC372H1, CSC408H1, CSC369H1, CSC468H1, CSC469H1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC236H1    Introduction to the Theory of Computation[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 (including the Master Theorem); introduction to automata and formal languages.

Prerequisite: CSC148H1/CSC150H1, CSC165H1/(CSC148H1 as given before Fall 2003); CGPA 1.5/enrolment in a CSC subject POSt.
Exclusion: CSC238H1, CSC240H1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC240H1    Enriched Introduction to the Theory of Computation[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.

 NOTE: Students may go to their college to drop down from CSC240H1 to CSC165H1 (or to CSC236H1 if you have already passed CSC165H1). See above for the drop down deadline.

Prerequisite: OAC Calculus and one of Algebra & Geometry or Finite Mathematics OR U Advanced Functions and Introductory Calculus, and one of U Geometry and Discrete Mathematics or U Mathematics of Data Management, with high grades; CGPA 1.5/enrolment in a CSC subject POSt
Corequisite: CSC148H1/CSC150H1
Exclusion: CSC236H1, CSC238H1.
Recommended Preparation: first term of MAT137Y1/MAT157Y1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC258H1    Computer Organization[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: CSC148H1/CSC150H1, CSC165H1/CSC240H1/(CSC148H1 as given before Fall 2003); CGPA 1.5/enrolment in a CSC subject POSt.
Exclusion: CSC257H1 as given before 1985.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC260H1    Introduction to Scientific, Symbolic, and Graphical Computation[24L/12T]

Problems in transforming continuous mathematical models to discrete computational models. Inadequacy of naive computer solutions, and techniques to remedy inadequacies. Symbolic computation, plotting, 3-D graphics, and conventional programming languages. Intended for students from computer science, sciences and mathematics: for computer scientists, introduction to design and implementation of robust algorithms; for scientists, techniques in transforming scientific problems into computational solutions; for mathematicians, insight into differences between mathematical models and computational solutions.

Prerequisite: CSC108H1/computing experience, as from a good high school programming course; CGPA 1.5/enrolment in a CSC subject POSt.
Corequisite: (MAT135H1, MAT136H1)/MAT135Y1/MAT137Y1/MAT157Y1, MAT223H1/MAT240H1
Exclusion: CSC160H1 as taught in Spring 1992; after taking CSC270H1/CSC263H1/CSC265H1 and any 300-/400-level CSC course, you may not take CSC260H1 without Departmental permission in writing.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC263H1    Data Structures and Analysis[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/CSC238H1/CSC240H1; STA247H1/STA255H1/STA257H1; CGPA 1.5/enrolment in a CSC subject POSt.
Exclusion: CSC265H1, CSC378H1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC265H1    Enriched Data Structures and Analysis[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; CGPA 1.5/enrolment in a CSC subject POSt.
Corequisite: STA247H1/STA255H1/STA257H1.
Exclusion: CSC263H1, CSC378H1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC290H1    Communication Skills for Computer Scientists[36L]

Targeted instruction and significant practice in the communications required for careers in computer science. The curriculum covers written, oral, and interpersonal communication. Students will hand in short pieces of writing each week, will make oral presentations several times in the semester, and will work together in simulated project meetings and other realistic scenarios of pair and small group interaction.

Prerequisite: enrolment in a CSC subject POSt in year 2, 3, or 4.
Distribution Requirement Status: This is a Science course
Breadth Requirement: None

Note

If you are not in our Major or Specialist program, you are limited to three 300+ level CSC/ECE half-courses. In addition, you must have a CGPA of 3.00, unless you are in our Minor.


CSC300H1    Computers and Society[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; CGPA 3.0/enrolment in a CSC subject POSt.
Exclusion: PSCD03H (University of Toronto Scarborough)
Distribution Requirement Status: This is a Science course
Breadth Requirement: Society and its Institutions (3)

CSC301H1    Introduction to Software Engineering[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/CSC378H1; CGPA 3.0/enrolment in a CSC subject POSt
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC302H1    Engineering Large Software Systems[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 modeling and analysis.

Prerequisite: CSC301H1; CGPA 3.0/enrolment in a CSC subject POSt
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC309H1    Programming on the Web[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, CSC343H1/CSC228H1; CGPA 3.0/enrolment in a CSC subject POSt.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC310H1    Information Theory[24L/12T]

Measuring information. The source coding theorem. Data compression using ad hoc methods and dictionary-based methods. Probabilistic source models, and their use via Huffman and arithmetic coding. Noisy channels and the channel coding theorem. Error correcting codes, and their decoding by algebraic and probabilistic methods.

Prerequisite: CSC148H1/CSC150H1/CSC260H1; STA247H1/STA255H1/STA257H1/STA107H1; (MAT135H1, MAT136H1)/MAT135Y1/MAT137Y1/MAT157Y1, MAT223H1/MAT240H1; CGPA 3.0/enrolment in a CSC subject POSt.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC318H1    The Design of Interactive Computational Media[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. Enrolment limited, but non-computer scientists welcome.

Prerequisite: Any CSC half-course; CGPA 3.0/enrolment in a CSC subject POSt.
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 Requirement Status: This is a Science course
Breadth Requirement: None

CSC320H1    Introduction to Visual Computing[24L/12P]

A unified introduction to 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 (raster algorithms, 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.

Prerequisite: CSC209H1/(CSC207H1,proficiency in C or C++); MAT(135H1,136H1)/MAT135Y1/MAT137Y1/MAT157Y1, MAT223H1/MAT240H1; CGPA 3.0/enrolment in a CSC subject POSt.
Distribution Requirement Status: This is a Science course
Breadth Requirement: None

CSC321H1    Introduction to Neural Networks and Machine Learning[24L/12P]

The first half of the course is about supervised learning for regression and classification problems and will include the perceptron learning procedure, backpropagation, and methods for ensuring good generalisation to new data. The second half of the course is about unsupervised learning methods that discover hidden causes and will include K-means, the EM algorithm, Boltzmann machines, and deep belief nets.

Prerequisite: (MAT135H1, MAT136H1)/MAT135Y1/MAT137Y1/MAT157Y1, MAT223H1/MAT240H1; STA247H1/STA255H1/STA257H1; CGPA 3.0/enrolment in a CSC subject POSt
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC324H1    Principles of Programming Languages[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: CSC207H1, CSC236H1/CSC238H1/CSC240H1; CGPA 3.0/enrolment in a CSC subject POSt.
Exclusion: CSC248H1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC330H1    Logical Specifications[24L/12T]

Logic and its use as a declarative language in computer science. Syntax and semantics of propositional and predicate calculus. Proving entailment and non-entailment rigorously. Formal derivations. Satisfiability. Applications, including information systems, program verification, artificial intelligence, software engineering. Computational tools, including Prolog. Other logics.

Prerequisite: CSC236H1/CSC238H1/CSC240H1; CGPA 3.0/enrolment in a CSC subject POSt.
Exclusion: CSC230H1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC336H1    Numerical Methods[24L/12T]

The study of computational methods for solving problems in linear algebra, non-linear equations, approximation, and integration. 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/CSC150H1; MAT133Y1(70%)/(MAT135H1, MAT136H1)/MAT135Y1/MAT137Y1/MAT157Y1, MAT223H1/MAT240H1; CGPA 3.0/enrolment in a CSC subject POSt.
Exclusion: CSC350H1, CSC351H1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC343H1    Introduction to Databases[24L/12T]

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/MAT(135H1,136H1)/MAT135Y1/MAT137Y1/MAT157Y1; CSC207H1; CGPA 3.0/enrolment in a CSC subject POSt. Prerequisite for Engineering students only: ECE345/CSC190/CSC192
Exclusion: CSC434H1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC350H1    Numerical Algebra and Optimization[24L/12T]

Floating-point arithmetic. The efficiency and stability of solution techniques for systems of linear equations and least squares problems, including LU- and QR-based methods. Eigenvalue and eigenvector calculations. Algorithms for systems of non-linear equations and optimization problems, including linear programming.

Prerequisite: CSC148H1/CSC150H1; MAT223H1/MAT240H1, MAT235Y1/MAT237Y1/MAT257Y1; CGPA 3.0/enrolment in a CSC subject POSt.
Exclusion: CSC336H1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC351H1    Numerical Approximation, Integration and Ordinary Differential Equations[24L/12T]

Analysis of methods for approximation, integration and the solution of ordinary differential equations. Emphasis on the convergence and stability properties of the algorithms, rather than on their implementation.

Prerequisite: CSC350H1; CGPA 3.0/enrolment in a CSC subject POSt.
Exclusion: CSC336H1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC358H1    Principles of Computer Networks[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/CSC378H1, STA247H1/STA255H1/STA257H1/ECO227Y1; CGPA 3.0/enrolment in a CSC subject POSt.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC369H1    Operating Systems[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: CSC258H1, CSC209H1, CSC207H1; CGPA 3.0/enrolment in a CSC subject POSt.
Exclusion: CSC468H1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC372H1    Microprocessor Software[24L/12T/36P]

Development of embedded software for control and monitoring. Techniques for efficient running of multiple real-time, critical multiple processes and for device control. Methods of working on small systems, such as microcontroller-based systems. Projects use microprocessors to control equipment with feedback from sensors. Design, implementation and testing of software using a language such as C.

Prerequisite: CSC209H1; CSC258H1; CGPA 3.0/enrolment in a CSC subject POSt.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC373H1    Algorithm Design, Analysis & Complexity[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. Students will be expected to show good design principles and adequate skills at reasoning about the correctness and complexity of algorithms.

Prerequisite: CSC263H1/CSC265H1/CSC378H1; CGPA 3.0/enrolment in a CSC subject POSt.
Exclusion: CSC375H1, CSC364H1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC375H1    Enriched Algorithm Design, Analysis, and Complexity[24L/12T]

This course covers the same topics as CSC373H1, 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 CSC373H1 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 CSC375H1 to CSC373H1. See above for the drop down deadline.

Prerequisite: CSC265H1 or an A-in CSC263H1; CGPA 3.0/enrolment in a CSC subject POSt.
Exclusion: CSC373H1, CSC364H1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC384H1    Introduction to Artificial Intelligence[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, both theory and programming, of the core topics.

Prerequisite: CSC324H1; STA247H1/STA255H1/STA257H1; CGPA 3.0/enrolment in a CSC subject POSt.
Exclusion: CSC484H1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

ECE385H1    Microprocessor Systems[24L/36P]

A hardware-oriented course dealing with microprocessor and embedded systems. Microprocessor structures, memory and cache structures, input/output techniques, peripheral device control, hardware system and programming considerations. Laboratory experiments provide "hands-on" experience.

Prerequisite: CSC258H1; CSC209H1/proficiency in C; CGPA 3.0/enrolment in a CSC subject POSt.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

Note

If you are not in our Major or Specialist program, you are limited to three 300+ level CSC/ECE half-courses. In addition, you must have a CGPA of 3.00, unless you are in our Minor.


CSC401H1    Natural Language Computing[24L/12T]

Introduction to techniques involving natural language and speech in applications such as information retrieval, extraction, and filtering; intelligent Web searching; spelling and grammar checking; speech recognition and synthesis; and multi-lingual systems including machine translation. N-grams, POS-tagging, semantic distance metrics, indexing, on-line lexicons and thesauri, markup languages, collections of on-line documents, corpus analysis. PERL and other software.

Prerequisite: CSC207H1/CSC209H1/CSC228H1; STA247H1/STA255H1/STA257H1; CGPA 3.0/enrolment in a CSC subject POSt.
Recommended Preparation: MAT223H1/MAT240H1 is strongly recommended.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC404H1    Introduction to Video Game Design[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: One of CSC301H1, CSC318H1, CSC384H1, CSC418H1; CGPA 3.0/enrolment in a CSC subject POSt.
Distribution Requirement Status: This is a Science course
Breadth Requirement: Creative and Cultural Representations (1)

CSC410H1    Software Testing and Verification[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; CGPA 3.0/enrolment in a CSC subject POSt
Recommended Preparation: CSC330H1
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC411H1    Machine Learning and Data Mining[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. Problems with handling large databases.

Prerequisite: CSC263H1/CSC265H1; MAT(135H1,136H1)/MAT137Y1/MAT137Y1/MAT157Y1, STA247H1/STA255H1/STA257H1, STA248H1/STA250H1/STA261H1; CGPA 3.0/enrolment in a CSC subject POSt.
Recommended Preparation: CSC336H1/CSC350H1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC412H1    Probabilistic Learning and Reasoning[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; CGPA 3.0/enrolment in a CSC subject POSt.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC418H1    Computer Graphics[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: CSC336H1/CSC350H1/CSC351H1/CSC363H1/CSC364H1/CSC365H1/CSC373H1/CSC375H1/CSC378HI/CSC463H1, MAT(135H1,136H1)/MAT135Y1/MAT137Y1/MAT157, CSC209H1/proficiency in C or C++ ; CGPA 3.0/enrolment in a CSC subject POSt. Prerequisite for Engineering students only: ECE345 or ECE352
Recommended Preparation: MAT237Y1, MAT244H1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC420H1    Introduction to Image Understanding[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: CSC260H1/CSC263H1/CSC265H1,(MAT135H1, MAT136H1)/MAT135Y1/MAT136Y1/MAT137Y1/MAT157Y1, MAT223H1/MAT240H1; CGPA 3.0/enrolment in a CSC subject POSt.
Recommended Preparation: CSC320H1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC428H1    Human-Computer Interaction[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,(STA248H1/STA250H1/STA261H1)/(PSY201H1, PSY202H1)/(SOC202H1, SOC300H1); CSC209H1/proficiency C++ or Java; CGPA 3.0/enrolment in a CSC subject POSt.
Recommended Preparation: A course in PSY; CSC209H1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC438H1    Computability and Logic[24L/12T]

Computable functions, Churchs thesis, unsolvable problems, recursively enumerable sets. Predicate calculus, including the completeness, compactness, and Lowenheim-Skolem theorems. Formal theories and the Gdel Incompleteness Theorem.

Prerequisite: (CSC363H1/CSC463H1)/CSC364H1/CSC365H1/CSC373H1/CSC375H1/MAT247H1; CGPA 3.0/enrolment in a CSC subject POSt.
Exclusion: MAT309H1; PHL344H1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC443H1    Database System Technology[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/CSC434H1, CSC369H1/CSC468H1, CSC364H1/CSC373H1/CSC375H1; CGPA 3.0/enrolment in a CSC subject POSt.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC446H1    Computational Methods for Partial Differential Equations[24L/12T]

Finite difference methods for hyperbolic and parabolic equations; consistency, convergence, and stability. Finite element methods for 2-point boundary value problems and elliptic equations. Special problems of interest.

Prerequisite: CSC351H1/(CSC336H1 (75%))/equivalent mathematical background; MAT237Y1/MAT257Y1; APM346H1/APM351Y1/(MAT244H1/2MAT67H1 and exposure to PDEs); CGPA 3.0/enrolment in a CSC subject POSt.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC448H1    Formal Languages and Automata[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.

Prerequisite: CSC236H1/CSC238H1/CSC240H1, CSC363H1/CSC364H1/CSC365H1/CSC463H1/MAT247H1; CGPA 3.0/enrolment in a CSC subject POSt.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC454H1    The Business of Software[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 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; CGPA 3.0/enrolment in a CSC subject POSt.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC456H1    High-Performance Scientific Computing[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. Topics from: performance evaluation; scientific visualization; numerical methods; applications from science and engineering. For students in computer science, applied mathematics, science, engineering.

Prerequisite: CSC350H1/(CSC336H1 (75%))/equivalent mathematical background; CSC209H1/proficiency in C, C++ or Fortran; CGPA 3.0/enrolment in a CSC subject POSt.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC458H1    Computer Networking Systems[24L/12T]

Computer networks with an emphasis on systems programming of real networks and applications. An overview of networking basics; layering, packet switching fundamentals, socket programming, protocols, congestion control, routing, network security, wireless networks, multimedia, web 2.0, and online social networks.

Prerequisite: CSC209H1, CSC258H1, CSC263H1/ 265H1/378H1, STA247H1/255H1/257H1/ECO227Y1; CGPA 3.0/enrolment in a CSC subject POSt.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC463H1    Computational Complexity and Computability[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/CSC238H1/CSC240H1; CGPA 3.0/enrolment in a CSC subject POSt
Exclusion: CSC363H1, CSC364H1, CSC365H1
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC465H1    Formal Methods in Software Design[24L/12T]

The use of logic as an aid to programming. Formal semantics of programming languages: imperative programs, functional programs, parallel processes, communicating processes. Partial and total correctness. Refinement theorems: by steps, by parts, by cases. Semantics of recursion and the least-fixed-point construction; monotonicity, continuity. Semantics of data types; data refinement.

Prerequisite: CSC236H1/CSC238H1/CSC240H1/MAT309H1; CGPA 3.0/enrolment in a CSC subject POSt.
Recommended Preparation: (CSC363H1/CSC463H1)/CSC364H1/CSC365H1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC469H1    Operating Systems Design and Implementation[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; CGPA 3.0/enrolment in a CSC subject POSt.
Exclusion: CSC468H1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC485H1    Computational Linguistics[24L/12T]

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

Prerequisite: STA247H1/STA255H1/STA257H1 or familiarity with basic probability theory; CSC209H1 or proficiency in C++, Java, or Python; CGPA 3.0/enrolment in a CSC.subject POSt. Suggested preparation: CSC324H1/CSC330H1/CSC384H1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC486H1    Knowledge Representation and Reasoning[24L/12T]

Representing knowledge symbolically in a form suitable for automated reasoning, and associated reasoning methods: 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/CSC463H1)/CSC365H1/CSC373H1/CSC375H1; CGPA 3.0/enrolment in a CSC subject POSt.
Recommended Preparation: CSC330H1.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC488H1    Compilers and Interpreters[24L/12T]

Compiler organization, compiler writing tools, use of regular expressions, finite automata and context-free grammars, scanning and parsing, runtime organization, semantic analysis, implementing the runtime model, storage allocation, code generation.

Prerequisite: CSC258H1, CSC324H1, CSC263H1/CSC265H1/CSC378H1; CGPA 3.0/enrolment in a CSC subject POSt.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

ECE489H1    Compilers II[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/238H1/240H1; CGPA 3.0/enrolment in a CSC subject POSt.
Recommended Preparation: ECE385H1, proficiency in C.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC490H1    Capstone Design Project[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. At the time of printing, the theme for 2010/11 had not been chosen but see www.cs.utoronto.ca/~CSC490H1 for information about this year’s topic themes and required preparation. Ineligible for CR/NCR.

Prerequisite: Permission of the instructor; CGPA 3.0/enrolment in a CSC subject POSt. Consult the Arts & Science Registration Instructions and Timetable at http://www.artsci.utoronto.ca/current/course for course enrolment procedures.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC491H1    Capstone Design Project[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. At the time of printing, the theme FOR 2010/11 had not been chosen but see www.cs.utoronto.ca/~CSC490H1 for information about this year’s topic themes and required preparation. (Not offered in 2011-2012) Ineligible for CR/NCR.

Prerequisite: Permission of the instructor; CGPA 3.0/enrolment in a CSC subject POSt. Consult the Arts & Science Registration Instructions and Timetable at http://www.artsci.utoronto.ca/current/course for course enrolment procedures.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC494H1    Computer Science Project[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. Ineligible for CR/NCR.

Prerequisite: Three 300-level Computer Science half-courses, a CGPA of 3.00 (2.50 for students in a CSC Program), and permission of the Associate Chair, Undergraduate Studies. Consult the Arts & Science Registration Instructions and Timetable at http://www.artsci.utoronto.ca/current/course for course enrolment procedures.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)

CSC495H1    Computer Science Project[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. Ineligible for CR/NCR.

Prerequisite: Three 300-level Computer Science half-courses, a CGPA of 3.00 (2.50 for students in a CSC Program), and permission of the Associate Chair, Undergraduate Studies. Consult the Arts & Science Registration Instructions and Timetable at http://www.artsci.utoronto.ca/current/course for course enrolment procedures.
Distribution Requirement Status: This is a Science course
Breadth Requirement: The Physical and Mathematical Universes (5)