(under construction)

EECS 1001 (1.00)

Research Directions in Computing

Research Directions in Computing

An introduction to research directions within the department
and more broadly within the field. Students will attend lectures and other events organised by the
department. Note: This course is expected to be completed in the first-year of study.

EECS 1012 (3.00)

Introduction to Computing: A Net-centric Approach

Introduction to Computing: A Net-centric Approach

The objectives of 1012 are threefold: providing a first
exposure to event-driven programming, teaching students a set of computing skills (including reasoning
about algorithms, tracing programs, test-driven development, unit testing), and providing an
introduction to computing within a mobile, net-centric context. It uses problem-based approach to expose
the underlying concepts and an experiential laboratory to implement them. A mature mobile software
infrastructure (such as HTML, CSS, and JavaScript) is used so that students can pick up key programming
concepts (such as variables and control flow) within a client-server context without being bogged down
in complex or abstract constructs. Laboratory exercises expose students to a range of real-world
problems with a view of motivating computational thinking and grounding the material covered in lecture.

EECS 1015 (3.00)

Introduction to Computer Science and Programming

Introduction to Computer Science and Programming

This course is an introduction to the concepts and tools of
computer science as students learn a procedural subset of the Python programming language. Python has a
variety of libraries in different domains allowing for the solution of interesting problems which has
made it a popular language in industry and the academy. Students do hands-on work to design, write,
debug and test computer programs that solve problems computationally. Students study variables,
assignments, expressions (arithmetic, relational and logical) and sequencing of statements to implement
solutions for computational problems, in Python. They document programs with comments and preconditions.
They analyze the type correctness of programs via a type checker. They use an Integrated Development
Environment (IDE) to develop, unit-test and debug programs given a problem specification. They apply
conditionals (including nested conditionals) to implement algorithms to solve computational problems.
They code functions to develop modular programming solutions for computational problems. They apply
Python loops (including nested loops) to implement algorithms to solve computational problems. They
apply data structures, including tuples, sets, lists and dictionaries, to implement algorithms to solve
computational problems. They code simple recursive functions to implement algorithms to solve
computational problems.

MATH 1019 (3.00)

Discrete Mathematics for Computer Science

Discrete Mathematics for Computer Science

Introduction to abstraction. Use and development of precise
formulations of mathematical ideas. Informal introduction to logic; introduction to naïve set theory;
induction; relations and functions; big O-notation; recursive definitions, recurrence relations and
their solutions; graphs and trees.

MATH 1025 (3.00)

Applied Linear Algebra

Applied Linear Algebra

Topics include spherical and cylindrical coordinates in
Euclidean 3-space, general matrix algebra, determinants, vector space concepts for Euclidean n-space
(e.g. linear dependence and independence, basis, dimension, linear transformations etc.), an
introduction to eigenvalues and eigenvectors.

MATH 1300 (3.00)

Differential Calculus with Applications

Differential Calculus with Applications

Limits, derivatives with applications, antiderivatives,
fundamental theorem of calculus, beginnings of integral calculus.

EECS 1022 (3.00)

Programming for Mobile Computing

Programming for Mobile Computing

Provides a first exposure to object-oriented programming and
enhances student understanding of key computing skills such as reasoning about algorithms, designing
user interfaces, and working with software tools. It uses problem-based approach to expose the
underlying concepts and an experiential laboratory to implement them. A mature mobile software
infrastructure (such as Java and the Android programming environment) is used to expose and provide
context to the underlying ideas. Laboratory exercises expose students to a range of real-world problems
with a view of motivating computational thinking and grounding the material covered in lectures.

MATH 1310 (3.00)

Integral Calculus with Applications

Integral Calculus with Applications

Transcendental functions, differential equations, techniques
of integration, improper integrals, infinite series.

MATH 1090 (3.00)

Introduction to Logic for Computer Science

Introduction to Logic for Computer Science

The syntax and semantics of propositional and predicate
logic. Applications to program specification and verification. Optional topics include set theory and
induction using the formal logical language of the first part of the course.

EECS 2001 (3.00)

Introduction to the Theory of Computation

Introduction to the Theory of Computation

Introduction to the theory of computing, including automata
theory, formal languages and Turing machines; theoretical models and their applications in various
fields of computer science. The emphasis is on practical applications of the theory and concepts rather
than formal rigour.

EECS 2021 (4.00)

Computer Organization

Computer Organization

