Computer Science 

The L* notation indicates that labs are held on alternate weeks. 

The [P] designation is used to identify courses that involve significant programming work assigned to each individual student. The programming component involves substantive feedback and guidance to develop and improve programming skills. For elective courses, the programming component goes beyond the skills a BCS student can be expected to achieve as part of their core courses. Please see the Bachelor of Computer Science degree regulations for further details.

The Timetable should be used to check the term and time a course is offered. Some courses may not be offered every year. 

NOTE: Only undergraduates in their final year and with a CGPA of 3.0 or better are eligible to take 5th level courses. 

NOTE: See the beginning of Section H for abbreviations, course numbers and coding.

CS1003Programming and Problem Solving for Engineers4 ch (3C 1.5L)

Introduction to the use of digital computers for problem solving and communicating solutions. Covers use of procedures, decisions, loops and arrays focusing on scientific and engineering problem analysis, algorithm design, and program structure. Also includes organizing, tabulating, and graphing program output with different software tools to communicate results. This course is currently taught primarily in Python. NOTE: This course may not be taken for credit by BCS or BScSwE students.

Prerequisite: High School Mathematics.  

Co-requisite: PHYS 1081 or equivalent, or permission from instructor. 

CS1023Data Structures and Algorithms for Engineers4 ch (3C 1.5L)

Introduction to the ideas of abstraction of procedures and data. Implementation and handling of the fundamental data types: lists, stacks, queues, and graphs. Basic concepts of discrete mathematics, elements of combinatorics, aspects of complexity and recursion and algorithm development, including estimation of program resource utilization. This course is currently taught in C. NOTE: This course may not be taken for credit by BCS or BScSwE students.

Prerequisite: CS 1003

CS1073Introduction to Computer Programming I (in Java)4 ch (3C 1.5L 1T) (P)

Covers fundamental concepts such as decisions, loops, arrays, classes, methods and inheritance; focusing on problem analysis, algorithm design, program structure and readability. Introduction to the Java API libraries. 

CS1083Introduction to Computer Programming II (in Java)4 ch (3C 1.5L 1T) (P)

Continues CS 1073 focusing on problem analysis, algorithm design program structure and readability. Covers recursion, sorting and searching, data abstraction, encapsulation, inheritance, polymorphism, simple data structures and files, testing and debugging.

 Prerequisite: CS 1073

CS1103Introduction to Databases4 ch (3C 2L)
Topics include: Motivation for and capabilities of database management systems; the role of databases in a three-tier application architecture; relational data model; relational algebra; functional dependencies and normalization; SQL language, including creating, loading, updating, modifying, and querying database tables; data integrity, security and privacy; entity relationship data modeling; CRUD analysis; stored procedures; accessing a database using an API such as JDBC; brief introduction to advanced topics such as data warehouses, big data, and XML. NOTE: Credit is only given for one of CS1103, CS 2513, CS 2533, INFO 1103 and INFO 2103.

Prerequisites:
CS 1073.
CS1203Overview of Computer Science3 ch (3C 1T)

This course surveys many of the fundamental concepts and theories used throughout computer science. Topics include history of computers, computer hardware, system software, programming languages, networking, theory of computation, social issues, and other topics within computer science. Emphasis is also placed on topics relevant to various areas of study within the BCS program.

Prerequisite: None. NOTE: Intended only for first year computer science students and interested students from other Faculties.

CS1303Discrete Structures4 ch (3C 1T)

Introduces topics in discrete mathematics important in computer science, including: propositional logic, predicate logic using quantifiers, direct and indirect proofs, summation and product notation, mathematical induction, elementary set theory and counting. Students are expected to write mathematical proofs throughout the course. NOTE: Credit will not be given for both CS 1303 and MATH 2203.

CS2043Introduction to Software Engineering 4 ch (3C 2L)

Introduction to fundamentals of the discipline of software engineering with focus on the software development life cycle. Topics include software development methodologies and processes, requirements analysis, modeling, architecture, design, implementation, testing, and maintenance. Basics of software management are also introduced.

Prerequisite: CS 1083. NOTE: Credit is given for at most one of CS 2013, CS 2033, CS 2043, or ECE 4403. 

