This Course and Program Catalogue is effective from May 2024 to April 2025.

Not all courses described in the Course and Program Catalogue are offered each year. For a list of course offerings in 2024-2025, please consult the class search website.

The following conventions are used for course numbering:

  • 010-099 represent non-degree level courses
  • 100-699 represent undergraduate degree level courses
  • 700-999 represent graduate degree level courses

Course search


100 Results

CMPT 140.3: Introduction to Creative Computing

Concepts in Computing such as algorithms, problem solving, and programming are explored using interactive multimedia systems as the creative focus. Basic skills in problem solving, programming, design and interaction, event-based behaviour, and prototyping are developed.

Weekly hours: 3 Lecture hours and 1.5 Practicum/Lab hours
Note: Recommended for students who do not have Computer Science 30. CMPT 140 can be taken for credit after the completion of CMPT 100, but CMPT 100 cannot be taken for credit after completion of CMPT 140. Students with credit for CMPT 105, CMPT 111, CMPT 113, CMPT 116, CMPT141, or CMPT142 cannot obtain credit for CMPT 140. Students may not take CMPT 140 for credit concurrently with CMPT 141. Students majoring in the Computer Science and Applied Computing programs may not use CMPT 140 as a course in their major, but may count it as a junior elective. Students may receive credit for only one of CMPT 140 or BINF 151.


CMPT 141.3: Introduction to Computer Science

An introduction to computer science and problem solving using procedural programming. This course introduces the basic computer science and computer programming principles of algorithms, abstraction, encapsulation, variables, conditional branching, repetition, functions, recursion, and elementary data structures. These concepts are applied to problem solving applications such as data analysis and visualization, simulation, text processing, and image processing. The programming skills acquired in this course are applicable in all fields of study, the work-place, and personal projects.

Weekly hours: 3 Lecture hours and 1.5 Practicum/Lab hours
Prerequisite(s): One of (Computer Science 30, CMPT 140.3, BINF 151.3) and one of (Mathematics B30, Foundations of Mathematics 30, Pre-Calculus 30); or MATH 110.3, MATH 123.3, MATH 133.4, MATH 163.3, or MATH 176.3 (can be taken concurrently).
Note: Recommended for students with Computer Science 30, CMPT 140 or BINF 151, or for students in programs that require MATH 110 (or equivalent). Students with credit for CMPT 115, CMPT 117 or CMPT 142 cannot take this course for credit. Students may not take CMPT 100 or CMPT 120 or CMPT 140 for credit concurrently with or after CMPT 141.


CMPT 142.3: Introduction to Computer Science for Engineers

Introduces essential computer science and computer programming concepts and principles, with application to problems relevant to all Engineering disciplines. Presents the context in which computational problem solving is done, including historical and elementary technical aspects. Emphasizes fundamental programming constructs, including data and data types, variables and expressions, conditional branching, repetition, functions, recursion, as well as data structures such as strings, lists, and dictionaries. Presents searching and sorting algorithms as an introduction to concepts in computer science. Emphasis throughout on the practice of basic skills needed for writing robust software, including formal design processes and documentation, internal code documentation, testing, and debugging.

Weekly hours: 1.5 Lecture hours and 1.5 Practicum/Lab hours
Restriction(s): Restricted to students in the College of Engineering.
Prerequisite(s): Mathematics B30 or Foundations of Mathematics 30 or Pre-Calculus 30.
Note: Students with credit for CMPT 141 may not receive credit for this course.


CMPT 145.3: Principles of Computer Science

This course builds on CMPT 141 by introducing additional problem solving methods and computer science principles, to solve larger problems that are more data intensive, or require more sophisticated techniques. These principles include data structures for efficient storage and retrieval of data, selection of appropriate data structures, algorithmic paradigms for solving difficult problems, and analysis of algorithms time and space requirements. This course also emphasizes fundamental principles of coding style, testing, and top-down design for writing robust, maintainable software.

Weekly hours: 3 Lecture hours and 1.5 Practicum/Lab hours
Prerequisite(s): (CMPT 141.3 or CMPT 142.3) or (CMPT 111.3 and permission of the department).
Note: Students with credit for CMPT 146 or CMPT 270 cannot take CMPT 145 for credit.


CMPT 146.3: Principles of Computer Science for Engineers

Introduces computer science principles and strategies for writing correct, efficient, robust, maintainable software. Presents principles and implementations of linear data structures including stacks, queues, and linked-lists, as well as recursive data structures including binary trees, and binary search trees. Introduces algorithm analysis to determine time and space requirements, including best-case and worst-case behaviour. Presents abstract data types as implemented using object-oriented programming. Emphasizes principles of software design, development, and testing, and practical development strategies, including defensive programming, version control, and good coding style.

Weekly hours: 1.5 Lecture hours and 1.5 Practicum/Lab hours
Restriction(s): Restricted to students in the College of Engineering.
Prerequisite(s): One of CMPT 141.3 or CMPT 142.3
Note: Students with credit for CMPT 145 may not receive credit for this course.


CMPT 214.3: Programming Principles and Practice

A hands-on approach to software development at the individual and small team level. Application of software tools- including scripting languages, system utilities and libraries- for construction of small software systems. Integrated with and motivated by programming practices, system development, testing and maintenance issues.

Weekly hours: 3 Lecture hours and 2 Practicum/Lab hours
Prerequisite(s): One of CMPT 145.3, CMPT 146.3, CMPT 115.3 or CMPT 117.3
Note: Students who have credit for CMPT 330 may not take this course for credit.


CMPT 215.3: Introduction to Computer Organization and Architecture

An introduction to the design of contemporary computer systems, focusing on the hardware-software interface and the upper hardware levels. Topics include machine and assembly language, computer arithmetic, the processor datapath and control, pipelining, memory hierarchies, and I/O systems.

Weekly hours: 3 Lecture hours and 1.5 Tutorial hours
Prerequisite(s): CMPT 214.3; and one of MATH 104.3, MATH 110.3, MATH 121.3, MATH 123.3, MATH 125.3, MATH 133.4, MATH 163.3, MATH 176.3, STAT 242.3 or STAT 245.3 (or equivalent).
Note: A student cannot receive credit for more than one of CMPT 215.3, EE 331.3, or CME 331.3.


