Computer Science 

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

The [P] designation is used to identify courses with an extensive computer programming component. 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. 

CS1003Programming and Problem Solving for Engineers4 ch (3C 1T 3*L)

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 Matlab. 

Prerequisite: High School Mathematics.  

Corequisites: PHYS 1081 or equivalent, or permission from instructor. 

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

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, BISys, 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. 

Prerequisite: High School Mathematics.

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

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 .

Prerequisite: High School Mathematics. 

CS2033Software Design for Engineers4 ch (3C 3L)

An introduction to software design and implementation in the context of a team project emphasizing object-oriented programming and modularization for building reliable and reusable system components.

Prerequisites: CS 1023 , ECE 2412 or equivalent. Note: This course may not be taken for credit by BCS,BISys, or BScSwE students.

CS2043Software Engineering I4 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 not given for both CS 2013 and CS 2043. 

CS2053Introduction to Game Development4 ch (3C 2L) [P]

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 simple games during the course.

Prerequisite(s): CS 2043 or CS 2263

CS2063Introduction to Mobile Application Development4 ch (3C 1.5L) [P]
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 (e.g. Google Maps). Students will gain experience creating and testing applications for a selected currently prominent mobile platform.Prerequisite(s): CS 2043 or CS 2263
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-requisites: CS 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]
This course examines program development and supporting tools, using the C language. Topics include: organization of programs into procedural components, multi-file program organization, inter-file type checking, and development, maintenance and performance techniques. Software tools for program development such as compilation/linking, building, debugging, version control, profiling and tracing are included.Prerequisites: CS 1083. Note: Credit will not be given for both 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.

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

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 and CS 1303 . Note: Credit is not given for both CS 2383 and CS 3323 . 

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.Prerequisites: (CS 1073 or CS1003).
CS2605A Selected Language for Programmers (O)1 ch (1C) [P]

Introduces a selected programming language to students who have already been exposed to at least one programming language. This course is given in 13 1-hour lectures throughout the term. 

Prerequisite: CS 1083 or equivalent

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.Prerequisite: CS 1083.
CS2685C++ Programming for Programmers (O)1 ch (1C) [P]

Introduces the object-oriented features of C++ to programmers who have already been exposed to Java and C. This course is given in 13 1-hour lectures throughout the term.

Prerequisites: CS 2263 or knowledge of Java and C.

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. 

 Prerequisite: permission of instructor.

Corequisite: CS 2263.

CS3003Biocomputing in Drug Design I5 ch (3C 3L)

Introduction to biocomputing in the pharmaceutical industry. Topics include molecular modeling, rational drug design, high throughput screening and combinatorial chemistry, protein modeling and 3D bioinformatics. Course includes lectures and a computer laboratory component. Note: This course is also cross-listed as CHEM 3003 and may be taken for either Computer Science or Science credit.

Prerequisites: CHEM 10011012 and BIOL 1001,1012 , or permission of instructor. CHEM 2421 or BIOL 2033 are recommended. 

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). 

CS3043Software Engineering II (O)4 ch (3C 3L)

Examines software development processes and management, visual modeling and Unified Modeling Language, requirements capture, use case analysis, system design and implementation, components, forward and reverse engineering, software engineering tools, testing techniques, configuration management, and project management. 

Prerequisite: CS 2043 . Note: Credit is not given for both CS 3013 and CS 3043. 

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 not be given for both CS 3113 and MATH 3413

 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.

Prerequisites: CS 2333 , CS 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 2L) [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.

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

CS3503Systems Analysis, Design and Project Management4 ch (3C 1T) [W]

Introduces students to the life cycle of information systems. Covers techniques and tools used in systems analysis and project management. Emphasizes communication skills, both written and oral, as well as team skills.

Prerequisites: INFO 1103 and 60 ch. 

CS3613Programming Languages4 ch (3C 1T) [P]

Building on students' knowledge of procedural and object oriented programming, this course is a comparative study of modern models of programming. Models such as declarative, concurrent, and relational programming are introduced, and relationships between various models are explored. Formal syntax and semantics of programming languages, as well as basic concepts of programming language translation and interpretation are presented.

Prerequisites: CS 2263 and CS 2333

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.

Prerequisites: CS 2253. Note: Credit is not given for both CS 3853 and CS 3813 . 

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

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 I.S.P. certification through CIPS. 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 or BISys program and 60 ch completed.

CS4003Biocomputing in Drug Design II4 ch (3C 2L)

A follow-up of CS 3003/CHEM 3003 . Topics include pharmacophore perception, solvation models, free-energy calculations, quantitative structure activity relationship (QSAR), virtual drug libraries, chemical diversity and cheminformatics. Course includes lectures and computer laboratory component. Note: This course is cross-listed as CHEM 4003 and may be taken for either Computer Science or Science credit. 

Prerequisite: CHEM 3003 or CS 3003

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) [P]
This course will introduce current topics in the field of Human-Computer Interaction to provide a deeper understanding of human needs and capabilities, and in 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.Prerequisites: CS2043 and 75 ch, or permission of the instructor. CS 3025 is recommended.
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). 

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: INFO 2403 and CS 3873.
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: (INFO 1103 or CS 2545) and 75 ch or permission of the instructor.
CS4725Introduction to Artificial Intelligence (O)4 ch (3C 2*L)

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 3L) [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 and (MATH 1503 or MATH 2213).

CS4745Introduction to Parallel Processing (O)4 ch (3C 2L) [P]

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 Systems (O)4 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 behavior; techniques for specification, exploration and refinement; tools for validation, verification, and simulation; and quality and performance metrics.

Prerequisites: CS 3413 and CS 3853 

CS4905Introduction to Compiler Construction (O)4 ch (3C 2*L) [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 Computing (O)4 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, BISys or BScSwE program, at least 90 ch completed, and permission of the instructor.
CS4997Honours Thesis4 ch [W]

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 Science (O)4 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).

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

CS5865Advanced Data Communications and Networking (O)4 ch (3C 2*L)

The course covers advanced concepts of the analysis and design of data networks and their operation; architecture, media, communication channel characteristics, routing, protocols and protocol architecture, including modeling and performance analysis. Includes introduction to network simulation.

 Prerequisite: CS 3873