CS2053Introduction to Game Development4 ch (3C 1.5L) (P) (EL)

Introduces basic concepts and technologies for computer and video game development, including math and physics foundations for games, core technologies and algorithms in game development, game design and implementation, and game development environments and programming. By taking this course, students will understand various elements and phases of game development. Students will develop a small but complete game during the course and reflect upon the process.

Prerequisite:CS 2043 or CS 2263 or ECE 4403

CS2063Introduction to Mobile Application Development4 ch (1.5C 3L) (P) (EL)

Introduces students to the development of application software for mobile computing platforms.  Characteristics of mobile computing platforms versus non-mobile platforms. Mobile application design principles, including design of effective user interaction and factors that affect application performance. Programming common mobile application functionality such as location, orientation, and motion awareness, as well as touch, gesture, and camera input. Interacting with remote APIs. Students will create and test a small but complete mobile application for a selected currently prominent platform and reflect upon the process.

Prerequisite:CS 2043 or CS 2263 or ECE 4403.

CS2253Machine Level Programming4 ch (3C 2L) (P)

Introduces students to lower-level computer operations and the association with higher-level procedural programming constructs. Topics include binary representation of data, instruction formats and execution, assembler programming, scope, functions, user-defined data types using both low- and high-level programming languages. 

Co-requisiteCS 2263. NOTE: Credit cannot be obtained for CS 2253 by students who have completed both CS 2023 and CS 2813.
CS2263Systems Software Development4 ch (3C 2L) (P)

Procedural program development and supporting tools, using the C language. Topics include: implementation of data structures and algorithms, memory management, and performance techniques. Includes software tools for program development such as compilation/linking, building, debugging, and version control.

Prerequisite: CS 1023 or CS 1083. NOTE: Credit will not be given for CS 2263 and CS 2023.

CS2333Computability and Formal Languages4 ch (3C 1T)

This course introduces students to some of the fundamental ideas in theoretical computer science: functions and relations, formal languages, finite automata, regular languages, context-free grammars, context-free languages, push-down automata, pumping lemmas, Turing machines, the Church-Turing thesis, recursive and recursively enumerable languages, the Chomsky hierarchy, the halting problem and other unsolvable decision problems, problem reducibility, and fundamental computational complexity classes.

Prerequisite: CS 1073, CS 1303, and 30 ch. 

CS2383Data Structures and Algorithms4 ch (3C 1T) (P)

Presents formal specifications of abstract data types and their data structure representations, operations, and algorithms. Includes priority queues, dictionaries, graphs, heaps, hash tables, binary search trees, balanced trees,and graph adjacency representations. Covers sorting, searching, dynamic storage handling, and fundamental graph algorithms. Asymptotic analysis of time and space complexity are taught and used throughout the course. Students are expected to implement a variety of data structures and graph algorithms.

Prerequisites: (CS 1083 or ECE 4403) and CS 1303. NOTE: Credit is not given for both CS 2383 and CS 3323.

CS2413Information Security4 ch (3C 1L)
This course gives an introduction to information security. It examines the fundamentals of the modern threat landscape, introducing the concepts of malware and denial-of-service attacks. The course covers security defense mechanisms such as intrusion detection, authentication, access control and cryptography. Students will also study the basics of security planning, including risk assessment and incident response. NOTE: Credit is only given for one of CS 2413 and INFO 2403.

Prerequisites:
CS 1103, CS 2263, and (MATH 1833 or CS 1303 or equivalent).
CS2545Data Science for Big Data Analytics3 ch (3C)

Data science enables one to bring structure to large quantities of data and make analysis possible.  The purpose of the course is to introduce students to the fundamentals of data science and prepare them in dealing with the challenges of Big Data analytics.  It covers basic and advanced Python programming and Python libraries for data analysis.  It presents data visualization techniques and statistical methods, as well as data exploration techniques such as data cleaning and munging, manipulating data, rescaling and dimensionality reduction.  It includes an introduction to machine learning and presents special data analysis topics.  Also, it introduces data analysis approaches with relational databases and Big Data frameworks. NOTE: Credit cannot be obtained for both CS 2545 and STAT 1001.

Prerequisite: CS 1073 or CS1003.