CMPT 260.3: Mathematical Logic and Computing

An introduction to elementary applied propositional and predicate logic. Fundamental proof techniques with an emphasis on induction. The theory of sets, relations and functions. Course concepts are related to computer science areas, with an emphasis on relational databases.

Weekly hours: 3 Lecture hours and 1.5 Tutorial hours
Prerequisite(s): One of (CMPT 145.3, CMPT146.3, CMPT 115.3, or CMPT 117.3); and one of (MATH110.3, MATH 133.4, MATH 163.3, or MATH 176.3).


CMPT 263.3: Computational Logic and Program Reasoning

Apply mathematical logic to applications in computer science, leading to program interpretation and understanding; including pre-/post-conditions, invariants, Hoare logic, relational algebra, and verification. Develop skills and knowledge for designing, debugging, documenting, verifying and testing code, and understand programs including open-source code. Topics are introduced using standard examples including stacks and queues; extended examples are drawn from string-matching algorithms and finite state automata. An introduction to reasoning about concurrency, pitfalls, and language/library-level solutions.

Weekly hours: 3 Lecture hours and 1.5 Tutorial hours
Prerequisite(s): MATH 163.3 or CMPT 260.3; and CMPT 145.3.
Note: Students with credit for CMPT 260 can take CMPT 263 for credit, but students cannot take CMPT 260 for credit after completing CMPT 263.


CMPT 270.3: Developing Object-Oriented Systems

Object-oriented programming. The use of modeling, abstractions, patterns, and GUIs to design and build a good OO system. Unit testing to ensure that systems meet requirements. Application of the techniques to interactive systems.

Weekly hours: 3 Lecture hours and 1.5 Tutorial hours
Prerequisite(s): One of (CMPT 145.3, CMPT 146.3, CMPT 115.3, or CMPT 117.3); and one of (MATH 104.3, MATH 110.3, MATH 121.3, MATH 123.3, MATH 125.3, MATH 133.4, MATH 163.3, MATH 176.3, STAT 242.3 or STAT 245.3 (or equivalent)).
Note: Students with credit for CMPT 250 may not take this course for credit.


CMPT 280.3: Intermediate Data Structures and Algorithms

Formal abstract data types; tree representations and searching: ordered trees, balanced trees, simple spatial trees; graph representations and searching: path algorithms, DFS, BFS, backtracking, and sorting algorithms.

Weekly hours: 3 Lecture hours and 1.5 Tutorial hours
Prerequisite(s): CMPT 270.
Note: Students with credit for CMPT 250 may not take this course for credit.


CMPT 281.3: Website Design and Development

Introduction to design concepts and issues in the development of usable applications on the World Wide Web, including visual design concepts, the user-centered iterative design process, and development technologies that enable application development for the Web.

Weekly hours: 3 Lecture hours and 1 Practicum/Lab hours
Prerequisite(s): CMPT 141.3 or CMPT 111.3
Note: CMPT 281 cannot be used towards requirements for a B.Sc. in Computer Science, but may be used as an open elective. CMPT 281 cannot be taken after CMPT 381 or CMPT 370 (but may be taken concurrently).


CMPT 298.3: Special Topics

Offered occasionally by visiting faculty and in other special situations to cover, in depth, topics that are not thoroughly covered in regularly offered courses.

Weekly hours: 3 Lecture hours


CMPT 299.6: Special Topics

Offered occasionally by visiting faculty and in other special situations to cover, in depth, topics that are not thoroughly covered in regularly offered courses.

Weekly hours: 3 Lecture hours


CMPT 306.3: Game Mechanics

Will cover aspects of game graphics, physics, sound, input, AI and networking at an introductory level. This course is intended to provide a broad basis in computer game-related fields, serving as the primer and providing context for specialized courses in fourth year.

Weekly hours: 3 Lecture hours and 1.5 Tutorial hours
Prerequisite(s): CMPT 270.3.
Note: MATH 264 or MATH 266 are recommended.


CMPT 317.3: Introduction to Artificial Intelligence

A survey of essential Artificial Intelligence techniques and underlying theory. Basic search strategies, including uninformed search, heuristic search, and games. Basic knowledge representation and reasoning, including propositional satisfiability and theorem proving, Bayes rule, and Bayesian networks. Basic machine learning, including k-nearest neighbours, decision trees, neural networks, naive Bayes classifier, k-means.

Weekly hours: 3 Lecture hours and 1 Tutorial hours
Prerequisite(s): MATH 163.3 or CMPT 260.3; and CMPT 280.3; and STAT 242.3, STAT 245.3 or equivalent (including EE 216 or ME 251).


CMPT 318.3: Data Analytics

Introduces computational tools for the analysis of data. This course will focus on the design and implementation of data analytic pipelines, and the appropriate interpretation of the results of that analysis.

Weekly hours: 3 Lecture hours and 1.5 Practicum/Lab hours
Prerequisite(s): CMPT 270.3 and MATH 164.3; and STAT 242.3 or STAT 245 or equivalent.
Note: CMPT 280.3 is recommended as a pre- or co-requisite. Any calculus course is recommended as a prerequisite.


CMPT 332.3: Operating Systems Concepts

An introduction to the principles of modern operating systems. The synchronization and communication of cooperating processes. Process Scheduling. Virtual Memory. File System design and organization. Introduction to distributed systems.

Weekly hours: 3 Lecture hours and 1 Practicum/Lab hours
Prerequisite(s): CMPT 214.3; and CMPT 280.3; and one of CMPT 215.3 or CME 331.3.


CMPT 340.3: Programming Language Paradigms

A comparative study of programming languages and paradigms. Introduction to functional programming languages, such as Haskell; topics include: recursion, higher-order functions, polymorphic types, lazy evaluation. Introduction to logic programming languages, such as Prolog; topics include: unification, backtracking, resolution, non-determinism. An introduction to interpreters, parsers, program transformations, and semantic models.

Weekly hours: 3 Lecture hours and 1 Tutorial hours
Prerequisite(s): CMPT 214.3; CMPT 260.3; and CMPT 270.3.
Note: One of CMPT 215 or CME 331 recommended.


CMPT 353.3: Full Stack Web Programming