Introduction to computer organization and instruction set
architecture, covering assembly language, machine language and encoding, addressing modes,
single/multicycle datapaths (including functional units and controls), pipelining, memory segments and
memory hierarchy.

EECS 2030 (3.00)

Advanced Object Oriented Programming

Advanced Object Oriented Programming

This course continues the separation of concern theme
introduced in LE/EECS 1020 3.00 and LE/EECS1021 3.00. While 1020 and 1021 focuses on the client concern,
this course focuses on the concern of the implementer. Hence, rather than using an API (Application
Programming Interface) to build an application, the student is asked to implement a given API. Topics
include implementing classes (non-utilities, delegation within the class definition, documentation and
API generation, implementing contracts), aggregations (implementing aggregates versus compositions and
implementing collections), inheritance hierarchies (attribute visibility, overriding methods, abstract
classes versus interfaces, inner classes); applications of aggregation and inheritance in concurrent
programming and event-driven programming; recursion; searching and sorting including quick and merge
sorts); stacks and queues; linked lists; binary trees.

EECS 2031 (3.00)

Software Tools

Software Tools

Tools commonly used in the software development process: the
C language; shell programming; filters and pipes; version control systems and "make"; debugging and
testing.

MATH 2015 (3.00)

Applied Multivariate and Vector Calculus

Applied Multivariate and Vector Calculus

Topics covered include partial derivatives; grad, div, curl
and Laplacian operators; line and surface integrals; theorems of Gauss and Stokes; double and triple
integrals in various coordinate systems; extrema and Taylor series for multivariate functions.

MATH 2030 (3.00)

Elementary Probability

Elementary Probability

Introduction to the theory of probability as preparation for
further study in either mathematical or applied probability and statistics. Topics include probability
spaces, conditional probability, independence, random variables, distribution functions, expectation,
Chebyshev's inequality, common distributions, moment-generating functions and limit theorems.

EECS 2011 (3.00)

Fundamentals of Data Structures

Fundamentals of Data Structures

A study of fundamental data structures and their use in the
efficient implementation of algorithms. Topics include abstract data types, lists, stacks, queues, trees
and graphs. The course discusses the fundamental data structures commonly used in the design of
algorithms. Abstract operations on data structures are specified using pre and post conditions and/or
system invariants. Trade-offs between a number of different implementations of each abstract data types
(ADT) are analyzed. Each algorithm operating on data structures is proved correct using loop invariants
or induction. Both formal and informal proofs are introduced though most of the reasoning is done
informally. Data structures are coded and unit tested in an object-oriented language. Selecting the
appropriate ADT and a suitable implementation depending on the application is covered.

MATH 2271 (3.00)

Differential Equations for Scientists and Engineers

Differential Equations for Scientists and Engineers

Introduction to ordinary and partial differential equations,
including their classification, boundary conditions, and methods of solution. Equations, methods, and
solutions relevant to science and engineering are emphasized, and exploration is encouraged with the aid
of software. Three lecture hours per week. One term. Three credits.

EECS 3000 (3.00)

Professional Practice in Computing

Professional Practice in Computing

Professional, legal and ethical issues in the development,
deployment and use of computer systems; their impact on society including privacy and security, computer
crime, malware, and intellectual property; professional ethics and responsibilities; guest lecturers
from industry, government and university.

EECS 3101 (3.00)

Design and Analysis of Algorithms

Design and Analysis of Algorithms

Review of fundamental data structures. Analysis of
algorithms: time and space complexity. Algorithm design paradigms: divide-and-conquer, exploring graphs,
greedy methods, local search, dynamic programming, probabilistic algorithms, computational geometry.
NP-complete problems.

EECS 3201 (4.00)

Digital Logic Design

Digital Logic Design

Theory, analysis, and design of logic circuits used in
digital systems. Students will be introduced to design of switching circuits to implement logic gates,
digital number representation and arithmetic circuits. They will learn how to use logic gates to
construct combinational and sequential logic circuits and functional blocks. The course and the
laboratory introduces the students to hardware description language and modern cad tools.

EECS 3213 (3.00)

Communication Networks

Communication Networks

Introduces the basics of communications and networking.
Topics include transmission media; fundamental limits; protocols and hierarchies; the OSI model;
encoding of data as signals; error and flow control; medium access; routing; internetworking; transport
services; high-level applications.

EECS 3214 (3.00)

Computer Network Protocols and Applications

Computer Network Protocols and Applications

This course focuses on the higher-level network protocols,
security issues, network programming, and applications.