CS2613Programming Languages Laboratory4 ch (4L) (P)

Introduces several programming languages in a hands-on-setting, with a view to preparing students for advanced courses and/or workplace projects. Students will carry out supervised laboratory exercises and independent work designed to improve programming skills, boost confidence and competence in acquiring new languages, and help choose implementation languages for future projects. Currently the course covers Python, JavaScript, Octave/Matlab, and Racket.

PrerequisiteCS 1083.

CS2999Problem Solving for Programmers3 ch (3L) (P)

This course entails a hands-on approach to problem solving for computer programmers. Under instructional guidance the students will work on programming problems that represent basic classes of problems found in computer science. Concepts in data structures, algorithms, geometry, and software development and testing are covered. 

Prerequisites: Experience in programming competition and permission of the instructor.

Co-requisites: CS 2263, CS 2383.

CS3025Human-Computer Interaction3 ch (3C)

Software design for interactive computing. Topics include: human-computer interaction principles, interface design guidelines, the design and execution of usability studies. The characteristics of various styles of interaction are explored. Emphasis is on user-oriented interfaces. Students design, implement, and perform a usability study on an interactive software application. 

Prerequisites: 60 ch and (CS 2043 or MAAC 3102 or permission of instructor). 

CS3035Building User Interfaces3 ch (3C) (P)

Basic approaches and techniques for implementing human-computer interfaces. Basic user interface concepts, common interaction techniques and architectural approaches for constructing user interfaces. Topics include but are not limited to 2D graphics, physics of virtual objects, event-driven programming, interface widgets, design patterns for user-interface development, the use and design of layout managers, user interface builders, programming hardware for physical devices, gesture and shape recognition, internationalization, and networked interactions.

Prerequisite: CS 2043 or (CS 1083 and MAAC 3102) or permission of instructor.

CS3103Programming on the Web3 ch (2C 1L) (P)

Modern web techniques and technologies. Exposes students to traditional web page technologies, but focuses on the dynamic web, including structure and communication between server and client, whether it be machine-to-human, machine-to-app or machine-to-machine, using web services. Topics will include transport protocols and data representation for mobile computing and machine-to-machine communication, as well as client technologies to support dynamic web pages. NOTE: Credit is only given for one of CS 3103 and INFO 3103.

Prerequisites: CS 1103 and (CS 2043 or ECE 4403). CS 2613 is recommended.
CS3113Introduction to Numerical Methods3 ch (3C)

Intended for Computer Science and Engineering students. Error analysis, convergence and stability. Approximation of functions by polynomials. Numerical quadrature and differentiation. The solution of linear and non-linear equations and the solution of ordinary differential equations. This course will emphasize the understanding of numerical algorithms and stress applications in the applied sciences, as well as the influence of finite precision and arithmetic on computational results. Credit will be given for only one of CS 3113 or MATH 3413 or ECE 2412. 

 Prerequisites: (CS 1003 or CS 1073) and (MATH 2213 or MATH 1503)

CS3383Algorithm Design and Analysis4 ch (3C 1T)

This course examines the characteristics of algorithms that lead to efficient computer solutions for discrete problems. A variety of different algorithm classes and design techniques, including divide and conquer, greedy, dynamic programming, and backtracking, are introduced and compared. Design and analysis of randomized algorithms is introduced, along with strategies for dealing with computationally hard problems. Normally, one or more models of parallel algorithms will be discussed.

PrerequisitesCS 2333CS 2383 and (STAT 2593 or STAT 3083). NOTE: Credit is only given for one of CS 3383, CS 3913 and CS 3933.
CS3413Operating Systems I4 ch (3C 1.5L) (P)

This course examines the fundamental role of an operating system in relation to the operation of applications. Essential theory of operating systems is covered, including processes, process synchronization, interprocess communications, process scheduling, storage (primary and secondary) management, resource sharing, security, I/O, and user interfaces. At least one of the major Unix shell languages will be covered.

Prerequisite: CS 2263 or (CS 1023 and ECE 3221)

CS3543Database Systems and Administration3 ch (3C)