Introduction into full-stack web programming. Basic client-server architecture. HTML & JavaScript. Front-end development frameworks. Databases and Web Storage. Web server platforms. Back end development platforms. Web Service (SOAP/REST). Web Application Architecture.

Weekly hours: 3 Lecture hours and 1 Practicum/Lab hours
Prerequisite(s): CMPT 280.3
Note: Students with credit for CMPT 350.3 cannot take this course for credit.


CMPT 360.3: Machines and Algorithms

Develops and analyzes standard techniques for algorithm development which are widely applicable to computer science programs. These include greedy algorithms, branch-and-bound, dynamic programming, satisfiability, graphs and network-flow, and exhaustive search, along with proofs of correctness. The master theorem and other complexity analyses (including output-bounded and amortized complexity) are introduced. Hardware-level interactions with these algorithms and efficient data structures, including cache-obliviousness, are discussed.

Weekly hours: 3 Lecture hours
Prerequisite(s): CMPT 260.3 and CMPT 280.3; and 9 credit units of MATH or STAT courses.


CMPT 364.3: Automata and Formal Languages

Introduces the foundations of Computer Science. The theory of computation is explored through automata and formal languages. In particular, finite automata, grammars, Turing Machines and applications to computer science such as dynamic modeling, computer architecture, lexical analysis and parsing are studied.

Weekly hours: 3 Lecture hours
Prerequisite(s): CMPT 260.3 and 9 credit units of MATH or STAT courses.


CMPT 370.3: Intermediate Software Engineering

Principles and techniques for developing software combined with the practical experience of creating a mid-size software system as a member of a software development team. Includes: teamwork; projects, planning and process; users and requirements; use cases; modeling; quality; software architecture; testing; GUI design, design principles, patterns and implementation; ethics; professionalism.

Weekly hours: 3 Lecture hours and 1.5 Tutorial hours
Prerequisite(s): CMPT 280.3.


CMPT 371.3: Software Management

Covers software management topics in the context of a significant group project. Includes: software process; process improvement; project tracking and metrics; project planning; project and group management; IT enterprise strategy and planning; software configuration management; deployment and maintenance; inspection; testing; verification and validation; and quality assurance.

Weekly hours: 3 Lecture hours and 1.5 Practicum/Lab hours and 1.5 Tutorial hours
Prerequisite(s): CMPT 214.3 and CMPT 370.3.
Prerequisite(s) or Corequisite(s): CMPT 280.3.


CMPT 381.3: Implementation of Graphical User Interfaces

Advanced introduction to concepts and structures used to develop GUIs in software, focusing on building user interfaces. Covers the fundamentals of GUI toolkits including input, widgets, layout, events, model-view-controller architectures, and two-dimensional graphics.

Weekly hours: 3 Lecture hours and 1 Practicum/Lab hours
Prerequisite(s): CMPT 280.3.


CMPT 384.3: Information Visualization

This course will introduce visualization process for different datasets, design principals, techniques for developing effective visualizations, visualization algorithms and interaction techniques. The course is targeted to students interested in using visualization in their own work, as well as to those who are interested in developing visualization systems. Topics include: data abstractions, visualization process, design principles, visualizations of tabular data, geo-visualizations, cartographic representation, visualization for sets, temporal and hierarchical data (treemaps, radial layouts), network visualizations, visualization algorithms and software, interactions with large datasets, and a brief overview of visual analytics.

Weekly hours: 3 Lecture hours and 1 Tutorial hours
Prerequisite(s): CMPT 280.3.
Note: MATH 164 is recommended. Students with credit for CMPT 398.3 Information Visualization may not take this course for credit.


CMPT 394.3: Simulation Principles

Introduction to the development of logical, numerical and statistical models of systems; deterministic and probabilistic models; Monte Carlo simulations. Basic elements involved in simulation such as entities, attributes, events and time representation. Properties of computer modelling languages; design, development and testing of models.

Weekly hours: 3 Lecture hours
Prerequisite(s): CMPT 270.3; and MATH 110.3; and one of STAT 242.3 (preferred), STAT 245.3, or EE 216.3.


CMPT 398.3: Special Topics

Offered occasionally by visiting faculty and in other special situations to cover, in depth, topics that are not thoroughly covered in regularly offered courses.

Weekly hours: 3 Seminar/Discussion hours


CMPT 399.6: Special Topics

Offered occasionally by visiting faculty and in other special situations to cover, in depth, topics that are not thoroughly covered in regularly offered courses.

Weekly hours: 3 Seminar/Discussion hours


CMPT 400.3: Research Topics in Computer Science

Senior students will be introduced to research in an advanced area of computer science under the supervision of a faculty member specializing in the area.

Weekly hours: 1.5 Seminar/Discussion hours
Permission of the department required.
Prerequisite(s): In the final year of an Honours Program; or a cumulative percentage average of at least 70% in 24 credit units in computer science and written permission of the department.
Note: Students with credit for CMPT 405.3 or CMPT 407.3 may not receive credit for this course. Permission to register requires a written application to the Department of Computer Science.


CMPT 401.0: Professional Internship I

Internship students register in this zero-credit-unit course for the first four-month installment of the 16 month internship placement. This course is graded on a Pass/Fail basis.

Permission of the department required.
Prerequisite(s): Professional internship placement with a sponsoring employer.


CMPT 402.0: Professional Internship II

Internship students register in this zero-credit-unit course for the second four-month installment of the 16 month internship placement. This course is graded on a Pass/Fail basis.

Prerequisite(s): CMPT 401.


CMPT 403.0: Professional Internship III

Internship students register in this zero-credit-unit course for the third four-month installment of the 16 month internship placement. This course is graded on a Pass/Fail basis.

Prerequisite(s): CMPT 402.


CMPT 404.0: Professional Internship IV

Internship students register in this zero-credit-unit course for the last four-month installment of the 16 month internship placement. This course is graded on a Pass/Fail basis.

Prerequisite(s): CMPT 403.


CMPT 405.3: Project Design and Implementation

Senior students apply engineering and scientific methods to develop a major computer system or system component. Students work individually or in teams and are supervised by a faculty member specializing in the area. Students prepare and present interim and final reports on their project.

