Course List

CMPT 250 - Introduction to Computing Science

An overview of computing concepts and technologies. Topics include: the history of computing, computing hardware, operating systems, application software, networks, and a discussion of the role of computing and information technologies in society.

CMPT 275 - Introduction to Programming and Problem-Solving

An introduction to programming and a high-level, object-oriented programming language. Emphasis will be on programming as a problem-solving process which includes analysis, design, coding, testing, implementation and maintenance. Topics include: structured programming, modular design, data objects, variables, assignment, selection, iteration, procedures and functions, arrays and records. Object-oriented programming will be introduced. This course is open to first year students in the Computing Science program.

CMPT 276 - Data Structures (formerly CMPT 302)

The objective of this course is to introduce the basic concepts of programming data structures, including how to select and design data structures that are appropriate for particular applications. Topics include stacks, queues, lists, trees, search trees, graphs, and sets. This course provides a mixture of theoretical knowledge and practical experience. The study of data structures and algorithms is carried out within an object-oriented framework and programming language.

CMPT 304 - Web-Application Design (formerly CMPT 260)

This course introduces client-side and server-side development for creating modern Web-applications. Client-side development topics include HTML, CSS, JavaScript, and JavaScript libraries. Server-side topics include backend processing including input parsing and sanitation, developing asynchronous Web architectures using AJAX, and simple interactions with external data sources such as databases. Social issues related to Internet applications will be presented.

CMPT 305 - Object-Oriented Programming

This course will further develop object-oriented analysis, design and programming. Topics include: objects, classes, constructors, methods, messages, parameters, inheritance, interfaces, encapsulation, polymorphism, and reuse. A large-scale object oriented example will be presented.

CMPT 310 - Database Management Systems

A study of the structures and implementations of database management systems. Topics include: data models, normal forms for data relations, data description languages and query facilities.

CMPT 315 - Real Time Animation and Game Design

The objective of this course is to introduce the programming tools and techniques for creating interactive games and virtual reality simulations, and will focus primarily on programming aspects, including event loops and execution threads, rendering and animation in 3D, and multi-user games and networking. Other topics will include the history of computer/video game technology, game genres and design principles, and the social impact of games.

CMPT 320 - Software Engineering

An experiential introduction to the software development process. Students will work in software development teams to deliver a semester-long software project. Through the completion of the project students are immersed in a modern software engineering environment and are required to develop strong technical and interpersonal skills. Software engineering topics include: the software lifecycle, requirements specification, object-oriented design and analysis, design patterns, verification and maintenance, environments and engineering tools, human-computer interface, social and ethical issues.

CMPT 330 - Concepts of Operating Systems

An overview of the major concepts of operating systems. Students will be introduced to the major components of operating systems through lectures and laboratory exercises. Operating system topics include: historical aspects of operating systems development, systems programming, process scheduling, synchronization of concurrent processes, virtual machines, memory management and virtual memory, I/O and file systems.

CMPT 340 - Programming Language Concepts

This course provides a thorough examination of programming language design and implementation. Topics include language-provided data structuring and data-typing, modularity, scoping, and concurrency. Specific topics include: an overview of interpreters including lexing parsing, Lambda calculus, functional languages, formal semantics and interpreters.

CMPT 350 - Computer Architecture

A study of the basic principles and issues of computer organization and architecture. Topics include: the Von Neumann architecture, CISC and RISC architectures, one and two pass assemblers, loaders and linkers, macro-processors, compilers, interpreters and operating systems.

CMPT 360 - Discrete Mathematics

An introduction to formal logical reasoning and mathematical theory in computing science. Topics include: fundamental logic, set theory, induction, relations and functions, graphs, the principle of inclusion and exclusion, generating functions and recurrence.

CMPT 370 - Algorithm Analysis

Introduction to algorithm analysis, asymptotic notation, and different types of algorithmic techniques (divide and conquer, greedy methods, dynamic programming, backtracking and local search methods), fundamental algorithms for searching and sorting, merging, hashing and graphing. Analysis techniques to estimate program efficiency will also be considered.

CMPT 375 - Introduction to Artificial Intelligence

This course introduces students to the field of Artificial Intelligence (AI) focusing on game playing, constraint satisfaction problems, and uncertain reasoning. AI algorithms enable computers to compete with humans in games such as Chess, Checkers, and Go. Constraint satisfaction problems search large solution spaces for answers meeting requirements.Uncertain reasoning enables inferences using incomplete knowledge. Throughout the course students will reflect on the relationship between human intelligence and artificial intelligence.

CMPT 399 - Special Topics in Computing Science

A course on a topic or figure of special interest to a member of the computing science faculty and offered on a non-recurring basis.

CMPT 400 - Computer Networks

An overview of the field of computer networking. Topics include architecture, layering, multiplexing, addressing and address mapping, routing, naming, network software development, distributed systems, security and the Internet.

CMPT 405 - Software Testing and Security

This course addresses problems and solutions for long-term software maintenance and evolution, and for large-scale, long-lived software systems. Topics include software engineering techniques for large-scale projects, commercial-grade software testing of complex projects, legacy software systems, software evolution, software maintenance, re-use and programming efficiencies, computer systems and security from a development perspective. The social and professional issues that arise in the context of software engineering will be discussed.

CMPT 420 - Numerical Analysis

An introduction to numerical computation. Topics include computer arithmetic, root approximation, interpolation, numerical integration, applications to differential equations, and error analysis.

CMPT 430 - Theory of Computing

An introduction into advanced topics in the theory of computation. Topics include: models of computers including finite automata and Turing machines, computability, computational complexity, basics of formal languages.

CMPT 450 - Image Processing

This course introduces the topic of image processing, including algorithms and data structures for creating, storing, and modifying images. Topics include operations on binary images, image resizing, convolutions, image filters, segmentations, and basic classification techniques. Social issues related to image alteration will be discussed.

CMPT 460 - Cryptography

This course introduces the mathematical algorithms that are used in cryptography. This includes historic cryptography such as the Caesar and Vigenere ciphers, and the German enigma machine. The majority of the course will focus on modern, public key cryptography: the Diffie-Hellman key exchange, RSA, and elliptic curve cryptography. Students will also learn the mathematics used in these algorithms, which includes modular arithmetic, Euler's phi function, introductory information on elliptic curves, and the definitions of groups, rings and fields. The lab component explores prime detection and factorization algorithms, and the implementation of ciphers.

CMPT 470 - Perspectives in Computing Science

A senior level seminar course dealing with special topics in computing. Particular attention will be paid to computer applications, social impacts, ethical and legal issues, worldview perspectives and potential future developments in computing.

CMPT 480 - Practicum I

This is a placement of 10 hours per week in a commercial, industrial or non-profit setting under the supervision of a computing professional. One of CMPT 480 and 481 must be in the non-profit sector. The intern will be expected to maintain a reflective journal and complete a summary paper.

CMPT 481 - Practicum II

The second practicum placement. The requirements for this course are the same as for CMPT 480.

CMPT 496 - Research in Computing Science

An independent project in computing science, designed in consultation with the instructor. This project may be either a software development project or a computing literature research project. Before work commences, the student is required to submit a detailed proposal. Upon completion of the project, the results are presented in the form of either a fully documented program or a research paper, and a seminar.

CMPT 499 - Directed Studies in Computing Science

An opportunity to do advanced study of a special topic of particular interest to a student. Students work with a member of the computing science faculty. Students must apply in advance to a member of the computing science faculty.