Topics include: internal database structures; query evaluation and optimization; transaction management and concurrency control; database recovery; distributed and parallel database architectures; physical database design; performance tuning and capacity planning; database administration; technical architecture design and systems integration. NOTE: Credit is only given for one of CS 3543 and INFO 3403.

Prerequisites: CS 1103 and 60 ch (CS 3413 recommended).
CS3703Multimedia Design3 ch (3C)

Introduction to the design and production of multimedia applications. Includes issues in capture, storage, and effective use of images, sound, and video; animation; multimedia and hypermedia design principles; authoring tools.

Prerequisites: CS 1073 and 60 ch. 

CS3853Computer Architecture and Organization4 ch (3C 2L)

Introduction to computer organization and architecture, digital logic, interfacing and I/O strategies, memory architecture, functional organization, multiprocessing, performance enhancements.

Prerequisite: CS 2253. NOTE: Credit is not given for both CS 3853 and CS 3813. 

CS3873Net-centric Computing4 ch (3C 2L*)

Introduction to fundamentals of data communication and application programming in a networked environment. Topics include data transmission, data link concepts, networking concepts, network security, application protocols, net-centric computing and web programming.

 Prerequisite: CS 2253 or CS 2263. CS 2263 is recommended.

CS3997Professional Practice3 ch (3C) (W)

Covers social context of computing, professional and ethical responsibilities, risks and liabilities of computer-based systems, intellectual property, privacy and civil liberties, and professional certification. Instructs students in the preparation of technical reports in Computer Science. Involves an independent study component resulting in a technical report, typically a survey paper. Covers technical writing, oral presentation and library skills.

Prerequisites: Enrolment in the BCS program and 40 ch completed.

CS4015Software Architecture and Design Patterns (Cross-Listed: SWE 4403)4 ch (3C 2L) (P)
This course introduces concepts of software design patterns and architecture. The course covers principles of reusable object-oriented programming, as well as creational, structural, and behavioural patterns. The course also covers software quality attributes, architectural tactics and patterns, designing and documenting software architecture, architecture reconstruction, architecture evaluation, and software product lines. Students will practice applying and implementing design patterns and software architecture design and evaluation in course work by developing various software systems.


Prerequisite
CS 2043 or permission of the instructor. 

CS4065Interactive Human-Centered Systems 3 ch (3C) (EL)

Introduces current topics in the field of Human-Computer Interaction to provide a deeper understanding of human needs and capabilities in the context of designing and evaluating new people-centered technologies. Foundational concepts, important challenges and technologies will be presented from several domains of application, such as: collaborative technology, information visualization, games, and input and output techniques and devices. Students will develop and evaluate an interactive system and reflect on the process using concepts learned in class. 

Prerequisites: CS2043 and 75 ch, or permission of the instructor. CS 3025 is recommended.

CS4355Cryptanalysis and Database Security4 ch (3C 1T) (P)

A practical survey of the principles and practice of information security. Topics include conventional encryption, asymmetric and symmetric cryptology, digital signatures, key exchange, authentication, electronic mail security, network management security, the common criteria, and threat risk management.

Prerequisite: CS 2413 or approval of the instructor.
CS4405Operating Systems II4 ch (3C 1L) (P)

Covers the structure and design of operating systems. Processor management. Storage management, input/output, interprocess communication, and interrupt handling. Real-time systems, centralized systems, multiprocessor and distributed systems.

Prerequisites: CS 3413 and (CS 3853 or ECE 3221). 

CS4411Fundamentals of Information Assurance4 ch (3C 1T)

Gives an introduction to information assurance, describes the vulnerabilities of IT infrastructures, as well as security threats faced by enterprises today. Based on the basic principles and strategies of information assurance, the course will also examine risk management, the development of security policies, guidelines, awareness programs, employment practice and policies, legal and ethical issues, as well as auditing IT security. Covers broad topics including contemporary issues in computer security, sources of computer security threats and appropriate reactions, encryption and decryption techniques; secure encryption systems; program security algorithms, trusted operating systems; database security issues and solutions, network and distributed system security models, administering security. In all listed topics, the legal and ethical security issues with respect to information assurance is also given.

Prerequisite: CS 3873 or approval of the instructor.
CS4413Foundations of Privacy4 ch (3C, 1T)

