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 302 - Data Structures
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 includes description of Internet technologies, patterns, frameworks and best practices in the design and development of modern Web-application. The overall architecture of Internet applications will be examined. Students will use a current Internet development platform to create real-world Internet applications, involving client-side and server-side scripting, data security and dynamic connectivity. The social issues related to Internet applications will be discussed.
CMPT 305 - Object-Oriented Programming
This course will further develop object-oriented analysis, design and programming. Topics include: objects, classes, methods, messages, parameters, inheritance, encapsulation, polymorphism, reuse, algorithmic construction and distributed systems.
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
This course is designed for students to work in groups on suitable projects to familiarize them with software engineering principles. This course will concentrate on Unified Software Development and Use Cases. Topics include: requirements specification, functional and object-oriented design, verification and maintenance, environments and engineering tools, the software lifecycle, 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 some of the major operating systems through lectures and laboratory exercises. Topics include: operating system functions, system structure, memory management, correctness, scheduling, concurrent process co-ordination, secondary storage and file systems.
CMPT 340 - Programming Language Concepts
This course will survey the major types of programming languages. Topics include: programming language paradigms (imperative, logic, functional and object-oriented), parameter passing, control structures, data types and typing mechanisms, binding rules.
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, languages, 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 415 - Advanced Database Management Systems
This course introduces advanced concepts associated with the design of databases, such as denormalization, query optimization, indexes, transaction processing and stored procedures, and database triggers. Data warehousing, data mining, distributed database topics, security and administration issues will also be discussed. The labs will examine features of a relational model database management system, and will culminate in a final project.
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 440 - Computer Modelling
An introduction to the use of computer modelling. This course will emphasize the usefulness and limitations of computer simulations and modelling in drawing inferences. Projects will be taken from a variety of topics and will be coordinated with faculty from other disciplines. Students who do not have the necessary prerequisites but can demonstrate a sufficient mathematical proficiency and computing competency can obtain consent from the instructor to enrol in this course.
CMPT 450 - Image Processing and Embedded Images
This course introduces the topic of image processing, including a mathematical approach to understanding the technical aspect of how an image can be created, viewed and modified. Utilizing an image processing toolbox various images will be analyzed using standard algorithms, noisy or degraded images restored and enhanced for improved intelligibility, shapes and textures will be analyzed, and features of images will be embedded or extracted.
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.