You are here

Computer Science

Faculty List

University Professor Emeritus 
S. Cook, SM, PhD, FRS, FRSC 
G. Hinton, PhD, FRS, FRSC 

Professors Emeriti 
R. Baecker, MSc, PhD 
D. Corneil, MA, PhD 
W. Enright, MSc, PhD (University of Toronto Scarborough) 
E. Hehner, MSc, PhD 
R.C. Holt, PhD 
H. Levesque, MSc, PhD, FRSC 
R. Mathon, MSc, PhD (University of Toronto Mississauga) 
J. Mylopoulos, MSc, PhD, FRSC 
C. Rackoff, PhD (University of Toronto Mississauga) 
D. Wortman, MSc, PhD 

Senior Lecturer Emeritus 
J. Clarke, MSc, PhD 

University Professor 
A. Borodin, MSc, PhD, FRSC 

Professor and Chair of the Department 
R. Balakrishnan, MSc, PhD 

Professor and Vice Chair of the Department 
K. Truong, PhD 

Associate Professor and Associate Chair (Graduate Studies) 
A. Demke-Brown, MSc, PhD  

Associate Professor, Teaching Stream and Associate Chair (Undergraduate Studies) 
F. Pitt, MSc, PhD 

T. Abdelrahman, MSc, PhD 
F. Bacchus, MSc, PhD 
R. Balakrishnan, MSc, PhD 
C. Boutilier, MSc, PhD 
M. Chechik, MSc, PhD 
E. de Lara, MSc, PhD 
S. Dickinson, MSc, PhD 
S. Easterbrook, PhD 
F. Ellen, MMath, PhD 
E. Fiume, MSc, PhD 
D. Fleet, MSc, PhD (University of Toronto Scarborough) 
V. Hadzilacos, PhD (University of Toronto Scarborough) 
G. Hirst, MSc, PhD (University of Toronto Scarborough) 
K. Jackson, MSc, PhD 
A. Jepson, PhD 
N. Koudas, MSc, PhD (University of Toronto Scarborough) 
K. Kutulakos, MSc, PhD 
P. Marbach, MSc, PhD 
S. McIlraith, MMath, PhD 
R. Miller, MSc, PhD, FRSC 
M. Molloy, MMath, PhD (University of Toronto Scarborough) 
R. Neal, BSc, PhD 
G. Penn, MSc, PhD 
T. Pitassi, MSc, PhD 
K. Singh, MSc, PhD 
S. Stevenson, MSc, PhD 
S. Toueg, MA, PhD 
R. Zemel, MSc, PhD 

Associate Professors 
A. Bonner, MSc, PhD (University of Toronto Mississauga) 
M. Brudno, MSc, PhD 
C. Christara, MSc, PhD 
J. Danahy, MScUrb & DesPl 
A. Demke-Brown, MSc, PhD 
A. Farzan, PhD 
Y. Ganjali, MSc, PhD 
B. Schroeder, MSc, PhD (University of Toronto Scarborough) 
K. Truong, PhD
R. Urtasun, PhD 
D. Wigdor, MSc, PhD (University of Toronto Mississauga) 

Assistant Professors 
D. Duvenaud, PhD
S. Fidler, PhD
R. Grosse, PhD
A. Jacobson, PhD
D. Levin, PhD 
A. Nikolov, PhD 
B. Rossman, PhD 

Associate Professors, Teaching Stream 
G. Baumgartner, MSc 
J. Campbell, MMath 
M. Craig, MSc 
S. Engels, MMath 
T. Fairgrieve, MSc, PhD 
P. Gries, MEng 
D. Heap, MSc 
D. Horton, MSc 
F. Pitt, MSc, PhD 
K. Reid, MSc 

Assistant Professors, Teaching Stream 
D.Liu, MSc 
J.Smith, MSc 

Cross Appointed 
C. Amza, PhD 
G. Bader, PhD 
C. Beck, PhD 
M. Consens, PhD 
B. Frey, PhD 
A. Goel, PhD 
M. Gruninger, PhD 
A. Jacobsen, MSc, PhD 
P. Kim, PhD 
B. Li, MSc, PhD 
D. Lie, PhD 
J. Liebeherr, PhD 
K. Lyons, MSc, PhD 
E. Mendelsohn, MSc, PhD (Professor Emeritus) (University of Toronto Scarborough) 
A. Mihailidis, PhD 
Q. Morris, PhD 
A. Moses, PhD 
C. Munteanu, PhD 
F. Roth, PhD 
D. Roy, PhD 
M. Stumm, MSc (Math), PhD 
A. Urquhart, MA, PhD (Professor Emeritus) 
A. Veneris, MSc, PhD 
E. Yu, MSc, PhD 
D. Yuan, PhD 
Z. Zhang, PhD 
M. Chignell, MSc, PhD 

Adjunct and Status Only 
P. Andritsos, PhD 
D. Aruliah, PhD 
J. Birnholtz, PhD 
A. Borgida, PhD 
B. Buxton, MSc 
F. Chevalier, PhD 
A. Fazley, PhD 
C. Forlines, PhD 
A. Goldenberg, PhD 
M. Grech, MBA 
B. Haibe-Kains, PhD 
A. Hertzmann, PhD 
M. Hoffman, PhD 
R. Johnson, PhD 
I. Jurisica, PhD 
G. Lakemeyer, PhD 
C. Landreth, MS 
Y. Lesperance, MSc, PhD 
R. Lilien, PhD 
K. Moffat, PhD 
J. Parkinson, PhD 
K. Pu, PhD 
F. Rudzicz, PhD 
P. Salvini, PhD 
R. Schmidt, PhD 
J. Simpson, PhD 
J. Stam, PhD 
B. Taati, PhD 
T. Topalouglou, PhD 
J. Tsotsos, PhD 


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

Associate Chair (Undergraduate Studies): Associate Professor, Teaching Stream Francois PItt

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

Web site:


Advice on choosing courses towards a Major in Computer Science

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

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

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

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

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

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

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

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

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

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

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

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

  Some of CSC310H1CSC324H1CSC412H1CSC456H1CSC463H1

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

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

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

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

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

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

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

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

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

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

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