Covers diverse topics on privacy preservation including basic cryptographic techniques for privacy, homomorphic encryption techniques for privacy, database privacy, big data privacy, privacy in cloud, privacy in crowdsourced platforms, privacy in healthcare, privacy in vehicular ad hoc networks, privacy in social network, and location privacy. In addition, privacy law and regulation will be also discussed. Emphasizes both theoretical aspects and practical applications of privacy enhancing techniques.

Prerequisite: CS 2413 or approval of the instructor.
CS4415Network Security3 ch (3C) (P)

This course examines advanced topics in network security, including: security risks and threats, security mechanisms across OSI model layers. Students will study the analysis of systems for vulnerabilities, the implementation of security procedures and the monitoring of systems for security breaches. Wireless network security will also be introduced.

Prerequisites: CS 2413 and CS 3873.

CS4417Software Security4 ch (3C, 1T) (P)

Sits at the intersection of computer security and software engineering. This course is designed to give students practical experience with building a software system and securing it. It covers tools, guidelines, rules, principles, and other resources for addressing security issues in every phase of the software development life cycle (SDLC). Students will engage in a significant group-programming project to develop a novel piece of software. Emphasis will be placed on the correctness and robustness of software, and on security as part of the software engineering process.

Prerequisites: (CS 2413 and CS 2043) or approval of the instructor.

CS4419Digital Forensics4 ch (3C 1T)

Introduces digital forensics notions and methods. Students will gain a basic understanding and legal awareness of computer security and forensics, techniques used in the evidentiary process, various methodologies intrinsic to computer forensics with emphasis on computer incident response, and IT systems protection.

Prerequisite: CS 2413 or approval of the instructor.
CS4495Cybersecurity Capstone Project6 ch (W) (EL)

Provides students with an opportunity to conduct a real-world cybersecurity project, from defining a realistic cybersecurity problem to applying a suitable methodology for the design, development, and evaluation of an appropriate solution to the problem. Both the problem statement for the capstone project and the datasets originate from real-world domains similar to those students might encounter within the cybersecurity industry. Students are expected to conduct a research literature review and to develop a set of hypotheses/methodologies for the research project. Involves a research proposal outlining alternative remedies to the problem and hypotheses/methodologies, as well as a final report. Students are expected to complete the capstone project with an industry partner.

Prerequisites: CS 4415 and CS 4419.
CS4545Big Data Systems3 ch (3C) (P)

Data systems are going through a major transition due to the challenges of Big Data processing. The outcome of this shift is the emergence of a new breed of systems that can handle data at massive scales. This course presents some of these systems, along with the principles of query processing. Specifically, it compares Relational vs. NoSQL data models and covers the foundations of query processing, including index-based access and join processing. It presents the principles of parallel databases, and explores batch processing frameworks, as well as iterative processing frameworks. It also covers SQL interfaces over these frameworks. It introduces update-intensive systems and graph data stores. It includes the special topics of spatial and spatio-temporal data processing.

Prerequisites: (CS 1103 or CS 2545) and 75 ch or permission of the instructor. CS 3543 is recommended.

CS4613Programming Language Interpretation4 ch (3C 1L) (P)
Learn core programming language concepts including scope, lazy and eager evaluation, mutation, recursion, dynamic and static types and memory management. Study a statically typed functional language and use it to write interpreters and demonstrating these core concepts. Learn the main techniques of memory management including allocation, liveness detection, reference counting, compaction, and generational collectors.

Prerequisites:
CS 2263, CS 2333, and CS 2613.
CS4725Introduction to Artificial Intelligence3 ch (3C)

Introduction to intelligent agent design, problem solving using search techniques, the use of mathematical logic for knowledge representation and reasoning, decision making under uncertainty, machine learning techniques.

 Prerequisites: CS 2333 and CS 2383

CS4735Computer Graphics4 ch (3C 1L) (P)

Covers interactive 3-dimensional computer graphics program development using object-oriented tools. Includes keyboard and mouse interaction, callback functions, windows and viewports, drawing parametric curves and surfaces, affine transformations, the camera model and graphics pipeline, geometric modeling using polyhedral meshes, flying a camera, arcball scene interaction, perspective projection, and visual realism via colour, lighting and texture. 