EECS 3215 (4.00)

Embedded Systems

Embedded Systems

Introduction to the design of embedded systems using both
hardware and software. Topics include microcontrollers; their architecture, and programming; design and
implementation of embedded systems using field programmable gate arrays.

EECS 3221 (3.00)

Operating System Fundamentals

Operating System Fundamentals

Principles of operating systems. Concurrent processes, CPU
scheduling, deadlocks, memory management, file systems, protection and security, and case studies.

EECS 3311 (3.00)

Software Design

Software Design

A study of design methods and their use in the correct
implementation, maintenance and evolution of software systems. Topics include design, implementation,
testing, documentation needs and standards, support tools. Students design and implement components of a
software system.

EECS 3342 (3.00)

System Specification and Refinement

System Specification and Refinement

Theory and tools for specifying computer systems
(sequential, concurrent and embedded). Specification (via set theory and predicate logic), modelling,
abstraction, refinement and formal reasoning are undertaken before code development so that systems are
correct by construction under the stated assumptions.

EECS 3401 (3.00)

Introduction to Artificial Intelligence and Logic Programming

Introduction to Artificial Intelligence and Logic Programming

Artificial Intelligence (AI) deals with how to build
intelligent systems. In this course, we examine fundamental concepts in AI: knowledge representation and
reasoning, search, constraint satisfaction, reasoning under uncertainty, etc. The course also introduces
logic programming and Prolog.

EECS 3421 (3.00)

Introduction to Database Systems

Introduction to Database Systems

Concepts, approaches and techniques in database management
systems (DBMS). Logical model of relational databases. An introduction to relational database design.
Other topics such as query languages, crash recovery and concurrency control.

EECS 3431 (3.00)

Introduction to 3D Computer Graphics

Introduction to 3D Computer Graphics

Introduces the fundamental concepts and algorithms of
three-dimensional computer graphics, including object modelling, transformations, cameras, visibility
and shading.

EECS 3451 (4.00)

Signals and Systems

Signals and Systems

An introduction to the mathematical background in signals
and systems; signal and image processing: sampling, discrete Fourier transform, filtering; linear system
theory; Kalman filtering; feedback.

EECS 3461 (3.00)

User Interfaces

User Interfaces

Introduces user interfaces and the tools and mechanisms to
create and prototype them. Students work in small groups and learn how to design user interfaces, how to
realize them and how to evaluate the end result.

EECS 3481 (3.00)

Applied Cryptography

Applied Cryptography

An overview of cryptographic algorithms and the main
cryptosystems in use today, emphasizing the application of cryptographic algorithms to designing secure
protocols.

EECS 3482 (3.00)

Introduction to Computer Security

Introduction to Computer Security

Introduces fundamental computer security concepts. Topics
include security goals and terminology, an overview of the various security domains, an introduction to
cryptography, security policies, risk management and auditing. Laboratory exercises emphasize these
topics in a practical manner.

EECS 3216 (3.00)

Digital Systems Engineering: Modeling, Implementation and Validation

Digital Systems Engineering: Modeling, Implementation and Validation

This is a project intensive course to introduce students to
modeling, implementation, testing, and validation of hardware-based embedded systems. The emphasis in
this course is on complex digital systems that interact with physical systems.

EECS 4101 (3.00)

Advanced Data Structures

Advanced Data Structures

Amortized and worst-case analysis of data structures. Data
structuring paradigms: self-adjustment and persistence. Lists: self-adjustment with the move-to-front
heuristic. Search trees: splay trees, finger search trees. Heaps: skew heaps, Fibonacci heaps.
Union-find trees. Link-and-cut trees. Multidimensional data structures and dynamization. Integrated
with: GS/CSE 5101 3.00.

EECS 4111 (3.00)

Automata and Computability

Automata and Computability

Introduction to more advanced topics in theoretical
foundations of computer science, including the study of formal languages and automata, formal models of
computation, and computational complexity measures. Integrated with: GS/CSE 5111 3.00.

EECS 4141 (3.00)

Introduction to Quantum Computing

Introduction to Quantum Computing

This course presents an overview of the quantum computing
field without assuming any prior exposure to quantum mechanics. Drawing parallels between quantum and
classical computing, the course covers the physical layer briefly before moving to quantum gates, the
circuit model, and quantum algorithms. Quantum information is covered through applications.

EECS 4161 (3.00)

Mathematics of Cryptography

Mathematics of Cryptography