Weekly hours: 1.5 Practicum/Lab hours and 1.5 Seminar/Discussion hours
Permission of the department required.
Prerequisite(s): In the final year of an Honours Program; or a cumulative percentage average of at least 70% in 24 credit units in computer science.
Note: Students with credit for CMPT 400.3 or CMPT 407.3 may not receive credit for this course. Permission to register requires a written application to the Department of Computer Science.


CMPT 406.3: Game Design Workshop

This course will focus on topics of game design, game software engineering, and project management. Students will engage in a significant project in a large team of between 8 and 15 students (common in independent game development studios) and build a game of sufficient sophistication to warrant potential publication on an app or software store.

Prerequisite(s): CMPT 306


CMPT 407.3: Research Topics in Applied Computing

Senior students in Applied Computing will be introduced to research in an advanced area of computer science under the supervision of a faculty member specializing in the area.

Permission of the department required.
Restriction(s): Restricted to students in Applied Computing.
Prerequisite(s): In the final year of Honours program in Applied Computing; or a cumulative percentage of at least 70% in 24 credit units of courses in the C4 Major Requirement (for the chosen concentration) and written permission of the department.
Note: Students in the Geomatics Stream may take GEOG 490.3 or PLAN 490.3 in place of CMPT 407.3. Students in the Data Analytics Stream may take MATH 402.0 in place of CMPT 407.3. Students cannot count more than one of these courses toward a degree in Applied Computing. Students with credit for CMPT 400 or CMPT 405 may not receive credit for this course. Permission to register requires a written application to the Department of Computer Science.


CMPT 412.3: Social Computing and Participative Web 2.0

Will cover a variety of topics related to the emerging area of Social Computing and Participative Web. It will discuss theories, technologies and human issues of Web 2.0: how people network online, what communities they form, why they participate and contribute, and how to design infrastructures for successful online communities.

Prerequisite(s): One of CMPT 317.3, CMPT 318.3 or CMPT 353.3.


CMPT 423.3: Machine Learning

A survey of Machine Learning techniques, their underlying theory, and their application to realistic data. Machine learning techniques may include Neural Networks, Support Vector Machines, Bayesian networks, Hidden Markov Models, Particle Filtering; Expectation-Maximization; Sampling; Evaluation methodologies; Over-fitting and Regularization. Software tools will be introduced for practical application.

Weekly hours: 3 Lecture hours
Prerequisite(s): CMPT 317.3; one of STAT 242.3 (preferred) or STAT 245.3; and MATH 164.3.


CMPT 432.3: Advanced Operating Systems Concepts

An advanced look at the principles of modern operating systems. The process and the kernel, communication between processes, interrupt handling in the kernel. Message passing and synchronization primitives and their implementation. Implementation of Virtual memory and file systems. Device drivers and I/O.

Weekly hours: 3 Lecture hours
Prerequisite(s): CMPT 332.3
Note: Students with credit for CMPT 832 will not receive credit for this course.


CMPT 433.3: System and Network Administration

The deployment and maintenance of modern computer systems. Topics to be covered include architectures, heterogeneous systems, authentication and security, network services including firewalls, storage services, performance analysis and tuning, management and configuration of services and system resources, system initialization, drivers, cross-platform services, policies and procedures.

Weekly hours: 3 Lecture hours
Prerequisite(s): CMPT 332.3
Prerequisite(s) or Corequisite(s): One of CMPT 432.3, CMPT 434.3 or CMPT 438.3.


CMPT 434.3: Computer Networks

The principles and practice of computer networking, focusing on the Internet and its structure, protocols, and applications. Topics include network applications and programming, reliable data transfer, flow and congestion control, routing, multimedia networking, local area networks, security, and network management.

Weekly hours: 3 Lecture hours
Prerequisite(s):CMPT 332.3.
Note: Students with credit for CMPT 424 or CME 334 or CME 451 may not take this course for credit.


CMPT 435.3: Foundations of Concurrent Programming

Theory and practice of concurrent programming. Process interaction using shared variables and message passing; parallel computing; development of correct programs; general problem solving techniques; scientific computing; distributed programming.

Weekly hours: 3 Lecture hours and 1 Practicum/Lab hours
Prerequisite(s): CMPT 215.3 and 6 credit units from: CMPT 332.3, CMPT 340.3 or CMPT 360.3.
Note: Students with credit for CMPT 835 may not take this course for credit.


CMPT 438.3: Introduction to Computer Security

Computer security is an essential requirement of any software system. This course covers the fundamental principles, mechanisms and models of security. More specifically, the course introduces students to security management, defense, and exploitation techniques including but limited to vulnerability assessment, access control, cryptography, intrusion detection, malicious software. The course assesses current security threats and gives students a hands-on experience with basic security strategies.

Weekly hours: 3 Lecture hours and 1 Practicum/Lab hours
Prerequisite(s): CMPT 332.3
Prerequisite(s) or Corequisite(s): CMPT 434.3
Note: Students with credit for CMPT 838 may not take this course for credit.


CMPT 439.3: Software Security.

This course will explore the foundations of writing secure code. We will consider common programming flaws, how to exploit them, and how to fix them. We will consider defenses that prevent or mitigate these attacks, including advanced testing and program analysis techniques. Note: the lab for this course is offered in alternating weeks.

Weekly hours: 3 Lecture hours
Prerequisite(s): CMPT 332.3
Note: Students with credit for CMPT 333 or CMPT 839 may not receive credit for this course.


CMPT 440.3: Advanced Topics in Programming Languages

Advanced topics in programming languages will be selected from: programming language design, programming language semantics, code optimization, memory management, garbage collection, closures, functional programming, logic programming, aspect-orient programming, concurrent programming, history of programming languages, advanced programming language features and their implementation, polymorphic type systems, domain specific languages.

Weekly hours: 3 Lecture hours
Prerequisite(s): CMPT 340.3
Note: Students with credit for CMPT 821 may not take this course for credit.


CMPT 442.3: Compiler Design and Implementation

Introduction to the systematic construction of a compiler: context-free and regular grammars, scanners, attribute grammars, parsing, syntax trees, runtime organization, symbol tables, internal representations, compile-time error handling, semantic analysis, storage allocation, code generation, linking, byte code, interpreters, ahead-of-time (AoT) and just-in-time (JiT) techniques. Students will use compiler construction tools in a term project.

