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.
Computer Science program description.
NOTE: See the beginning of Section H for abbreviations, course numbers and coding.
|CS1003||Programming and Problem Solving for Engineers||4 ch (3C 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.
Co-requisite: PHYS 1081 or equivalent, or permission from instructor.
|CS1023||Data Structures and Algorithms for Engineers||4 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, BISys, or BScSwE students.
Prerequisite: CS 1003.
|CS1073||Introduction 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.
|CS1083||Introduction 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.
|CS1203||Overview of Computer Science||3 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.
|CS1303||Discrete Structures||4 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.
|CS2033||Software Design for Engineers||4 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.
|CS2043||Software Engineering I||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.
|CS2053||Introduction to Game Development||4 ch (3C 1.5L) [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.
|CS2063||Introduction to Mobile Application Development||4 ch (1.5C 3L) [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. Students will gain experience creating and testing applications for a selected currently prominent mobile platform.
|CS2253||Machine Level Programming||4 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.
|CS2263||Systems Software Development||4 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.
|CS2333||Computability and Formal Languages||4 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.
|CS2383||Data Structures and Algorithms||4 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.
|CS2545||Data Science for Big Data Analytics||3 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.
|CS2605||A Selected Language for Programmers||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.
|CS2613||Programming Languages Laboratory||4 ch (4L) [P]|
Prerequisite: CS 1083.
|CS2685||C++ Programming for Programmers||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.
Prerequisite: CS 2263 or knowledge of Java and C.
|CS2999||Problem Solving for Programmers||3 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.
|CS3003||Biocomputing in Drug Design||5 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 4503 and may be taken for either Computer Science or Science credit.
Prerequisites: CHEM 3523 or permission of the instructor.
|CS3025||Human-Computer Interaction||3 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.
|CS3035||Building User Interfaces||3 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.
|CS3043||Software Engineering II||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.
|CS3113||Introduction to Numerical Methods||3 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.
|CS3383||Algorithm Design and Analysis||4 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.
|CS3413||Operating Systems I||4 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.
|CS3503||Systems Analysis, Design and Project Management||4 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.
|CS3613||Programming Language Interpretation||4 ch (3C 1L) [P]|
Building on students' knowledge of procedural and object oriented programming this course studies the formal syntax and semantics of programming languages, inlcuding grammars, scope, laziness, higher-order programming, state and mutation, recursion, types, and metacircularity.
|CS3703||Multimedia Design||3 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.
|CS3853||Computer Architecture and Organization||4 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.
|CS3873||Net-centric Computing||4 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.
|CS3997||Professional Practice||3 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 or BISys program and 40 ch completed.
|CS4015||Software Architecture and Design Patterns (Cross-Listed: SWE 4403)||4 ch (3C 2L) [P]|
Prerequisite: CS 2043 or permission of the instructor.
|CS4065||Interactive 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.
|CS4355||Cryptanalysis and Database Security||4 ch (3C 1T)|
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.
|CS4405||Operating Systems II||4 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.
|CS4411||Fundamentals of Information Assurance||4 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 computersecurity 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.
|CS4413||Foundations of Privacy||4 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.
|CS4415||Network Security||3 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.
|CS4417||Software Security||4 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.
|CS4419||Digital Forensics||4 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.
|CS4495||Cybersecurity Capstone Project||6 ch [W]|
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.
|CS4545||Big Data Systems||3 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.
|CS4725||Introduction to Artificial Intelligence||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.
|CS4735||Computer Graphics||4 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.
|CS4745||Introduction to Parallel Processing||4 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.
|CS4765||Natural Language Processing||3 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.
|CS4805||Embedded Systems||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.
|CS4865||Principles of Data Communications and Networks Modeling||4 ch (3C 2*L)|
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.
|CS4905||Introduction to Compiler Construction||4 ch (3C 1.5*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.
|CS4935||Advanced Algorithmic Techniques||4 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.
|CS4983||Senior Technical Report||2 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.
|CS4995||Topics in Computing||4 ch|
|CS4997||Honours Thesis||4 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.
|CS4998||Open Source Project||4 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.
|CS4999||Directed Studies in Computer Science||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).
Prerequisites: Normally, Faculty approval and at least 90 ch.