Note: Not all courses described below are offered each year. For a list of course offerings in current academic year, please consult the class search website.

CMPT 100.3

Introduction to Computing

A survey of major computer science areas, combining a breadth of topics with depth via specific examples within each topic. Topics include: history of computing, computer applications, analysis and design, high level programming, computer software, computer hardware, artificial intelligence, and the social impact of computers.

Prerequisite(s): Mathematics A30 or B30 or C30; or Foundations of Mathematics 30; or Pre-Calculus 30.

Note: Students can receive credit for only one of CMPT 100 or CMPT 120. Students with credit for CMPT 105, 111, 140 or 141 may not take CMPT 100 for credit. Students wishing to major in computer science are advised to take CMPT 141 or CMPT 140. Students majoring in computer science may not use CMPT 100 as a course in their major, but may count it as a junior elective.

CMPT 113.3

Introduction to Computer Science for Engineers

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. An introduction to MATLAB leverages the basic principles in an Engineering-specific setting.

Prerequisite(s): Mathematics B30 or Foundations of Mathematics 30 or Pre-Calculus 30.

Note: Students who have credit for CMPT 106, CMPT 111, or CMPT 116 may not receive credit for this course. CMPT 113 cannot be used as a prerequisite for CMPT 117 unless the student has achieved a grade of 75% or higher in CMPT 113 and has permission of the CMPT 117 instructor.

CMPT 116.3

Computing I

Gives the fundamentals of programming, including functions, procedures and arrays. It introduces object-oriented programming and GUI components. Also some basic numerical methods and engineering applications are presented.

Restriction(s): Restricted to students in Physics and Engineering.

Prerequisite(s): Mathematics B30 or Foundations of Mathematics 30 or Pre-Calculus 30.

Note: Students who have credit for CMPT 111 or CMPT 113 may not receive credit for CMPT 116.

CMPT 117.3

Computing II

Continues the development of programming skills started in CMPT 116, with an emphasis on object-oriented programming. Data structures for the storage and efficient retrieval of information will be studied and analyzed, in particular stacks, queues, linked lists and simple binary trees. Examples and exercises will be drawn from engineering applications and numerical methods.

Restriction(s): Restricted to students in College of Arts and Science and College of Engineering.

Prerequisite(s): CMPT 116, or a grade of at least 75% in CMPT 113 and permission of the instructor.

Note: Students can have credit for at most one of CMPT 117 and 115. Students may not take CMPT 100, 102, 106, 120 or 175 for credit concurrently with or after CMPT 117.

CMPT 120.3

Digital Document Processing

Is intended for students interested in how to effectively use modern computer software, and in learning how computers work. It provides an overview of: computer and software components; networking; computer security; basic and advanced document preparation; spreadsheets; and data presentation.

Note: Students can receive credit for only one of CMPT 100 or CMPT 120. Students with credit for CMPT 105, 111, 140 or 141 may not take CMPT 120 for credit. Students wishing to major in computer science are advised to take CMPT 141, or CMPT 140 if required. Students majoring in computer science may not use CMPT 120 as a course in their major, but may count it as a junior elective.

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.

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, or CMPT 116 cannot obtain credit for CMPT 140. Students majoring the Interactive Systems Design, Computer Science, and Bioinformatics programs may not use CMPT 140 as a course in their major, but may count it as a junior elective.

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.

Prerequisite(s): One of (Computer Science 30, CMPT 105, CMPT 140) and one of (Mathematics B30, Foundations of Mathematics 30, Pre-Calculus 30); or MATH 110 or MATH 123 (can be taken concurrently).

Note: Recommended for students with Computer Science 30, CMPT 140 or CMPT 105, or for students in programs that require MATH 110 (or equivalent). Students with credit for CMPT 115 or CMPT 117 cannot take this course for credit. Students may not take CMPT 100 or 120 for credit concurrently with or after CMPT 141.

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.