Weekly hours: 3 Lecture hours
Prerequisite(s): CMPT 215.3 and CMPT 364.3
Note: CMPT 340 recommended. Students with credit for CMPT 823 may not take this course for credit.


CMPT 451.3: Modelling and Algorithms for Biological Systems

This course focusses on mathematical and computational modelling of various real world processes, with the main focus on biological systems. Using discrete models, algorithmic strategies will be explored including exact algorithms, approximation algorithms, heuristic algorithms, and evolutionary algorithms. The algorithms and models used will involve sets, graphs, strings, trees, machines, and grammars. For each algorithmic technique, we will study applications from biological systems and bioinformatics, including biomolecule string matching, sequence alignment, sequence assembly, gene finding, structure prediction, gene expression data analysis, phylogeny, genome rearrangement, and simulations of molecular evolution.

Weekly hours: 3 Lecture hours
Prerequisite(s): CMPT 280.3; and one of BIOL 120.3 or BMSC 200.3
Note: Students with credit for BINF 300.3 or CMPT 813.3 may not take this course for credit.


CMPT 453.3: Cloud and Mobile Computing

Investigates the problems and possible approaches for enabling mobile and cloud computing. After a brief discussion of the basic problems in developing applications for the field, the class will focus on technologies such as RPC, RMI/Remoting, Web Services (SOAP/REST) and cloud platforms like IaaS, PaaS and SaaS.

Weekly hours: 3 Lecture hours
Prerequisite(s): One of CMPT 353.3, CMPT 370.3, or CMPT 381.3.
Note: Students with credit for CMPT 426 or CMPT 436 may not take this course for credit.


CMPT 463.3: Advanced Algorithms

A continuation of the algorithms part of CMPT 360. Some of the algorithm techniques include: augmenting algorithms for network flows, matching and graph connectivity, geometric algorithms for nearest neighbour, intersection problems, and convex hull, parallel and distributed algorithms.

Weekly hours: 3 Lecture hours
Prerequisite(s): CMPT 360.3.
Note: Students with credit for CMPT 416 or CMPT 810 may not take this course for credit.


CMPT 470.3: Advanced Software Engineering

Covers advanced software engineering principles and techniques. Includes: software architecture; software evolution; reverse engineering; design recovery; refactoring; software comprehension; software analysis; domain specific techniques; requirements and specification; advanced design and modeling techniques; formal methods; and the business of software.

Weekly hours: 3 Lecture hours
Prerequisite(s): CMPT 214.3 and CMPT 370.3.
Note: Students with credit for CMPT 816 will not receive credit for this course.


CMPT 479.3: Usability Engineering

This course presents a requirements engineering (RE) approach to usability engineering (UE) by providing in depth coverage of Usability Centered Development (UCD). UE and UCD provide a structured approach to developing usable user interface designs. UE helps integrate human-computer interaction (HCI) requirements and design approaches within development projects managed by software engineering (SE) methodologies.

Weekly hours: 3 Lecture hours
Prerequisite(s): CMPT 370 or permission of instructor.


CMPT 480.3: Accessible Computing

Investigates accessibility issues and features relating to the analysis and design of computing applications. It introduces major sources of information on accessible computing and works towards developing a comprehensive strategy for improving the accessibility of computing applications.

Weekly hours: 3 Lecture hours
Prerequisite(s): 9 credit units of CMPT courses at the 300-level or above.


CMPT 481.3: Human Computer Interaction

Fundamental theory and practice in the design, implementation, and evaluation of human-computer interfaces. Topics include: principles of design, usability engineering, methods for evaluating interfaces with or without user involvement, techniques for prototyping and implementing graphical user interfaces.

Weekly hours: 3 Lecture hours
Prerequisite(s): CMPT 370.3 or CMPT 381.3
Note: Students with credit for CMPT 811 may not take this course for credit.


CMPT 484.3: Graph Drawing and Network Visualization

This course will introduce mathematical models of networks, analysis of network structure, and visualization process for real-life network datasets. The course will put a special focus on graph drawing, which contains the algorithmic core for network analysis and visualization, and present how an abstract graph layout can be used to create effective visualizations for real-life networks. The content of this course will draw examples from many applied areas such as social sciences, computational biology, communication networks, VLSI circuits, and software engineering. The course is targeted to students interested in network analysis, as well as in visual analytics of network data. Topics include: Combinatorial analysis of graphs, common graph drawing algorithms, network visualization aesthetics, structural analysis of networks, an overview of network analysis tools and software, visualization of geospatial and dynamic networks, layered visualization of large networks, information propagation on a network, user interactions, and case studies from different practical domains.

Weekly hours: 3 Lecture hours
Prerequisite(s): CMPT 384.3; and either of CMPT 360.3 or CMPT 381.3
Note: CMPT 353.3 is recommended. Students with credit for CMPT 824 may not take this course for credit.


CMPT 485.3: Computer Graphics and Animation

Advanced topics in computer graphics, concentrating on image formation and modelling issues. The implications of the data-driven approach to computer graphics. Simulation and non-parametric methods contrasted. The course will involve a project investigating and implementing some current algorithms from the literature.

Weekly hours: 3 Lecture hours
Prerequisite(s): 6 credit units of 300-level CMPT; and one of MATH 164.3, MATH 266.3, EE 216.3, or CE 318.3.


CMPT 487.3: Image Processing and Computer Vision

Presents the fundamentals of theory and practice of image processing and computer vision. A range of topics are presented covering the phases of a typical image processing and computer vision pipeline: image preprocessing, image segmentation, region description, and classification/decision-making. Theory is practiced through computer programming assignments using a modern image processing library. Students completing this course can expect to be able to solve image processing and computer vision problems of up to moderate difficulty that increasingly arise across a wide range of disciplines and application areas.

Weekly hours: 3 Lecture hours
Prerequisite(s): One of CMPT 317.3, CMPT 332.3, CMPT 340.3 or CMPT 370.3; and one of MATH 164.3, EE 216.3 or CE 318.3.
Note: Students with credit for CMPT 819 may not take this course for credit.


CMPT 489.3: Deep Learning and Applications

