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. 

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.
CS2043Introduction to Software Engineering4 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.

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

CS4065Interactive Human-Centered Systems 3 ch (3C)

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.

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

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