
100 Level, 200 Level, 300 Level, 400 Level, 800 Level, 900 Level
Introduces basic concepts of computer science through the study of traditional elementary programming, object-oriented programming, debugging, design of objects, and standard algorithms with their analysis.
Introduces more of the basic concepts of computer science and object-oriented software development with an emphasis on fundamental data structures (lists, stacks, queues, trees) and associated algorithms. This course includes recursion, abstract data types and selected topics exploring some of the breadth of computer science.

The purpose of this course is to broaden students' view of software development. Topics include introductions to imperative programming languages and scripting languages, programming practices, and tools and techniques for program development and maintenance.
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.
A continuation of CMPT 115 by means an intermediate study of data structures and object-oriented programming. The topics include searching, balanced trees, graphs, file structures, and timing analysis. Introduction to the field of Software Engineering, including formal ADTs, design-by-contract, and UML-based software design and development.
Focuses on elementary applied logic and set theory and relates these concepts to a variety of computer science areas such as syntactic analysis, relational databases, logic programming, artificial intelligence, and formal program verification.

The following aspects of digital systems design will be discussed: binary and multiple-valued logic algebras, combinational logic design and minimization techniques, design of arithmetic circuits, implementation of digital systems using random and array structures, sequential logic design, finite-state machines, register transfer machines, and simple control unit design.
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.
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.
Lectures, assignments and projects dealing with the management, storage, and retrieval of large volumes of data. Concentrates on the relational data model, and relational data base management systems. Topics include: recovery and concurrency, integrity and security, query optimization, normalization, and semantic modeling. Additional topics include multimedia databases and other paradigms.
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.
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.
An overview of rendering, modeling, and animation. Emphasis is on raster graphics. Topics include algorithms for generating lines, circles, and ellipses; half-toning; shading; the Z-buffer; the three-term lighting model; non-photorealistic rendering.

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.
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.
Fundamental theory and practice in the design, implementation, and evaluation of human computer interfaces. Topics include: principles of design, methods for evaluating interfaces with or without user involvement, techniques for prototyping and implementing graphical user interfaces.
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.
This course presents fundamental concepts in computer vision and image processing. Topics may include properties of digital images, digital image formats, image acquisition devices, edge detection, convolution filtering, image segmentation, shape representation, image compression, image morphology, spectral analysis, texture, object recognition, motion analysis and 3D interpretation.

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.
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.
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 systems design, human-computer interaction standards, and computers in society.
Use of texture in computer graphics and computer vision. Texture mapping, algorithms for procedural texture synthesis. Texture as a vision cue; segmentation and shape-form texture. Texture synthesis from example. Graphics hardware and shaders.
Course designed to expose the student to research methods and paradigms, and to provide the opportunity to explore potential research topics under the direction of a faculty member working in that area. Not only should this experience help develop sound research techniques and a sense of discovery, it should promote communication skills (both written and verbal), which aid in the clear presentation of material. These skills will be very valuable in the ultimate completion of thesis requirements. Taken by all M.Sc. and Ph.D. students in Term 2. The 880/890 Coordinator arranges a series of seminars which cover research facilities, methods and standards in the Department. Concurrently while attending these seminars, students begin to research in depth an advanced topic in a selected field under the direction of a faculty member. Deadlines are set for all students to meet a series of milestones as they progress from initial statement of intent to a completed research paper. This process culminates in a Departmental Symposium in the fall when all students present their work to the full department.

Throughout the academic year the Department sponsors a seminar series featuring speakers and topics of wide-ranging interest. On many occasions the speakers are scholars who have been invited to visit the Department, often from other universities. All graduate students are required to register and regularly attend and participate in the departmental seminar series throughout their period of residence. Failure to regularly attend the seminars may result in an incomplete grade for the course, and a requirement to retake CMPT 990. Faculty are also expected to attend these seminars. Attendance is important to enhance the breadth of perspectives of not only students but also faculty. Graduating Ph.D. students are required to present the results of their thesis research in one of these seminars. Many interesting ideas (for theses, graduate papers, or research papers) can often be sparked by notions first glimpsed at a seminar. Where a visitor to the Department is working in an area of particular interest to a student, a special effort should be made to meet with him or her in a smaller group discussion. This can be arranged through the seminar coordinator.
Please see my M.Sc. Thesis page here.