Prerequisite(s):CMPT 141; or CMPT 111 and permission of the department.

Note:Students with credit for CMPT 270 cannot take CMPT 145 for credit.

BINF 200.3

Introduction to Bioinformatics

An introduction to resources and basic techniques for the analysis of protein and DNA data. Students will become familiar with online DNA and protein structure databases, and with the computational methods available for analyzing data in them and with the application of databases and search tools to biological problems.

Prerequisite(s): CMPT 111 or CMPT 141, BMSC 200.

BINF 210.3

Introduction to Bioinformatics Applications

Provides an introduction to Bioinformatics, and experience with select bioinformatics tools and databases currently utilized in the life sciences. Focus is on analysis, storage, and manipulation of genomic and proteomic information. Topics include major databases, common sequence formats, protein and nucleotide sequence alignment, BLAST, genome annotation, microarrays, gene expression, primer design, high-throughput data analysis.

Prerequisite(s): BMSC 200.3 or equivalent.

Note: Students with credit for BINF 200 cannot get credit for BINF 210. Students cannot take BINF 200 and BINF 210 concurrently.

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.

Prerequisite(s):CMPT 145 or CMPT 115 or CMPT 117.

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.

Prerequisite(s): CMPT 214 and one of MATH 104, MATH 110, MATH 121, MATH 123, MATH 125, or STAT 245 (or equivalent).

Note: A student cannot receive credit for more than one of CMPT 215, EE 331, or CME 331.

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.

Prerequisite(s): MATH 110; and one of CMPT 145, CMPT 115, or CMPT 117.

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 it works. Application of the techniques to interactive systems.

Formerly: First half of CMPT 250.6.

Prerequisite(s): CMPT 145 or CMPT 115 or CMPT 117; and one of MATH 104, MATH 110, MATH 121, MATH 123, MATH 125, or STAT 245 (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 spacial trees; graph representations and searching: path algorithms, dfs, bfs, backtracking, and sorting algorithms.

Formerly: Second half of CMPT 250.6.

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.

Prerequisite(s): CMPT 141.3 or CMPT 106.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.

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.

Prerequisite(s): CMPT 270. MATH 264 or MATH 266 are recommended.

CMPT 317.3

Introduction to Artificial Intelligence

A survey of Artificial Intelligence techniques and underlying theory. Topics include problem solving and planning, knowledge representation techniques, reasoning engines and expert systems, and a tour of various application areas of Artificial Intelligence including machine learning, natural language processing and high-level computer vision.

Prerequisite(s): CMPT 260 and 280.

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.

Formerly: CMPT 422.

Prerequisite(s): CMPT 280, and CMPT 215 or CME 331.

Note: Students with credit for CMPT 422 may not take this course for credit.

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.

Prerequisite(s): CMPT 214, 260, and 270.

Note: One of CMPT 215 or CME 331 recommended.

CMPT 350.3

Web Programming

Focuses on the concepts, technologies and tools needed for the development of web-centric applications. Special emphasis will be given to client-server programming, scripting, integration of existing application and high-level networking issues, e.g., use of SOAP.

Prerequisite(s): CMPT 280.

CMPT 352.3

An Introduction to Computer Security

Considers various aspects of security in information systems, both networked and non-networked. The challenges are managerial and administrative as well as technical. Students will have the opportunity to research real-world cases and to engage in classroom debates about current information security issues.

Prerequisite(s): CMPT 270 or CMPT 275.

CMPT 355.3

Theory and Application of Databases

Lectures, assignments and projects dealing with the management, storage, and retrieval of large volumes of data. Concentrates on the relational data model, and relational database management systems. Topics include: temporal data, recovery and concurrency, integrity and security, normalization, and semantic modelling. Additional topics include multimedia databases and other paradigms.

Formerly: CMPT 374.

Prerequisite(s): CMPT 260 and 270, or CMPT 275.

Note: Students with credit for CMPT 374 may not take this course for credit.

CMPT 360.3

Machines and Algorithms

The first part develops and analyzes some standard techniques for algorithm development which are widely applicable to computer science problems. The second part analyzes several formal models of computers so that their capabilities are known.

Prerequisite(s): CMPT 260 and CMPT 280; and 9 credit units MATH or STAT

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.

Prerequisite(s): CMPT 260 and 9 credit units MATH or STAT.

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.

Prerequisite(s): CMPT 214 and 270.

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.

Prerequisite(s): CMPT 370.

Prerequisite(s) or Corequisite(s): CMPT 280.

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.

Prerequisite(s): CMPT 270

CMPT 384.3

Information Visualization

This course will introduce visualization process for different datasets, design principles, 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.

Prerequisite(s): CMPT 280 (required); MATH 164 (formerly MATH 264) recommended.

Note: 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.

Prerequisite(s): CMPT 270.

Prerequisite(s) or Corequisite(s): One of STAT 242, 245, or EE 216 (STAT 242 preferred.)

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.

BINF 400.3

Advanced Techniques in Bioinformatics

Senior students will be introduced to research in an advanced area of bioinformatics through completion of a research project under the supervision of a faculty member proficient in the area. They also will be required to attend research seminars as directed by the course coordinator.

Prerequisite(s): Permission of the Director. Preference will be given to Honours students in the program.

Prerequisite(s) or Corequisite(s): BINF 300

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.

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.

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.

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.

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. This course is intended as a capstone for the ISD program, but is open to students in other programs also.

Prerequisite(s): CMPT 306

CMPT 408.3

Ethics in Computer Science

Addresses social, ethical, legal and managerial issues in the application of computer science to the information technology industry. Through seminars and case studies, human issues confronting computer science graduates will be addressed. Topics include managerial and personal ethics, computer security, privacy, software reliability, personal responsibility for the quality of work, intellectual property, environment and health concerns, and fairness in the workplace.

Prerequisite(s): Successful completion of 30 credit units in computer science, including at least 3 credit units at the 400-level 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): CMPT 350.

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.