Probability, information theory and number theory and
applications to cryptography. Classical codes such as Caesar shift, Vigenere, ADFGVX, rectangular
substitution, and others. Other topics: comma free codes, perfect secrecy, index of coincidence, public
key systems, primality testing and factorization algorithms.

EECS 4201 (3.00)

Computer Architecture

Computer Architecture

The internal structure and design ideas embodied in many
computers and the techniques for evaluating them. Fast arithmetic algorithms, memory system designs,
pipeline techniques, input-output subsystems and parallel computing structures. Future trends in
computer architecture.

EECS 4214 (4.00)

Digital Communications

Digital Communications

Introduces fundamental principles underlying design and
analysis of digital communication systems. Develops mathematical/physical understanding from the
information source through the transmitter, channel, receiver, and information sink. Topics include
baseband transmission, matched filtering, modulation, channel coding, and spread spectrum.

EECS 4215 (3.00)

Mobile Communications

Mobile Communications

Provides an overview of the latest developments and trends
in wireless mobile communications, and addresses the impact of wireless transmission and user mobility
on the design and management of wireless mobile systems.

EECS 4312 (3.00)

Software Engineering Requirements

Software Engineering Requirements

This course deals with the elicitation, specification and
analysis of software requirements and provides a critical description of available methods and tools,
and practical exercises on applying these methods and tools to realistic problems. Three lecture hours
per week. One laboratory hour per week. One term. Three credits.

EECS 4313 (3.00)

Software Engineering Testing

Software Engineering Testing

An introduction to systematic methods of testing and
verification, covering a range of static and dynamic techniques and their use within the development
process; emphasizes the view that design should be carried out with verification in mind to achieve
overall project goals.

EECS 4314 (3.00)

Advanced Software Engineering

Advanced Software Engineering

Advanced software engineering methods, processes and
measurements (from requirements through to system evolution) for managing and delivering reliable
software on time and within budget. Understanding the different types of systems and their associated
technical, ethical and professional issues.

EECS 4315 (3.00)

Mission-Critical Systems

Mission-Critical Systems

Theory and practical tools underlying deductive and
algorithmic methods for ensuring the safety and correctness of mission critical systems (e.g. medical
systems, nuclear reactors and train systems) with the practical ability to use verification tools to
perform software certification.

EECS 4401 (3.00)

Artificial Intelligence

Artificial Intelligence

This is a second course in Artificial intelligence that
covers selected topics in this area such as: reasoning about action and planning, uncertain and fuzzy
reasoning, knowledge representation, automated reasoning, non-monotonic reasoning and answer set
programming, ontologies and description logic, local search methods, Markov decision processes,
autonomous agents and multi-agent systems, machine learning, reasoning about beliefs and goals, and
expert systems.

EECS 4404 (3.00)

Introduction to Machine Learning and Pattern Recognition

Introduction to Machine Learning and Pattern Recognition

Machine learning is the study of algorithms that learn how
to perform a task from prior experience. This course introduces the student to machine learning concepts
and techniques applied to pattern recognition problems in a diversity of application areas.

EECS 4411 (3.00)

Database Management Systems

Database Management Systems

A study of principles of database management systems. A
thorough analysis of theory of normal, relational algebra and calculus and query languages based on
these concepts. Other topics: security and integrity issues, concurrency control, distributed systems,
query optimization.

EECS 4412 (3.00)

Data Mining

Data Mining

Introduces and presents basic concepts of data mining, data
mining techniques, models and applications. Topics include association rule mining, classification
models, sequential pattern mining and clustering.

EECS 4413 (3.00)

Building E-Commerce Systems

Building E-Commerce Systems

A study of the technical infrastructure that underlies
Electronic Commerce on the Internet. The foundational concepts are presented through a series of
projects that use an industrial-strength framework on the server side, standard-compliant technologies
on the client side, and a variety of messaging protocols on the network side. Best practices, security
concerns, and performance issues are emphasized throughout.

EECS 4414 (3.00)

Information Networks

Information Networks

Information networks are effective representations of
pairwise relationships between objects. Examples include technological networks (e.g., World Wide Web),
online social networks (e.g., Facebook), and biological networks (e.g., Protein-to-Protein
interactions). The study of information networks is an emerging discipline of immense importance that
combines graph theory, probability and statistics, data mining and analysis, and computational social
science. This course provides students with both theoretical knowledge and practical experience of the
field by covering models and algorithms of information networks and their basic properties. In addition,
analysis of information networks provides the means to explore large, complex data coming from vastly
diverse sources and to inform computational problems and better decisions. Topics include: basic graph
theory, network measurements, network models, community detection, graph partitioning, link analysis,
link prediction, information cascades & epidemics, influence maximization, network ties, recommendation
systems, mining graphs, and connections to problems in the social sciences and economics.

