| Courses | Theory of Computing and Scientific Computing | Artificial Intelligence and Interactive Systems | Systems: Software and Hardware | Electrical Engineering | Special Topics Courses | Miscellaneous Courses |
EECS5414 3.0 Information Networks Information networks are effective representations of pairwise relationships between objects. Examples include technological networks (e.g., the Web), social networks (e.g., Facebook), biological networks (e.g., protein-to-protein interactions), and more. Analysis of information networks is an emerging discipline of immense importance. This course provides students with theoretical knowledge and practical experience of the field by covering models and algorithms of information networks.
EECS5421 3.0 Operating System Design An operating system has four major components: process management, input/output, memory management, and the file system. This project-oriented course puts operating system principles into action. This course presents a practical approach to studying implementation aspects of operating systems. A series of projects is included, making it possible for students to acquire direct experience in the design and construction of operating system components. A student in this course must design and implement some components of an operating system and have each interact correctly with existing system software. The programming environment is C++ under Unix. At the end of this course, a student will be able to design and implement the basic components of operating systems.
EECS5422 3.0 Performance Evaluation of Computer Systems This course introduces the concept of modelling a computer system, using queuing theory techniques and simulation techniques, then it examines the practical applications of these concepts in some case studies. These case studies are chosen to have a practical impact.
EECS5423 3.0 Programming Language Design The course focuses on the linguistics of programming languages; that is, on the common, unifying themes that are relevant to programming languages in general. Both algorithmic and nonalgorithmic language categories are examined. Current techniques for the formal specification of the syntax and semantics of programming languages are studied. Skills are developed in the critical and comparative evaluation of programming languages.
EECS5424 3.0 Language Processors An introductory course in language processors, focusing on the architecture and implementation of programming language compilers. Topics to be covered will include: compiler organization, compiler-writing tools, finite automata and regular expressions, context-free grammars, scanning and parsing, semantic checking, run-time organization, implementation of a run-time model, storage allocation, code generation, and optimization. Students will be required to implement a compiler for an imperative language in a group project.
EECS5431 3.0 Mobile Communications This course provides an overview of the latest technology, 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.
EECS5441 3.0 Real-Time Systems Theory Specification and verification techniques for real-time systems with many interacting components. Formal design of real-time systems using (a) programming languages with unambiguous semantics of time-related behaviour and (b) scheduling algorithms.
EECS5442 3.0 Real-Time Systems Practice Introduction to the correct use and applications of real-time programming languages. Examples of real-time programming languages are studied in detail and applied to the solution of typical real-time programming problems (e.g., communication networks, avionic systems and process control).
EECS5443 3.0 Mobile User Interfaces This course teaches the design and implementation of user interfaces for touchscreen phones and tablet computers. Students develop user interfaces that include touch, multi-touch, vibration, device motion, position, and orientation, environment sensing, and video and audio capture. Lab exercises emphasise these topics in a practical manner.
EECS5501 3.0 Computer Architecture This course presents the core concepts of computer architecture and design ideas embodied in many machines and emphasizes a quantitative approach to cost/performance tradeoffs. This course concentrates on uniprocessor systems.
EECS6411 3.0 Programming Logic for Complex Systems This course covers program verification methods for a class of programs, commonly referred to as reactive programs. Reactive programs typically never terminate and are run in order to maintain some interaction with the environment. An adequate description of reactive systems must refer not only to initial and final states, but also to the ongoing behavior as a (possibly infinite) sequence of states and events. The purpose of this course is to investigate the use of logical calculi for the specification, design and verification of reactive systems. Topics include: modeling of discrete event systems, semantics of real-time languages, logical and discrete calculi (e.g. temporal logic) for specifying and verifying safety, liveness, deadlock, priority and fairness properties of reactive programs, and prolog tools for automating verification.
EECS6412 3.0 Data Mining This course introduces fundamental concepts of data mining. It presents various data mining techniques, algorithms and applications. Topics include association rule mining, classification models, sequential pattern mining and clustering. Prerequisites: an introductory course in database systems. Students who receive credit for this course may not also receive credit for CSE6490C 3.0.
EECS6414 3.0 Data Analytics and Visualization Data analytics and visualization is an emerging discipline of immense importance to any data-driven organization. This is a project-focused course that provides students with knowledge on tools for data mining and visualization and practical experience working with data mining and machine learning algorithms for analysis of very large amounts of data. It also focuses on methods and models for efficient communication of data results through data visualization.
EECS6421 3.0 Advanced Database Systems This course provides and introduction to and an in-depth study on several new developments in database systems and intelligent information systems. Topics include: internet databases, data warehousing and OLAP, object-relational, object-oriented, and deductive databases.
Degree credit exclusion: CSE5411 3.0
EECS6422 3.0 Parallel and Distributed Computing This course investigates fundamental problems in writing efficient and scalable parallel and distributed applications with emphasis on operating systems support and performance evaluation techniques.
EECS6423 3.0 Parallel Computing on Networks of Workstations The advent of high-speed low-cost networks is making clusters of workstations attractive as a platform for parallel computing. This course investigates strategies for exploiting parallelism on workstation clusters, with an emphasis on distributed shared memory (DSM). The course discussion will center on fundamental DSM issues such as cache coherence and memory consistency. Students will study some of the key work in this area, and learn how to build a distributed shared memory system. The course will involve implementation work on an actual DSM system running on a cluster of workstations, and weekly readings ofselected papers.
EECS6431 3.0 Software Re-Engineering Industrial software systems are usually large and complex, while knowledge of their structure is either lost or inadequately documented. This course presents techniques that aid the comprehension and design recovery of large software systems.
EECS6432 3.0 Adaptive Software Systems Adaptive software systems are software systems that change their behaviour and structure to cope wiht changes in the environment conditions or user requirements. This course covers basic and advanced concepts in engineering adaptive systmes and has a special focus on self-optimization.
EECS6441 3.0 Methods for Large-Scale Software This course studies the application of mathematical methods to the construction of large-scale software systems. It considers issues relevant to large-scale design and the application of mathematics. It involves a large-scale software project in which industrial-strength tools are applied.
EECS6442 3.0 Object Oriented Software Construction This course will focus on the principles, notations, methods and tools needed for the production of quality maintainable software using the full power of object orientation. Main topics include: fundamental software engineering principles, how to specify code using abstract data types and classes, how to develop implementations seamlessly and reversibly from specifications, the production of reliable code via contracts, design methods (BON and UML) and formal methods for verifying the correctness of industrial strength programs.
EECS6444 3.0 Mining Software Engineering Data to Support the Development, Testing and Maintenance of Large Scale Software Systems Software engineering data (such as source code repositories, execution logs, performance counters, developer mailing lists and bug databases) contains a wealth of information about a project's status and history. Applying data mining techniques on such data, researchers can gain empirically based understanding of software development practices, and practitioners can better manage, maintain and evolve complex software projects.
EECS6445 3.0 Software Performance Engineering – Designing, Evaluating, and Optimizing the Performance of Large-Scale Software Systems Many large-scale software systems ranging from e-commerce websites (e.g., Amazon) to telecommunication infrastructures (e.g., AT&T) must support concurrent access from millions of users. Studies show that many field problems of these systems are performance-related, rather than feature bugs. The objective of this course is to provide an overview on the state-of-the-art techniques in the area of software performance engineering.
EECS6501 3.0 Introduction to Parallel Computer Architectures This course will introduce the basic concepts in parallel and non-von Neumann architectures. It covers the following topics: algorithm-architecture mapping, algorithm analysis, parallelism extractions, technology constrains, architecture design, and system development.
EECS6502 3.0 Computational Aspects of VLSI This course is on automated design of VLSI systems and application algorithms. It covers the Mead-Conway VLSI design methodology; area-time trade offs for VLSI oriented computation; layout algorithms; parallel network models, such as hypercube, shuffle-exchange and mesh-of-trees; systolic algorithms; VLSI design tools, such as circuit extraction, design rule checking, placement and routing.