A survey of Deep Learning techniques and their application to problems in computer vision and data science. Deep learning techniques may include Deep Neural Networks, Convolutional Neural Networks, Recurrent Networks, Deep Generative Models and Reinforcement Learning. Application domains will focus on computer vision problems, including image classification, object detection and image segmentation. Additional application domains in natural language processing and robotics control will be introduced. Software tools will be introduced for practical application.

Weekly hours: 3 Lecture hours
Prerequisite(s): One of MATH 164.3, MATH 266.3, EE 216.3, or CE 318.3; and one of STAT 242.3 (preferred) or STAT 245.3; and one of CMPT 317.3 or CMPT 487.3
Note: Students with credit for CMPT 828 or CMPT 498.3 Deep Learning and Applications may not take this course for credit.


CMPT 498.3: Special Topics

Offered occasionally by visiting faculty and in other special situations to cover, in depth, topics that are not thoroughly covered in regularly offered courses.

Weekly hours: 3 Seminar/Discussion hours


CMPT 499.6: Special Topics

Offered occasionally by visiting faculty and in other special situations to cover, in depth, topics that are not thoroughly covered in regularly offered courses.

Weekly hours: 3 Seminar/Discussion hours


CMPT 810.3: Algorithms

Advanced design and analysis of algorithms. Includes pattern matching in strings, augmenting algorithms on graphs (including network flows, connectivity, and matching), computational geometry (including convex hulls, Voronoi diagrams, intersection problems, and planar point location), parallel algorithms for shared memory and interconnection network models, and distributed algorithms.

Weekly hours: 3 Lecture hours


CMPT 811.3: Advanced Human Computer Interaction

Fundamental theory in the design, implementation, and evaluation of human-computer interfaces, and understanding of the research issues underlying interaction. Topics include: general principles of design, the design of evaluation techniques, methods for prototyping and implementing graphical user interfaces, and theoretical issues underlying user input, representation, and visualization.

Weekly hours: 3 Lecture hours and 1 Tutorial hours
Prerequisite(s): CMPT 370 or permission of the instructor.


CMPT 813.3: Advanced Modelling and Algorithms on Biological Systems

This course focusses on mathematical and computational modelling of various real-world processes, with the main focus on biological systems. Using discrete models, algorithmic strategies will be explored including exact algorithms, approximation algorithms, heuristic algorithms, and randomized algorithms. The algorithms and models used will involve sets, graphs, strings, trees, and machines. For each algorithmic technique, we will study applications from biological systems and bioinformatics, including biomolecule string matching, sequence alignment, sequence assembly, compression, read mapping, stochastic modelling, and genome rearrangement. A class project will test the implementation or study of a model/algorithm.

Weekly hours: 3 Lecture hours
Prerequisite(s): An undergraduate course in algorithms (such as CMPT 360) is recommended.
Note(s): This course is a hybrid course with CMPT 451, and cannot be taken for credit after previously taking CMPT 451.


CMPT 815.3: Computer Systems and Performance Evaluation

Provides a comprehensive overview of the quantitative aspects of computer systems with a particular focus on performance evaluation. Topics include performance measurement, the analysis and interpretation of measurement data, workload characterization and modeling, the design and evaluation of performance experiments, and the design and application of analytical techniques. A variety of application domains will be considered.

Weekly hours: 3 Lecture hours


CMPT 816.3: Advanced Software Engineering

Concerns the major practical and theoretical concepts used in building large-scale software systems. Emphasizes current software development methodologies and tool support that accompanies the methodologies. The areas of software development that will be emphasized are: requirements definition and analysis; system design; and implementation and testing.

Weekly hours: 3 Lecture hours
Note: Students with credit for CMPT 470 will not receive credit for this course.


CMPT 817.3: Usability Engineering

Is a structured approach to developing usable interface designs. The course helps integrate human-computer interaction (HCI) requirements and design approaches within development projects managed by software engineering (SE) methodologies. The course also presents a requirements engineering (RE) approach to usability engineering by providing in-depth coverage of the Putting Usability First development methodology.

Weekly hours: 3 Lecture hours
Permission of the instructor is required.


CMPT 819.3: Advanced Image Processing and Computer Vision

Presents the fundamentals of theory and practice of image processing and computer vision. A range of topics are presented covering the phases of a typical image processing and computer vision pipeline: image preprocessing, image segmentation, region description, and classification/decision-making. Theory is practiced through computer programming assignments using a modern image processing library, and a course project. Students completing this course can expect to be able to solve image processing and computer vision problems of up to moderate difficulty that increasingly arise across a wide range of disciplines and application areas.

Weekly hours: 3 Lecture hours
Note: CMPT 819 and CMPT 487 are mutually exclusive. Students cannot obtain credit for both.


CMPT 820.3: Topics in Learning and Intelligent Systems

This course explores advanced techniques for management and analysis of data in unstructured application environments. Techniques covered may be chosen from the following: Bayesian modelling, data conditioning, machine learning (Bayesian inference, neural networks, decision trees, classifiers), user interface agents, and other similar techniques in the AI research literature as appropriate.

Weekly hours: 3 Lecture hours
Prerequisite(s): Open to graduate students in computer science who have at least one undergraduate course (3 credit units) of Artificial Intelligence.


CMPT 821.3: Advanced Topics in Programming Languages

Advanced topics in programming languages will be selected from: programming language design, programming languages semantics, code optimization, memory management, garbage collection, closures, functional programming, logic programming, aspect-oriented programming, concurrent programming, history of programming languages, advanced programming language features and their implementation, polymorphic type systems, domain specific languages.

Weekly hours: 3 Lecture hours
Prerequisite(s): Open to graduate students in computer science who have at least one undergraduate course (3 credit units) in Programming Languages.


CMPT 823.3: Compilers

The definition and classification of formal grammars. A discussion of regular and context-free grammars with their relationships to automata. Precedence, operator precedence, LR(k) and LALR(k) grammars with their associated syntactic analyzers, symbol table techniques, intermediate forms of source programs, run-time organization, code generation and optimization. Interpreters and their relation to the compilation process. Introduces translator writing systems and compiler-compilers.

Weekly hours: 3 Lecture hours


CMPT 824.3: Graph Drawing and Network Visualization