Prerequisite(s): CMPT 317, STAT 245, and MATH 164.

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.

Prerequisite(s): CMPT 332.

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.

Prerequisite(s): CMPT 332.

Prerequisite(s) or Corequisite(s): One of CMPT 352, 432, 434.

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.

Formerly: CMPT 424.

Prerequisite(s): CMPT 332.

Note: Students with credit for CMPT 424 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.

Prerequisite(s): CMPT 215 and 6 credit units from: CMPT 332, CMPT 340, CMPT 360.

Note: Students with credit for CMPT 835 may not take this course for credit. CMPT 435 and CMPT 835 possess overlapping content.

CMPT 436.3

Mobile and Cloud 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.

Formerly: CMPT 426.

Prerequisite(s): One of CMPT 332, 350 or 370.

Note: Students with credit for CMPT 426 may not take this course for credit.

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.

Prerequisite(s): CMPT 340.

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. Students will use compiler construction tools in a term project.

Prerequisite(s): CMPT 360.

Note: CMPT 340 recommended.

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.

Formerly: CMPT 416.

Prerequisite(s): CMPT 360.

Note: Students with credit for CMPT 416 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.

Prerequisite(s): CMPT 370.

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.

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.

Formerly: Was offered as Special Topics 498.

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.

Prerequisite(s): CMPT 370 or CMPT 381.

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.

Prerequisite(s): CMPT 360 and CMPT 384 (required); CMPT 350 and CMPT 381 (recommended).

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.

Prerequisite(s): 6 credit units of 300-level CMPT, and one of (MATH 164 or MATH 266 or EE 216 or CE 318).

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.

Prerequisite(s): (MATH 164 or 266 or EE 216 or CE 318) and (CMPT 317 or CMPT 332 or CMPT 340 or CMPT 370).

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

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.