Prerequisites: CS 2263, CS 2613, and (MATH 1503 or MATH 2213).

CS4745Introduction to Parallel Processing4 ch (3C 1L)

Parallel computer architectures, design and analysis of parallel algorithms, parallel programming languages, case studies, selected numerical and non-numerical applications.

Prerequisite: CS 3853

CS4765Natural Language Processing3 ch (3C) (P)

Presents an introduction to methods for intelligently processing human language data in text form, as well as relevant linguistic background. Topics include fundamental topics in natural language processing such as n-gram language models, part-of-speech tagging, parsing, and lexical semantics, as well as applications such as spelling correction, document classification, information retrieval, and machine translation. Students are expected to implement and evaluate a variety of natural language processing methods, as well as write reports describing their implementations and their performance.

Prerequisites: CS 3383 and (STAT 2593 or STAT 3083)

CS4805Embedded Systems4 ch (3C 1T)

This course will give an overview of the characteristics and design of embedded systems. Topics include formal models and specification languages for capturing embedded system behaviour; techniques for specification, exploration and refinement; tools for validation, verification, and simulation; and quality and performance metrics.

Prerequisites: CS 3413 and CS 3853

CS4865Principles of Data Communications and Networks Modeling4 ch (3C 2L*)

Covers advanced concepts of data communications systems design: architecture, media, communication channel, routing, protocols, protocol architecture and focuses on modeling and performance analysis. Includes introduction to network simulation in ns2 and OpNet.

Prerequisite: CS 3873.

CS4905Introduction to Compiler Construction4 ch (3C 1.5L*) (P)

Introduces the primary concepts and methodologies used to build compilers. Covers lexical analysis, predictive and LR parsing, compiler compilers and error handling. Syntax-directed translation using abstract parse trees, visitors, symbol tables and type checking. Object code generation including the activation record stack, parameter passing, intermediate representation trees, instruction selection, tree tiling and register allocation.

Prerequisite: CS 2333

CS4935Advanced Algorithmic Techniques4 ch (3C 1T)

This course covers advanced algorithmic techniques for analyzing and handling intractable and complicated tractable problems. Topics include NP-completeness and problem reductions, randomization, approximability, special case analysis, and network flow algorithms.

Prerequisite: CS 3383. 

CS4983Senior Technical Report2 ch (2C) (W)

Builds on the skills developed in CS 3997 through the preparation and presentation of a technical report, which is typically a critical analysis paper.

Prerequisite: CS 3997

CS4995Topics in Computing4 ch

A selected area of computing with a unifying theme will be explored in depth at an advanced level. This course will be offered only occasionally, with the course topic determined by the instructor and the Faculty of Computer Science.

Prerequisites: Normally, enrolment in the BCS or BScSwE program, at least 90 ch completed, and permission of the instructor.
CS4997Honours Thesis4 ch (W) (EL)

This course provides the student with the opportunity to undertake a project at a depth not provided elsewhere in the curriculum. Planning the thesis is done in the term prior to completion. The project topic must have the approval of a supervisor before the start of term. The student submits detailed proposal, schedule, progress reports, and final thesis report to the thesis coordinator with the supervisor's approval. A seminar is required. Detailed guidelines available from coordinator in the preceding term. Offered as an eight month course. 

Prerequisite: CS 3997. Open to all CS students in their final year with a B average in the previous assessment year or a B CGPA. To receive an Honours designation please refer to the CS Curriculum regulations in the program Section of the Calendar. 

CS4998Open Source Project4 ch (P)

An Undergraduate Capstone Open Source Project (UCOSP). Students gain hands-on experience with real-world development practices in a realistic environment while simultaneously learning and applying some core concepts of Computer Science. As part of a national initiative, senior undergraduate students from across Canada work together on open-source software projects. Students work in distributed teams with individuals from other Canadian universities. 

Prerequisites: Instructor approval and at least 90 ch completed. 

CS4999Directed Studies in Computer Science4 ch

Students may pursue directed studies in specific areas and topics related to Computer Science. The content and process of each directed study will be through negotiation between a student and the supervising faculty member(s).

Prerequisites: Normally, Faculty approval and at least 90 ch.