This course will introduce mathematical models and analysis of graphs to visualize real-life network datasets. The course will put a special focus on the algorithmic core for network visualization. The students interested in network layout, analysis, and visual analytics of networks will be benefited from this course.

Note: Students cannot receive credit for both CMPT 484.3 and CMPT 824.3.


CMPT 826.3: Data and Process Modeling and Analytics

Topics may be chosen from the following: collection; dimensional modelling; warehousing; evaluating, enhancing and protecting the value of information; system architectures for data management and manipulation; data mining; advanced querying; deployment in scientific and commercial applications.

Weekly hours: 3 Lecture hours and 2 Practicum/Lab hours


CMPT 827.3: Cognitive Scientific Approaches to AI

A discussion of cognitive scientific approaches to Artificial Intelligence. Examples of topics include genetic algorithms, complex adaptive systems, classifier systems, multi-agent systems, and their philosophical underpinnings.

Prerequisite(s): CMPT 317.3 or equivalent.


CMPT 828.3: Advanced Deep Learning

A survey of Deep Learning research topics in computer vision and data science. Deep learning techniques may include Deep Neural Networks, Convolutional Neural Networks, Recurrent Networks, Deep Generative Models and Reinforcement Learning. Application domains will focus on computer vision problems, including image classification, object detection and image segmentation. Additional application domains relevant to graduate students taking the course will be included. Software tools will be introduced for practical application.

Weekly hours: 3 Seminar/Discussion hours
Note: Instructor approval required. Students may not receive credit for both CMPT 489 and CMPT 828.


CMPT 829.3: Computer Graphics

An introduction to computer graphics that includes real-time and off-line realistic image synthesis techniques, and basic animation techniques such as key framing and physics-based methods. Programmable raster graphics, ray tracing and efficient data structures for both are also introduced.

Weekly hours: 3 Lecture hours


CMPT 830.3: Bioinformatics and Computational Biology

Provides an in-depth algorithms-based introduction to major concepts and techniques in bioinformatics. Topics include algorithms for structure prediction and similarity, sequence similarity and alignment, metabolic and regulatory pathways, sequence assembly, comparative genomics, expression analysis, database searching, artificial life and biological computation.

Weekly hours: 3 Lecture hours
Prerequisite(s): Open to students in computer science, life sciences, and natural sciences, but subject to permission of the instructor.


CMPT 832.3: Advanced Operating Systems

An advanced look at the principles of modern operating systems. The process and the kernel, communication between processes, interrupt handling in the kernel. Message passing and synchronization primitives and their implementation. Implementation of virtual memory and file systems. Device drivers and I/O.

Weekly hours: 3 Lecture hours
Prerequisite(s): CMPT 332.


CMPT 835.3: Foundations of Concurrent Programming

Theory and practice of concurrent programming. Process interaction using shared variables and message passing; parallel computing; development of correct programs; general problem solving techniques; scientific computing; distributed programming.

Weekly hours: 3 Lecture hours and 1 Practicum/Lab hours
Note: Students with credit for CMPT 435 cannot take this course for credit. CMPT 435 and CMPT 835 possess overlapping content.


CMPT 838.3: Foundations of Computer Security

Computer security is an essential requirement of any software system. This course covers the fundamental principles, mechanisms and models of security. More specifically, the course introduces students to security management, defense, and exploitation techniques including vulnerability discovery and exploitation, malicious code analysis, network traffic interception and manipulation, reconnaissance and information gathering, social engineering, intrusion detection and prevention. This is a hands-on course that gives students an opportunity to assesses current security threats and their countermeasures, explore recent advancements in computer security.

Weekly hours: 3 Seminar/Discussion hours
Note: Students may not receive credit for both CMPT 438 and CMPT 838.


CMPT 839.3: Foundations of Software Security.

Computer security is an essential requirement of any software system. This course covers the fundamental principles, mechanisms, and models of security. More specifically, the course introduces students to security management, defense, and exploitation techniques including but limited to vulnerability assessment, access control, cryptography, intrusion detection, malicious software. The course assesses current security threats and gives students a hands-on experience with basic security strategies.

Weekly hours: 3 Lecture hours
Note: This course is a hybrid course with CMPT 439, and this course cannot be taken for credit after previously taking CMPT 439.


CMPT 842.3: Mobile and Cloud Computing

