# Computer Science

Faculty List- A. Anderson, B.Eng. (McGill), M.Sc., Ph.D. (Stanford),
*Assistant Professor* - A. Bretscher, B.Sc., M.Sc. (Queen's), Ph.D. (Toronto),
*Associate Professor, Teaching Stream* - N. Cheng, B.Sc. (Toronto),
*Associate Professor, Teaching Stream* - W.H. Enright, B.Sc. (U.B.C.), M.Sc., Ph.D. (Toronto),
*Professor Emeritus* - J. Estrada, B.Eng. (ITESM, Mex.), M.Sc., Ph.D. (Toronto),
*Associate Professor, Teaching Stream* - D.J. Fleet, B.Sc. (Queen's), M.Sc., Ph.D. (Toronto),
*Professor* - V. Hadzilacos, B.S.E. (Princeton), Ph.D. (Harvard),
*Professor* - B. Harrington, Hon. B.Sc. (Toronto), M.Sc., D.Phil. (Oxford),
*Assistant Professor, Teaching Stream* - G. Hirst, B.A., B.Sc. (Monash), M.Sc. (A.N.U., U.B.C.), Ph.D. (Brown),
*Professor* - N. Koudas, B.Sc. (Patras), M.Sc. (Maryland), Ph.D. (Toronto),
*Professor* - M. Molloy, B.Math, M.Math (Waterloo), Ph.D. (Carnegie Mellon),
*Professor* - R. Pancer, B.Sc., M.Sc., Ph.D. (Toronto),
*Associate Professor, Teaching Stream* - G. Pekhimenko, B.Sc. (Taurida), M.Sc. (Toronto), Ph.D. (Carnegie),
*Assistant Professor* - A. Rosselet, B.Sc. (NCSU), M.Sc., Ph.D. (Toronto),
*Associate Professor, Teaching Stream**Emeritus* - T. Sans, B.Sc. (Paul Sabatier), M.Sc. (Supaero), Ph.D. (Telecom-Bretagne),
*Assistant Professor, Teaching Stream* - B. Schroeder, M.Sc. (Saarbrucken), Ph.D. (Carnegie Mellon),
*Associate Professor* - A. Tafliovich, Hon. B.Sc., M.Sc., Ph.D. (Toronto),
*Assistant Professor, Teaching Stream*

*Associate Chair:* B. Schroeder *Email*: bianca@cs.toronto.edu (416-287-7235)

Computer science is the study of the use of computers to process information. The form of this information may vary widely, from the business person's records or the scientist's experimental results to the linguist's texts. One of the fundamental concepts in computer science is the algorithm - a list of instructions that specify the steps required to solve a problem. Computer science is concerned with producing correct, efficient, and maintainable algorithms for a wide variety of applications. Closely related is the development of tools to foster these goals: programming languages for expressing algorithms; operating systems to manage the resources of a computer; and various mathematical and statistical techniques to study the correctness and efficiency of algorithms.

Theoretical computer science is concerned with the inherent difficulty of problems that can make them intractable by computers. Numerical analysis, data management systems, computer graphics, and artificial intelligence are concerned with the applications of computers to specific problem areas.

**Limited Enrolment**Because of pressures of demand for places, it has been necessary to place enrolment limits on most CSC courses and on admission to the Major and Specialist Programs. Information on how to apply for admission to a Program is given below.

**Note on Admission to CSC Courses**

CSC courses are open to all students who meet the pre-requisites. Non-CSC program students who wish to take B-, C-, or D- level courses must meet additional Cumulative GPA (CGPA) requirements:

- A student who is not in a CSC program and does not have a CGPA of at least 2.5 may not take any B- level CSC course.
- A student who is not in a CSC program and does not have a CGPA of at least 3.0 may not take any C- or D-level CSC course.
- When a B-, C-, or D-level CSC course approaches its capacity, CSC program students will be given preference for further enrollment over non-CSC program students.
- Students admitted to the Major or Specialist Program in Computer Science at any point after first year will be subject to retroactive program tuition fees.

**Service Learning and Outreach (Previously known as Science Engagement)**

For experiential learning through community outreach and classroom in-reach, please see the Teaching and Learning section of this *Calendar*.

## Computer Science Programs

SPECIALIST PROGRAM IN COMPUTER SCIENCE (SCIENCE)*Supervisor of Studies*: R. Pancer (416-287-7679) *Email*: pancer@utsc.utoronto.ca

**Program Objectives**

This program provides a working knowledge of the foundations of computer science: modern computer software and hardware, theoretical aspects of computer science, and relevant areas of mathematics and statistics. It also imparts an appreciation of the discipline's transformative impact on science and society. The program prepares students for further study and for careers in the computing industry. It comprises five streams with different emphases:

**The Comprehensive Stream** provides a broad and balanced exposure to the discipline. It is the stream best-suited for students planning to pursue graduate study in computer science, but it is also suitable for other career paths.

**The Software Engineering Stream** places a greater emphasis on the engineering side of the discipline, including computer systems and core applications.

**The Information Systems Stream** has a similar focus as the Software Engineering Stream, but it provides additional exposure to certain aspects of business management. It is of special interest to students wishing to pursue careers in technical management but who have a deep interest in the technology.

**The Health Informatics Stream** provides a broad perspective of the discipline and exposure to additional subjects, including statistics and social sciences, that are useful for a career as a computer scientist in the health sector.

**The Entrepreneurship Stream** includes a solid core of computer science and software engineering, while exposing students to the framework and methodologies that underlie the development of innovative technology ideas into viable commercial opportunities. Enrolment into the Entrepreneurship stream will be limited to highly qualified and motivated students, and preference will be given to students enrolled in the Specialist (Co-operative) program.

The structure of the program requirements allows one to easily switch streams until relatively late in the program. Consequently, these streams should not be viewed as rigidly separated channels feeding students to different career paths, but as a flexible structure that provides computer science students guidance in their course selection based on their broad (but possibly fluid) interests.

**Program Admission**

Enrolment in the Specialist in Computer Science (all streams) is limited.

Students may apply to enter the program after completing 4.0 credits, and must have passed all of the A-level CSC and MAT courses required in the program. Students with a CGPA of 2.5 or greater across the core A-level courses (CSCA08H3, CSCA48H3, CSCA67H3, MATA23H3, MATA31H3, and MATA37H3) are guaranteed admission. Admission to the Entrepreneurship stream also requires the submission of a Supplementary Application Form (SAF) available from the CMS website.

Students who are not admitted as above, may apply after completing at least 7.5 credits, including CSCA08H3, CSCA48H3, CSCA67H3, MATA23H3, MATA31H3, MATA37H3, CSCB07H3, CSCB09H3, CSCB36H3, CSCB63H3, and [one of MATB24H3 or STAB52H3]. The CGPA will be calculated across these 11 courses, and a CGPA of 2.5 or greater guarantees admission to the Specialist. Admission for students with a CGPA that is less than 2.5 will depend on their CGPA, and the space available in the program.

**Program Requirements**

To remain in the program, a student must maintain a CGPA of 2.0 or higher throughout the program. To complete the program, a student must meet the course requirements described below. (One credit is equivalent to two courses). The program requirements comprise a core of 18 courses (9.0 credits), common to all streams and additional requirements which depend on the stream, for a total of 27 courses (13.5 credits) for the Comprehensive, Software Engineering, and Entrepreneurship streams, 29 courses (14.5 credits) for the Information Systems stream, and 30 courses (15.0 credits) for the Health Informatics stream.**Note:** Many Computer Science courses are offered both at U of T Scarborough and at the St. George campus. When a course is offered at both campuses in a given session, U of T Scarborough students are expected to take that course at U of T Scarborough. The Department of Computer Science at the St. George campus cannot guarantee space for U of T Scarborough students in their courses, especially those offered at both campuses.

**Core (9.0 credits)**

**1. Writing Requirement (0.5 credit) (*)****One of**: ANTA01H3, ANTA02H3, (CLAA02H3), (CTLA19H3), CTLA01H3, ENGA10H3, ENGA11H3, ENGB06H3, ENGB07H3, ENGB08H3, ENGB09H3, ENGB17H3, ENGB19H3, ENGB50H3, (ENGB51H3), GGRA02H3, GGRA03H3, GGRB05H3, (GGRB06H3), (HISA01H3), (HLTA01H3), ACMA01H3, (HUMA01H3), (HUMA11H3), (HUMA17H3), (LGGA99H3), LINA01H3, PHLA10H3, PHLA11H3, WSTA01H3.

(*) It is recommended that this requirement be satisfied by the end of the second year.**2. A-level courses (3.0 credits)**

CSCA08H3 Introduction to Computer Science I

CSCA48H3 Introduction to Computer Science II

CSCA67H3 Discrete Mathematics

MATA23H3 Linear Algebra I

MATA31H3 Calculus I for Mathematical Sciences

MATA37H3 Calculus II for Mathematical Sciences **3. B-level courses (3.5 credits)**

CSCB07H3 Software Design

CSCB09H3 Software Tools and Systems Programming

CSCB36H3 Introduction to the Theory of Computation

CSCB58H3 Computer Organization

CSCB63H3 Design and Analysis of Data Structures

MATB24H3 Linear Algebra II

STAB52H3 Introduction to Probability **4. C-level courses (1.5 credits)**

CSCC43H3 Introduction to Databases

CSCC69H3 Operating Systems

CSCC73H3 Algorithm Design and Analysis **5. D-level courses (0.5 credit)**

CSCD03H3 Social Impact of Information Technology **A. Comprehensive Stream**

This stream requires a total of 27 courses (13.5 credits). In addition to the core requirements 1-5 common to all streams, 9 other distinct courses (4.5 credits) must be chosen satisfying all of the following requirements:

**6. Additional required courses (2.5 credits)**

MATB41H3 Techniques of the Calculus of Several Variables I

CSCC24H3 Principles of Programming Languages

CSCC37H3 Introduction to Numerical Algorithms for Computational Mathematics

CSCC63H3 Computability and Computational Complexity

CSCD37H3 Analysis of Numerical Algorithms for Computational Mathematics

**7. Electives from courses on computer systems and applications (1.0 credit)****Two of:**

CSCC01H3 Introduction to Software Engineering

CSCC09H3 Programming on the Web

CSCC11H3 Introduction to Machine Learning and Data Mining

CSCC85H3 Introduction to Embedded Systems

CSCD01H3 Engineering Large Software Systems

CSCD18H3 Computer Graphics

CSCD27H3 Computer and Network Security

CSCD43H3 Database System Technology

CSCD58H3 Computer Networks

CSCD84H3 Artificial Intelligence

CSC318H Design of Interactive Computational Media

CSC320H Visual Computing

CSC321H Introduction to Neural Networks and Machine Learning

CSC401H Natural Language Computing

CSC469H Operating Systems Design and Implementation

CSC485H Computational Linguistics

CSC488H Compilers and Interpreters

**8. Electives from courses related to the theory of computing (0.5 credit)****One of:**

MATC09H3 Introduction to Mathematical Logic

MATC16H3 Coding Theory and Cryptography

MATC32H3 Graph Theory and Algorithms for its Applications

MATC44H3 Introduction to Combinatorics

CSC438H Computability and Logic

CSC448H Formal Languages and Automata

CSC465H Formal Methods in Software Design**9. CSC, MAT, or STA elective (0.5 credit)****One of:**

Any C- or D-level CSC, MAT, or STA course, excluding MATC82H3, MATC90H3, and STAD29H3.**B. Software Engineering Stream**

This stream requires a total of 27 courses (13.5 credits). In addition to the core requirements 1-5 common to all streams, 9 other distinct courses (4.5 credits) must be chosen satisfying all of the following requirements:**6. Additional required courses (3.0 credits)**MATB41H3 Techniques of the Calculus of Several Variables I

CSCC01H3 Introduction to Software Engineering

CSCC24H3 Principles of Programming Languages

CSCC37H3 Introduction to Numerical Algorithms for Computational Mathematics

CSCC63H3 Computability and Computational Complexity

CSCD01H3 Engineering Large Software Systems

**7. Electives from courses on computer systems and applications (1.5 credits)**

**Three of:**

CSCC09H3 Programming on the Web

CSCC11H3 Introduction to Machine Learning and Data Mining

CSCC85H3 Introduction to Embedded Systems

CSCD18H3 Computer Graphics

CSCD27H3 Computer and Network Security

CSCD43H3 Database System Technology

CSCD58H3 Computer Networks

CSCD84H3 Artificial Intelligence

CSC318H Design of Interactive Computational Media

CSC320H Visual Computing

CSC321H Introduction to Neural Networks and Machine Learning

CSC401H Natural Language Computing

CSC469H Operating Systems Design and Implementation

CSC485H Computational Linguistics

CSC488H Compilers and Interpreters

**C. Information Systems Stream**

This stream requires a total of 29 courses (14.5 credits). In addition to the core requirements 1-5 common to all streams, 11 other distinct courses (5.5 credits) must be chosen satisfying all of the following requirements:

**6. Required management courses (1.5 credits)**

MGTA01H3/(MGTA03H3) Introduction to Business

MGTA02H3/(MGTA04H3) Managing the Business Organization

MGHB02H3 Managing People and Groups in Organizations**7. Additional required mathematics and computer science courses (3.0 credits)**MATB41H3 Techniques of the Calculus of Several Variables I

CSCC01H3 Introduction to Software Engineering

CSCC37H3 Introduction to Numerical Algorithms for Computational Mathematics

CSCC63H3 Computability and Computational Complexity

CSCD01H3 Engineering Large Software Systems

CSCD43H3 Database System Technology

**8. Electives from courses on computer systems and applications (1.0 credit)**

**Two of**:

CSCC09H3 Programming on the Web

CSCC11H3 Introduction to Machine Learning and Data Mining

CSCC85H3 Introduction to Embedded Systems

CSCD18H3 Computer Graphics

CSCD27H3 Computer and Network Security

CSCD58H3 Computer Networks

CSCD84H3 Artificial Intelligence

CSC318H Design of Interactive Computational Media

CSC320H Visual Computing

CSC321H Introduction to Neural Networks and Machine Learning

CSC401H Natural Language Computing

CSC469H Operating Systems Design and Implementation

CSC485H Computational Linguistics

CSC488H Compilers and Interpreters

**D. Health Informatics Stream**

This stream requires a total of 30 courses (15.0 credits). In addition to the core requirements 1-5 common to all streams, 12 other distinct courses (6.0 credits) must be chosen satisfying all of the following requirements:

**6. Additional courses related to health studies (2 credits)**

PHLB09H3 Biomedical Ethics

(MGTA06H3) Introduction to Health Management***One of:** (courses on health policy and politics)

HLTB16H3 Introduction to Public Health

HLTB17H3 Conceptual Models of Health

HLTB40H3 Health Policy and Health Systems

(HLTC40H3) Introduction to Health Economics**One of:** (other courses on health studies)

HLTB22H3 Biological Determinants of Health

HLTC05H3 Society, Health and Illness*

(*) These courses have prerequisites not included in this program’s requirements.**7. Additional required computer science and statistics courses (1.5 credits)**

CSCC01H3 Introduction to Software Engineering

STAB57H3 Introduction to Statistics

STAC50H3 Data Collection **8. Additional CSC, MAT and STA courses (2.5 credits)**

MATB41H3 Techniques of the Calculus of Several Variables I

Four of:

any other C- or D-level CSC or STA courses, excluding STAD29H3 **†**
NOTE:** Of the five courses taken to satisfy this requirement, at least one must be a D-level course, and at least three must be CSC courses.

** Some C- and D-level CSC and STA courses have prerequisites that are not included among the required courses for this stream. Review the prerequisites carefully before selecting courses for this requirement. One or more courses taken to satisfy this requirement can be prerequisites for other courses also taken to satisfy this requirement.

† Among the CSC courses that can be used to satisfy this requirement there are two categories of courses that are particularly well aligned with the goals of the Health Informatics stream: software engineering and systems, and computer science applications. Courses in the category of software engineering and systems include: CSCC09H3, CSCC85H3, CSCD01H3, CSCD43H3, and CSCD58H3. Courses in the category of computer science applications include: CSCC11H3, CSCD18H3, and CSCD84H3.

**E. Entrepreneurship Stream**

This stream requires a total of 27 courses (13.5 credits). In addition to the core requirements 1-5 common to all streams, 9 other distinct courses (4.5 credits) must be chosen satisfying all of the following requirements:

**CSCC01H3 Introduction to Software Engineering**

6. Additional required courses (3.0 credits)

6. Additional required courses (3.0 credits)

CSCC37H3 Introduction to Numerical Algorithms for Computational Mathematics

CSCC63H3 Computability and Computational Complexity

CSCD01H3 Engineering Large Software Systems

CSCD54H3 Technology Innovation and Entrepreneurship

CSCD90H3 The Startup Sandbox

**7. Electives from courses in computer science, mathematics, and statistics (1.5 credits)**

Three of:

MATB41H3 Techniques of the Calculus of Several Variables I

Three of:

STAB57H3 Introduction to Statistics

CSCC09H3 Programming on the Web

CSCC11H3 Introduction to Machine Learning and Data Mining

CSCC24H3 Principles of Programming Languages

CSCC85H3 Introduction to Embedded Systems

CSCD18H3 Computer Graphics

CSCD27H3 Computer and Network Security

CSCD43H3 Database System Technology

CSCD58H3 Computer Networks

CSCD84H3 Artificial Intelligence

CSC318H Design of Interactive Computational Media

CSC320H Visual Computing

CSC321H Introduction to Neural Networks and Machine Learning

CSC401H Natural Language Computing

CSC469H Operating Systems Design and Implementation

CSC485H Computational Linguistics

CSC488H Compilers and Interpreters

*Supervisor of Studies:* R. Pancer (416-287-7679) *Email*: pancer@utsc.utoronto.ca

*Co-op Contact*: askcoop@utsc.utoronto.ca

**Program Objectives**This program combines the coursework of the Specialist Program in Computer Science described above with paid work terms in public and private enterprises. It shares the goals and structure of the Specialist Program in Computer Science, including its five streams (Comprehensive, Software Engineering, Information Systems, Health Informatics, and Entrepreneurship), but complements study of the subject with considerable work experience.

**Program Admission**

Refer to the Program Admission requirements for the Specialist Program in Computer Science described above and section 6B.5 (Co-operative Programs) in this *Calendar*. Students entering this program after first year must have a CGPA of at least 2.75. Admission to the Entrepreneurship also requires the submission of a Supplementary Application form available from the CMS website.

**Program Requirements**

To remain in the program, a student must maintain a CGPA of 2.5 or higher throughout the program. To complete the program, a student must meet the work term and course requirements described below.

**Work Term Eligibility & Requirements**

Students must successfully complete three work terms, at most one of which can be during the summer. In addition, prior to their first work term, students must successfully complete a minimum of 7.0 credits, including all first year required courses (CSCA08H3, CSCA48H3, CSCA67H3, MATA23H3, MATA31H3, MATA37H3), as well as the non-credit Arts & Science Co-op Navigating the World of Work Course (COPD01).

**Course Requirements**

The Co-operative Program can be taken in conjunction with any of the streams in the Specialist Program in Computer Science. For the course requirements of each stream, please refer to the description of the Specialist Program in Computer Science.

*Supervisor of Studies:* R. Pancer (416-287-7679) *Email*: pancer@utsc.utoronto.ca

**Program Objectives**

This program provides basic knowledge of the foundations of computer science: modern computer software and hardware, theoretical aspects of computer science, and relevant areas of mathematics and statistics. This program is intended to be combined with other programs, typically a major program in another discipline.

**Program Admission**

Enrolment in the Major in Computer Science is limited.

Students may apply to enter the program after completing 4.0 credits, and must have passed all of the A-level CSC and MAT courses required for the Major. Students with a CGPA of 2.5 or greater across the core A-level courses (CSCA08H3, CSCA48H3, CSCA67H3, MATA23H3, MATA31H3, and MATA37H3) are guaranteed admission.

Students who are not admitted as above, may apply after completing at least 7.5 credits, including CSCA08H3, CSCA48H3, CSCA67H3, MATA23H3, MATA31H3, MATA37H3, CSCB07H3, CSCB09H3, CSCB36H3, CSCB63H3, and [one of MATB24H3 or STAB52H3]. The CGPA will be calculated across these 11 courses, and a CGPA of 2.5 or greater guarantees admission to the Major. Admission for students with a CGPA that is less than 2.5 will depend on their CGPA, and the space available in the program.**Program Requirements**

This program requires a total of 16 distinct courses (8 credits) satisfying all of the requirements listed below.

**Note: **Many Computer Science courses are offered both at U of T Scarborough and at the St. George campus. When a course is offered at both campuses in a given session, U of T Scarborough students are expected to take that course at U of T Scarborough. The Department of Computer Science at the St. George campus cannot guarantee space for U of T Scarborough students in their courses, especially those offered at both campuses.**1. A-level courses (3 credits)**

CSCA08H3 Introduction to Computer Science I

CSCA48H3 Introduction to Computer Science II

CSCA67H3 Discrete Mathematics

MATA23H3 Linear Algebra I

MATA31H3 Calculus I for Mathematical Sciences

MATA37H3 Calculus II for Mathematical Sciences **2. B-level courses (3 credits)**

CSCB07H3 Software Design

CSCB09H3 Software Tools and Systems Programming

CSCB36H3 Introduction to the Theory of Computation

CSCB58H3 Computer Organization

CSCB63H3 Design and Analysis of Data Structures

**One of: (*)**

MATB24H3 Linear Algebra II

STAB52H3 Introduction to Probability

(*) In making this choice, students should consider the prerequisites of courses they plan to take to satisfy requirements 3-4.

**3. C-level courses in numerical computation and theory of computing (1 credit)**

CSCC37H3 Introduction to Numerical Algorithms for Computational Mathematics**One of:**

CSCC63H3 Computability and Computational Complexity

CSCC73H3 Algorithm Design and Analysis

**4. CSC electives (1 credit)****Two of:**

Any C- or D-level CSC courses.

**Writing Recommendation:**

Students are urged to take a course from the following list of courses by the end of their second year: ANTA01H3, ANTA02H3, (CLAA02H3), (CTLA19H3), CTLA01H3, ENGA10H3, ENGA11H3, ENGB06H3, ENGB07H3, ENGB08H3, ENGB17H3, ENGB19H3, ENGB50H3, (ENGB51H3), GGRA02H3, GGRA03H3, GGRB05H3, (GGRB06H3), (HISA01H3), (HLTA01H3), (HUMA01H3), (HUMA11H3), (HUMA17H3), (LGGA99H3), LINA01H3, PHLA10H3, PHLA11H3, WSTA01H3.

* Supervisor of Studies*: R. Pancer (416-287-7679) *E-mail*: pancer@utsc.utoronto.ca

*Co-op Contact*: askcoop@utsc.utoronto.ca

**Program Objectives**This program combines the coursework of the Major Program in Computer Science described above with paid work terms in public and private enterprises. It shares the objectives of the Major Program in Computer Science, but complements study of the subject with considerable work experience. This program must be combined with a major program in another discipline.

**Program Admission**

Refer to the Program Admission requirements for the Major Program in Computer Science described above and section 6B.5 (Co-operative Programs) in this *Calendar*. Students entering this program must have a CGPA of at least 2.75.

**Program Requirements**

To remain in the program, a student must maintain a CGPA of 2.5 or higher throughout the program. To complete the program, a student must meet the work term and course requirements described below.

**Work Term Eligibility & Requirements**

Students must successfully complete three work terms, at most one of which can be during the summer. In addition, prior to their first work term, students must successfully complete a minimum of 7.0 credits, including all first year required courses (CSCA08H3, CSCA48H3, CSCA67H3, MATA23H3, MATA31H3, MATA37H3), as well as the non-credit Arts & Science Co-op Navigating the World of Work Course (COPD01).

**Course Requirements**

The course requirements of the Co-operative Major Program in Computer Science are identical to those of the Major Program in Computer Science described above.

*Supervisor of Studies*: R. Pancer (416-287-7679) *Email*: pancer@utsc.utoronto.ca

**Program Objectives**

This program provides a basic introduction to the tools and methodologies of computer science and equips students with the knowledge necessary to use the tools and methodologies as they relate to other subjects. The program is intended to complement programs in other disciplines.**Program Admission
**

Enrolment in the Minor in Computer Science is limited.

Students may apply to enter the program after completing 4.0 credits, and must have passed all of the A-level CSC and MAT courses required for the Minor. Students with a CGPA of at least 2.5 across CSCA48H3 and their chosen MAT course (MATA23H3, MATA30H3, MATA31H3, MATA32H3, or CSCA67H3/MATA67H3) are guaranteed admission. Admission for students with a CGPA that is less than 2.5 will depend on their CGPA, and the space available in the program. Students in the Minor may take a maximum of 3 CSC elective courses (1.5 credits) at the C-level and D-level.**Program Requirements**

This program may not be combined with any Major or Specialist Program in Computer Science, Mathematics or Statistics. It requires 4.0 credits as follows:

**1.** **Introductory programming courses** **(1.0 credit)**

CSCA08H3 Introduction to Computer Science I (*)

CSCA48H3 Introduction to Computer Science II

(*) CSCA20H3 may be substituted for CSCA08H3 with permission of the Supervisor of Studies.

**2.** **Basic mathematics courses (0.5 credit)****One of:**

CSCA67H3/MATA67H3 Discrete Mathematics

MATA23H3 Linear Algebra I

MATA30H3 Calculus I for Physical Sciences

MATA31H3 Calculus I for Mathematical Sciences

MATA32H3 Calculus for Management I

PHLB50H3 Symbolic Logic I

**3.** **Intermediate programming, systems, and theory courses** **(1.5 credits)****Three of:**

CSCB07H3 Software Design

CSCB09H3 Software Tools and Systems Programming

CSCB20H3 Introduction to Databases and Web Applications

CSCB36H3 Introduction to the Theory of Computation(**)

CSCB58H3 Computer Organization

CSCB63H3 Design and Analysis of Data Structures(***)

(**) CSCB36H3 requires CSCA67H3

(***) CSCB63H3 requires CSCB36H3

**4. CSC electives (1.0 credit)****Two of:**

Any C- or D-level CSC courses (*)

(*) Some C- or D-level courses have prerequisites that would have to be taken *in addition* to the 4 credits required for this program. Check the prerequisites carefully before selecting courses to satisfy this requirement.

## Computer Science Courses

CSCA08H3 Introduction to Computer Science I

Programming in an object-oriented language such as Python. Program structure: elementary data types, statements, control flow, functions, classes, objects, methods. Lists; searching, sorting and complexity. This course is intended for students having a serious interest in higher level computer science courses, or planning to complete a computer science program.

Prerequisite: Grade 12 Calculus & Vectors and one other Grade 12 mathematics course.Exclusion: CSCA20H3, CSC108H, CSC120H. CSCA08H3 may not be taken after or concurrently with CSCA48H3.

Breadth Requirement: Quantitative Reasoning

NOTE: This course does not require any prior exposure to computer programming.

CSCA20H3 Introduction to Programming

An introduction to computer programming, with an emphasis on gaining practical skills. Introduction to programming, software tools, database manipulation. This course is appropriate for students with an interest in programming and computers who do not plan to pursue a Computer Science program.

Exclusion: CSCA08H3, CSC108H, CSC120HBreadth Requirement: Quantitative Reasoning

NOTE: This course does not require any prior exposure to computer programming.

CSCA48H3 Introduction to Computer Science II

Abstract data types and data structures for implementing them. Linked data structures. Object Oriented Programming. Encapsulation and information-hiding. Testing. Specifications. Analyzing the efficiency of programs. Recursion.

Prerequisite: CSCA08H3Exclusion: CSC148H

Breadth Requirement: Quantitative Reasoning

CSCA67H3 Discrete Mathematics

Introduction to discrete mathematics: Elementary combinatorics; discrete probability including conditional probability and independence; graph theory including trees, planar graphs, searches and traversals, colouring. The course emphasizes topics of relevance to computer science, and exercises problem-solving skills and proof techniques such as well ordering, induction, contradiction, and counterexample.

Same as MATA67H3

Exclusion: MATA67H3, (CSCA65H3), CSC165H, CSC240H, MAT102H

Recommended Preparation: CSCA08H3 or CSCA20H3

Breadth Requirement: Quantitative Reasoning

CSCB07H3 Software Design

An introduction to software design and development concepts, methods, and tools, using a statically-typed object-oriented language such as Java. Topics from: version control, build management, unit testing, refactoring, object oriented design and development, design patterns and advanced IDE usage.

Prerequisite: CSCA48H3 and [CGPA 2.5 or enrolment in a CSC Subject POSt]Exclusion: CSC207H

Breadth Requirement: Quantitative Reasoning

CSCB09H3 Software Tools and Systems Programming

Software techniques in a Unix-style environment, using scripting languages and a machine-oriented programming language (typically C). What goes on in the 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: CSCA48H3 & [CGPA 2.5 or enrolment in a CSC Subject POSt]Exclusion: CSC209H

Breadth Requirement: Quantitative Reasoning

CSCB20H3 Introduction to Databases and Web Applications

A practical introduction to databases and Web app development. Databases: terminology and applications; creating, querying and updating databases; the entity-relationship model for database design. Web documents and applications: static and interactive documents; Web servers and dynamic server-generated content; Web application development and interface with databases.

Prerequisite: Some experience with programming in an imperative language such as Python, Java or C.Exclusion: This course may not be taken after - or concurrently with - any C- or D-level CSC course.

Recommended Preparation: CSCA08H3 or CSCA20H3

Breadth Requirement: Quantitative Reasoning

CSCB29H3 Concepts in Elementary Computer Science

A course specifically for students intending to become elementary or high school teachers. Computer science concepts will be discussed at a fundamental level. Topics covered: problem solving, algorithms, recursion, applications, connections to mathematics, connections to society. Throughout the course, students will apply these concepts to fit the current Ministry's Guidelines for the various grade levels. Students may be required to teach some one-hour classes to various grade levels in an approved school. This is a "teaching friendly" course. The course will be broken up into three distinct topics: elementary level (grades K-5), intermediate (grades 6-9), senior (grades 10-12).

Prerequisite: [CSCA08H3 or CSCA20H3 or PSCB57H3] & 3 other credits & a CGPA of at least 2.5. Priority will be given to ETP/CTEP students.**Note**: This course assumes programming experience in a language such as Python, C++ or Java as provided by CSCA08H3. Students who already have this background may consult the instructor or Supervisor of Studies for advice about skipping CSCA08H3/CSCA20H3/PSCB57H3.

Exclusion: This course may not be taken after - or concurrently with - any C- or D-level CSC course.

Breadth Requirement: Quantitative Reasoning

CSCB36H3 Introduction to the Theory of Computation

Mathematical induction with emphasis on applications relevant to computer science. Aspects of mathematical logic, correctness proofs for iterative and recursive algorithms, solutions of linear and divide-and-conquer recurrences, introduction to automata and formal languages.

Prerequisite: CSCA48H3 & [(CSCA65H3) or CSCA67H3] & [CGPA 2.5 or enrolment in a CSC Subject POSt]Exclusion: CSC236H, CSC240H

Breadth Requirement: Quantitative Reasoning

CSCB58H3 Computer Organization

Principles of the design and operation of digital computers. Binary data representation and manipulation, Boolean logic, components of computer systems, memory technology, peripherals, structure of a CPU, assembly languages, instruction execution, and addressing techniques. There are a number of laboratory periods in which students conduct experiments with digital logic circuits.

Prerequisite: [CSCA48H3 or PSCB57H3] & [CGPA 2.5 or enrolment in a CSC Subject POSt]Exclusion: CSC258H

Breadth Requirement: Quantitative Reasoning

CSCB63H3 Design and Analysis of Data Structures

Design, analysis, implementation and comparison of efficient data structures for common abstract data types. Priority queues: heaps and mergeable heaps. Dictionaries: balanced binary search trees, B-trees, hashing. Amortization: data structures for managing dynamic tables and disjoint sets. Data structures for representing graphs. Graph searches.

Prerequisite: CSCB36H3 & [CGPA 2.5 or enrolment in a CSC Subject POSt]Exclusion: CSC263H, CSC265H

Breadth Requirement: Quantitative Reasoning

CSCC01H3 Introduction to Software Engineering

Introduction to software development methodologies with an emphasis on agile development methods appropriate for rapidly-moving projects. Basic software development infrastructure; requirements elicitation and tracking; prototyping; basic project management; basic UML; introduction to software architecture; design patterns; testing.

Prerequisite: CSCB07H3, CSCB09H3, & [CGPA 3.0 or enrolment in a CSC Subject POSt]Exclusion: CSC301H, (CSCC40H3), (CSCD08H3)

Breadth Requirement: Quantitative Reasoning

CSCC09H3 Programming on the Web

An introduction to software development on the web. Concepts underlying the development of programs that operate on the web. Operational concepts of the internet and the web, static and dynamic client content, dynamically served content, n-tiered architectures, web development processes and security on the web.

Prerequisite: CSCB09H3 & CSCC43H3 & [CGPA 3.0 or enrolment in a CSC Subject POSt]Exclusion: CSC309H

Breadth Requirement: Quantitative Reasoning

CSCC10H3 Human-Computer Interaction

The course will provide an introduction to the field of Human-Computer Interaction (HCI) with emphasis on guidelines, principles, methodologies, and tools and techniques for analyzing, designing and evaluating user interfaces. Subsequent topics include usability assessment of interactive systems, prototyping tools, information search and visualization, mobile devices, social media and social networking, and accessibility factors.

Prerequisite: CSCB07H3 and [CGPA 3.0 or enrolment in a CSC Subject POSt]Exclusion: CCT380H, CSC318H

Breadth Requirement: Quantitative Reasoning

CSCC11H3 Introduction to Machine Learning and Data Mining

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 and non-linear models, class-conditional models, neural networks, and Bayesian methods. Clustering algorithms and dimensionality reduction. Model selection. Problems of over-fitting and assessing accuracy. Problems with handling large databases.

Prerequisite: MATB24H3 and MATB41H3 and STAB52H3 and [CGPA 3.0 or enrolment in a CSC, STA or Quantitative Analysis Subject POSt].Exclusion: CSC411H, (CSCD11H3)

Recommended Preparation: CSCC37H3

Breadth Requirement: Quantitative Reasoning

CSCC24H3 Principles of Programming Languages

Major topics in the design, definition, analysis, and implementation of modern programming languages. Study of programming paradigms: procedural (e.g., C, Java, Python), functional (e.g., Scheme, ML, Haskell) and logic programming (e.g., Prolog, Mercury).

Prerequisite: CSCB07H3 & CSCB09H3 & [CGPA 3.0 or enrolment in a CSC Subject POSt]Exclusion: CSC324H

Breadth Requirement: Quantitative Reasoning

CSCC37H3 Introduction to Numerical Algorithms for Computational Mathematics

An introduction to computational methods for solving problems in linear algebra, non-linear equations, approximation and integration. Floating-point arithmetic; numerical algorithms; application of numerical software packages.

Prerequisite: [MATA36H3 or MATA37H3] & MATA23H3 & [CGPA 3.0 or enrolment in a CSC Subject POSt]Exclusion: (CSCC36H3), (CSCC50H3), (CSCC51H3), CSC336H, CSC350H, CSC351H, CSC338H

Breadth Requirement: Quantitative Reasoning

CSCC43H3 Introduction to Databases

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

Prerequisite: CSCB09H3 & CSCB63H3 [CGPA 3.0 or enrolment in a CSC Subject POSt]Exclusion: CSC343H

Breadth Requirement: Quantitative Reasoning

CSCC63H3 Computability and Computational Complexity

Introduction to the theory of computability: Turing machines, Church's thesis, computable and non-computable functions, recursive and recursively enumerable sets, reducibility. Introduction to complexity theory: models of computation, P, NP, polynomial time reducibility, NP-completeness, further topics in complexity theory.

**Note**: Although the courses CSCC63H3 & CSCC73H3 may be taken in any order, it is recommended that CSCC73H3 be taken first.

Exclusion: CSC363H, CSC365H, CSC364H

Breadth Requirement: Quantitative Reasoning

CSCC69H3 Operating Systems

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

Prerequisite: CSCB07H3 & CSCB09H3 & CSCB58H3 & [CGPA 3.0 or enrolment in a CSC Subject POSt]Exclusion: CSC369H

Breadth Requirement: Quantitative Reasoning

CSCC73H3 Algorithm Design and Analysis

Standard algorithm design techniques: divide-and-conquer, greedy strategies, dynamic programming, linear programming, randomization, and possibly others.

Prerequisite: CSCB63H3 & STAB52H3; [CGPA 3.0 or enrolment in a CSC Subject POSt]Exclusion: CSC373H, CSC375H, CSC364H

Breadth Requirement: Quantitative Reasoning

CSCC85H3 Introduction to Embedded Systems

The course covers the components and fundamental principles of operation of systems built around micro-processing elements: the architecture, operation, and types of micro-processing components; sensors, actuators, signal acquisition and processing, and basic principles of control theory. Laboratory sessions involving the use of a mobile robotic platform provide hands-on experience.

Prerequisite: CSCB58H3 and CSCB09H3 and [CGPA 3.0 or enrolment in a CSC Subject POSt]Exclusion: ECE385H

Recommended Preparation: CSCB07H3

Breadth Requirement: Quantitative Reasoning

CSCD01H3 Engineering Large Software Systems

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

Prerequisite: CSCC01H3 & [CGPA 3.0 or enrolment in a CSC Subject POSt]Exclusion: CSC302H, (CSCD08H3)

Breadth Requirement: Quantitative Reasoning

CSCD03H3 Social Impact of Information Technology

The trade-offs between benefits and risks to society of information systems, and related issues in ethics and public policy. Topics will include safety-critical software; invasion of privacy; computer-based crime; the social effects of an always-online life; and professional ethics in the software industry. There will be an emphasis on current events relating to these topics.

Prerequisite: 14.0 credits and enrolment in a Computer Science Subject POSt.Exclusion: CSC300H

Breadth Requirement: Social & Behavioural Sciences

CSCD18H3 Computer Graphics

Identification and characterization of objects manipulated in computer graphics, operations 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 modeling, transformations, illumination models, light effects; graphics packages and systems.

Prerequisite: MATB24H3 and MATB41H3 and [CSCB09H3 or proficiency in C] and CSCC37H3 and [a CGPA of at least 3.0 or enrolment in a Computer Science Subject POSt]Exclusion: CSC418H

Breadth Requirement: Quantitative Reasoning

CSCD27H3 Computer and Network Security

Public and symmetric key algorithms and their application; key management and certification; authentication protocols; digital signatures and data integrity; secure network and application protocols; application, system and network attacks and defences; intrusion detection and prevention; social engineering attacks; risk assessment and management.

Prerequisite: CSCB09H3 & CSCB36H3 & [CGPA 3.0 or enrolment in a CSC Subject POSt]Exclusion: CSC427H

Recommended Preparation: CSCC69H3

Breadth Requirement: Quantitative Reasoning

CSCD37H3 Analysis of Numerical Algorithms for Computational Mathematics

Most mathematical models of real systems cannot be solved analytically and the solution of these models must be approximated by numerical algorithms. The efficiency, accuracy and reliability of numerical algorithms for several classes of models will be considered. In particular, models involving least squares, non-linear equations, optimization, quadrature, and systems of ordinary differential equations will be studied.

Prerequisite: CSCC37H3 & MATB24H3 & MATB41H3 & [CGPA 3.0 or enrolment in a CSC Subject POSt]Exclusion: (CSCC50H3), (CSCC51H3), CSC350H, CSC351H

Breadth Requirement: Quantitative Reasoning

CSCD43H3 Database System Technology

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: CSCC43H3 & CSCC69H3 & CSCC73H3 & [CGPA 3.0 or enrolment in a CSC Subject POSt]Exclusion: CSC443H

Breadth Requirement: Quantitative Reasoning

CSCD54H3 Technology Innovation and Entrepreneurship

This course examines high-Tech innovation and entrepreneurship, principles of operation of successful high-tech enterprises, customer identification and validation, product development, business models, lean startup techniques, and financing of high-technology ventures. Students will work in teams to develop their own innovative product idea, and will produce a sound business plan to support their product.

Prerequisite: A minimum of 2.5 credits at the B-level or higher in CSC coursesCorequisite: CSCD90H3

Exclusion: CSC454H

Enrolment Limits: Restricted to students in the Entrepreneurship stream of the Specialist/Specialist Co-op programs in Computer Science

Breadth Requirement: Social & Behavioural Sciences

CSCD58H3 Computer Networks

Computer communication network principles and practice. The OSI protocol-layer model; Internet application layer and naming; transport layer and congestion avoidance; network layer and routing; link layer with local area networks, connection-oriented protocols and error detection and recovery; multimedia networking with quality of service and multicasting. Principles in the context of the working-code model implemented in the Internet.

Prerequisite: CSCB58H3 & CSCB63H3 & STAB52H3 & [CGPA 3.0 or enrolment in a CSC Subject POSt]Exclusion: CSC458H

Breadth Requirement: Quantitative Reasoning

CSCD71H3 Topics in Computer Science

A topic from computer science, selected by the instructor, will be covered.

The exact topic will typically change from year to year.

CSCD72H3 Topics in the Theory of Computing

A topic from theoretical computer science, selected by the instructor, will be covered.

The exact topic will typically change from year to year.

CSCD84H3 Artificial Intelligence

A study of the theories and algorithms of Artificial Intelligence. Topics include a subset of: search, game playing, logical representations and reasoning, planning, natural language processing, reasoning and decision making with uncertainty, computational perception, robotics, and applications of Artificial Intelligence. Assignments provide practical experience of the core topics.

Prerequisite: CSCC24H3 & STAB52H3 & [CGPA 3.0 or enrolment in a CSC subject POSt]Exclusion: CSC484H, CSC384H

Breadth Requirement: Quantitative Reasoning

CSCD90H3 The Startup Sandbox

In this capstone course, students will work in teams to develop a viable product prototype following the methodologies and techniques covered in CSCD54H3. Students will produce written reports, short videos pitching their idea, and a final presentation showcasing their proposed innovation, as it would be pitched to potential investors. The course instructor and TAs will provide close supervision and mentorship throughout the project.

Prerequisite: A minimum of 2.5 credits at the B-level or higher in CSC coursesCorequisite: CSCD54H3

Enrolment Limits: Restricted to students in the Entrepreneurship stream of the Specialist/Specialist Co-op programs in Computer Science

Breadth Requirement: Quantitative Reasoning

CSCD92H3 Readings in Computer Science

Students will examine an area of interest through reading papers and texts. This course is offered by arrangement with a computer science faculty member. It may be taken in any session, and must be completed by the last day of classes in the session in which it is taken.

Prerequisite: Students must obtain consent from the Supervisor of Studies before registering for this course.Breadth Requirement: Quantitative Reasoning

CSCD94H3 Computer Science Project

A significant project in any area of computer science. The project may be undertaken individually or in small groups. This course is offered by arrangement with a computer science faculty member, at U of T Scarborough or the St. George campus. This course may be taken in any session and the project must be completed by the last day of classes in the session in which it is taken. Students must obtain consent from the Supervisor of Studies before registering for this course.

Prerequisite: [Three C-level CSC courses] & [permission of the Supervisor of Studies] & [CGPA 3.0 or enrolment in a CSC Subject POSt] Enrolment procedures: Project supervisor's note of agreement must be presented to the Supervisor of Studies, who must issue permission for registration.Exclusion: CSC494H

CSCD95H3 Computer Science Project

Same description as CSCD94H3. Normally a student may not take two project half-courses on closely related topics or with the same supervisor.

If an exception is made allowing a second project on a topic closely related to the topic of an earlier project, higher standards will be applied in judging it. We expect that a student with the experience of a first project completed will be able to perform almost at the level of a graduate student.

**Enrolment procedures**

**: Project supervisor's note of agreement must be presented to the Supervisor of Studies, who must issue permission for registration.**

Exclusion: CSC495H

Exclusion: CSC495H