EECS 4415 (3.00)

Big Data Systems

Big Data Systems

Storing, managing, and processing datasets are foundational
to both computer science and data science. The enormous size of today's data sets and the specific
requirements of modern applications necessitated the growth of a new generation of data management
systems, where the emphasis is put on distributed and fault-tolerant processing. New programming
paradigms have evolved, an abundance of information platforms offering data management and analysis
solutions appeared and a number of novel methods and tools have been developed. This course introduces
the fundamentals of big data storage, retrieval, and processing systems. As these fundamentals are
introduced, exemplary technologies are used to illustrate how big data systems can leverage very large
data sets that become available through multiple sources and are characterized by diverse levels of
volume (terabytes; billion records), velocity (batch; real-time; streaming) and variety (structured;
semi-structured; unstructured). The course aims to provide students with both theoretical knowledge and
practical experience of the field by covering recent research on big data systems and their basic
properties. Students consider both small and large datasets because both are equally important and
justify different trade-offs. Topics include: software frameworks for distributed storage and processing
of very large data sets, MapReduce programming model, querying of structured data sets, column stores,
key-value stores, document stores, graph databases, distributed stream processing frameworks.

EECS 4421 (3.00)

Introduction to Robotics

Introduction to Robotics

An introduction to robotic manipulators and autonomous
vehicles. The course covers the kinematics and dynamics of manipulators and autonomous platforms, robot
sensors and navigation.

EECS 4422 (3.00)

Computer Vision

Computer Vision

Fundamental concepts of Computer vision and including
aspects of biological vision, image formation process, image processing, feature extraction and
matching, 3-D parameter estimation, applications and statistical techniques. Twelve supervised
laboratory hours.

EECS 4441 (3.00)

Human-Computer Interaction

Human-Computer Interaction

Introduces the concepts and technology necessary to design,
manage and implement interactive software. Students work in small groups and learn how to design user
interfaces, how to realize them and how to evaluate the end result. Both design and evaluation are
emphasized.

EECS 4443 (3.00)

Mobile User Interfaces

Mobile User Interfaces

The design and implementation of user interfaces for
touchscreen devices and tablet computers. Students develop user interfaces that include touch,
multi-touch, vibration, device motion, position, and orientation, environment sensing, video capture,
and audio capture. Twelve Supervised laboratory hours that emphasize these topics in a practical manner.

EECS 4452 (3.00)

Digital Signal Processing: Theory and Applications

Digital Signal Processing: Theory and Applications

Fundamental digital signal processing. Inner product,
Hilbert space, orthogonality principle, discrete-time Fourier transform, discrete Fourier transform,
z-transform, multirate systems, sampling and interpolation.

EECS 4461 (3.00)

Hypermedia and Multimedia Technology

Hypermedia and Multimedia Technology

Design and application of computer systems which provide
information resources for learning, online-help, conceptual exploration, visualization and
entertainment; e.g. hypertext/hypermedia, networked information-servers, systems for collaborative work,
and "virtual reality". One or two topics are discussed in depth using current research literature.

EECS 4481 (3.00)

Computer Security Laboratory

Computer Security Laboratory

Provides a thorough understanding of the technical aspects
of computer security. It covers network, operating systems, and application software security. Computer
laboratory projects provide exposure to various tools in a hands-on setting.

EECS 4482 (3.00)

Network Security and Forensics

Network Security and Forensics

This course provides a comprehensive coverage of theoretical
and practical aspects of network security and forensics. The emphasis is on the limitations and attacks
against network protocols and architectures most widely used in practice, as well as the best known
detection, prevention and remediation techniques against these attacks. The course also has a strong
emphasis on hands-on learning either by using already existing real-world tools or by developing new
custom software. Familiarity with the TCP/IP protocol suite and basic computer networking concepts is
required.

EECS 4491 (3.00)

Simulation and Animation for Computer Games

Simulation and Animation for Computer Games

Introduction to simulation and animation techniques used in
computer games, with a focus on the algorithms and methods that support moving objects in the virtual
environments.

Click on a course to see its description here.

Zoom:**1**x