After a brief discussion of the basic problems in developing applications for mobile and ubiquitous computing, the class will focus on the use of languages (e.g., Java, C#) and middleware (e.g., CORBA, SOAP, WebServices and RMI) for developing mobile and cloud applications.

Weekly hours: 3 Lecture hours


CMPT 846.3: Software Maintenance and Evolution

This course aims to make students aware of the challenges inherent in the maintenance and evolution of software systems, and to provide a working understanding of some of the techniques and best practices currently in use for changing software safely, efficiently and in a cost effective way during the evolution.

Permission of instructor required.


CMPT 851.3: Parallel Programming for Scientific Computing

Despite the advances in computing technology, we continue to need greater computing power to address important scientific questions. Because individual processors have reached their performance limits, the need for greater computing power can only be met through parallel computers. This course is intended for students interested in taking advantage of parallel and distributed computing by writing parallel code for processor-intensive applications to be run on clusters, the cloud, or shared infrastructure such as that provided by Compute Canada. The objectives of this course are to give the students an understanding of how they can use parallel computing in their research and enable them to write parallel code for their applications. Extensive use of practical examples from scientific computing will be made. The programming languages used will be Matlab and Fortran or C. Both the shared and distributed paradigms of parallel computing will be covered via the OpenMP and MPI libraries.

Weekly hours: 3 Lecture hours
Permission of the Instructor is required.
Note: Undergraduate courses in Basic Numerical Analysis and Computer Programming are recommended.


CMPT 854.3: Empirical Software Engineering

Experimentation is important in the software engineering discipline to build a corpus of knowledge based on empirical studies. This course will explore different methods for designing and conducting empirical studies in software engineering. It will cover the various steps of conducting a research project including identifying a research problem, critically review the existing body of literature pertaining to the research area, formulating research questions, collecting, analyzing and interpreting data, building models, assessing validity and reporting the results. In this course, we will evaluate different research methods such as case studies, surveys, grounded theory, ethnographies, and experiments among others.

Weekly hours: 3 Seminar/Discussion hours


CMPT 856.3: Topics in Software Engineering

Concerned with tools, methods, methodologies, and standards in the software engineering of conventional information systems, hypermedia and multimedia systems, and knowledge-based systems. Topics are to be selected from the following: requirements specification methodologies, object oriented design; process modeling; CASE environments and standards; software testing, validation, metrics and quality assurance; reverse engineering; shells for knowledge-based systems; second generation expert systems; knowledge acquisition; and human-computer interfaces.

Weekly hours: 1.5 Lecture hours and 1.5 Seminar/Discussion hours and 1.5 Practicum/Lab hours
Prerequisite(s): CMPT 816 or 826 or equivalent.


CMPT 857.3: Readings in Bioinformatics

Reviews and discusses recent advances and issues in Bioinformatics through paper presentation by students. Topics will range from computational biology and genomics to artificial life and biological computation. Students will be evaluated based on their presentations, literature reviews, and participation, as well as an optional small project.

Weekly hours: 3 Lecture hours
Prerequisite(s): Open to students in computer science, life sciences, and natural sciences, but subject to permission of the instructors.


CMPT 858.3: Topics in Modeling and Operations Research

In-depth coverage of recent research areas from Operations Research, and applications to system modeling. Advanced topics from mathematical programming, queuing theory, inventory control, simulation, Markov modeling, and simulation.

Weekly hours: 3 Lecture hours


CMPT 865.3: Advanced Parallel and Distributed Systems

Concerns selected design issues in distributed and parallel computer systems, particularly those most relevant to the goal of achieving high performance. In the parallel systems areas, such design issues arise in operating systems, run-time support software, compilers, and architecture. Topics concerning distributed systems may include interprocess communications, file systems, and load sharing, with emphasis on support for advanced parallel or multimedia applications.

Weekly hours: 3 Lecture hours
Prerequisite(s): Previous course in operating systems; CMPT 815; or equivalent.


CMPT 866.3: Topics in Human Computer Interaction

Topics studied may include the analysis and design of human-computer interaction, user interface objects and tool kits, intelligent user interfaces and user modeling, adaptive system design, human-computer interaction standards, and computers in society.

Weekly hours: 3 Lecture hours
Prerequisite(s): CMPT 481 or CMPT 811 or permission of instructor.
Note: Students may take this course more than once for credit, provided the topic covered in each offering differs substantially. Students must consult the department to ensure that the topics covered are different.


CMPT 867.3: Affective Computing

Affective Computing is computing that relates to, arises from, or deliberately influences emotion. In this course, we focus on computational methods for sensing user emotion, approaches for adapting computer systems based on emotional state, and human-computer interfaces for expressing emotion.

Weekly hours: 3 Lecture hours
Prerequisite(s): CMPT 481/811 or equivalent.


CMPT 868.3: Social Computing

Covers a variety of topics related to the emerging area of Social Computing and Participative Web. It will discuss theories, technologies and human issues of Web 2.0: how people network online, what networks and communities they form, why they participate and contribute, and how to design infrastructures for successful social applications.

Weekly hours: 3 Lecture hours
Permission of the instructor is required
Prerequisite(s): Experience in web programming or web-based information systems


CMPT 870.3: Foundations of Game User Research

This course teaches students the fundamental skills necessary to evaluate play experience, generate actionable insights, and report and communicate relevant findings. A foundational introduction to games user research (GUR), this course is an introductory class of interest to students interested in games evaluation or research. Evaluation processes, pipelines, and methodologies (including expert evaluation, qualitative and quantitative methods with users, and data analytics) will be covered. Professional skills (e.g., communication, listening, reporting) will be introduced.

Weekly hours: 3 Lecture hours


CMPT 885.3: Human Centric Software Renovation

An advanced course in software engineering that explores human aspects of redesigning, renovating, and maintaining large complex software systems, including topics in collaboration in software engineering, computer-supported cooperative work, provenance and workflow support in scientific software systems, software comprehension, and software renovation and restructuring, and usability engineering.

Weekly hours: 3 Lecture hours
Note(s): Students with credit for CMPT 898: Human Centric Software Renovation may not take this class for credit.


CMPT 886.3: Research Methods I

Senior undergraduate students will work on an introductory research project in an advanced area of computer science under the supervision of a faculty member specializing in the area. Students will be introduced to the research methodology used in the area, and apply that methodology towards a novel research project. They will communicate this research in writing and presentation.

Weekly hours: 3 Seminar/Discussion hours
Restriction(s): Only available to be taken by undergraduate students in a 4-year Honours program in either Computer Science, Software Engineering Option, or Applied Computing at the University of Saskatchewan, in at least their third year. Permission of the instructor required. Not available to be taken by graduate students. This course cannot be used towards satisfying any undergraduate program requirements and can only be used to satisfy course requirements of the MSc in Computer Science program.


CMPT 887.3: Research Methods II

Senior undergraduate students will work on a research project in an advanced area of computer science under the supervision of a faculty member specializing in the area. Students will apply advanced research methodologies used in the area, and apply that methodology towards a novel research project. They will communicate this research in both formal scientific writing and in presentation, with a focus on developing scientific writing towards writing papers.

Weekly hours: 3 Seminar/Discussion hours
Prerequisite(s): Requires 80% in CMPT 886. Only available to be taken by undergraduate students in a 4-year Honours program in either Computer Science, Software Engineering Option, or Applied Computing at the University of Saskatchewan, in at least their fourth year. Permission of the instructor required. Not available to be taken by graduate students. This course cannot be used towards satisfying any undergraduate program requirements and can only be used to satisfy course requirements of the MSc in Computer Science program.


CMPT 898.3: Special Topics

These courses are offered occasionally by visiting faculty and in other special situations. Students interested in these courses should contact the department for more information.


CMPT 899.N/A: Special Topics

Offered occasionally by visiting faculty and in other special situations. Students interested in these courses should contact the department for more information.


CMPT 990.0: Seminar

All graduate students are required to register and regularly attend and participate in the department seminar series throughout their period of residence. Ph.D. students are required to present a seminar based on their own research.


CMPT 994.0: Research – Thesis

Students writing a Master's thesis must register for this course.


CMPT 996.0: Research – Dissertation

Students writing a Ph.D. thesis must register for this course.