Academic Programs

Academic Programs

Curriculum

Program of Work

Fall Semester Enrollment

Fall 1 - 2 courses
Spring 1 - 2 courses
Summer 1 - 1 course

Fall 2 - 2 courses
Spring 2 - 2 courses
Summer 2 - Master's Report OR 1 course

Spring Semester Enrollment

Spring 1 - 2 courses
Summer 1 - 1 course
Fall 1 - 2 courses

Spring 2 - 2 courses
Summer 2 - 1 course
Fall 2 - 2 courses, OR 1 course & Master's Report

Courses cover a wide range of software topics on a rotating basis each semester to offer students the flexibility to customize their program of work to their educational needs.

Course Catalog

ECE 381V: Statistical Machine Learning
Introduction to the theoretical and conceptual underpinnings of machine learning, and the practical algorithms that emerge from those foundations. Topics include the probably approximately correct (PAC) learning framework; generalization and the Vapnik- Chervonenkis dimension; the bias-variance tradeoff; linear classification and regression; logistic regression and gradient descent; overfitting and regularization; boosting; support vector machines and kernel methods; decision trees; neural networks; clustering; dimensionality reduction; feature selection/generation; generative models; and variational Bayesian methods.

ECE 382V: Algorithmic Foundations for Software Systems
This course studies combinatorial algorithms. Students will learn proof-based reasoning about algorithms; asymptotic complexity analysis; algorithm design principles; common types of algorithms and their applications; and the nature, impact, and handling of intractability. Please see the separate Course Plan for the tentative schedule of topics covered in the course. The principle focus of the lectures will be theoretical, in the style of the Algorithm Design text listed below. There will also be a number of programming assignments, in which you will be required to implement algorithms.

ECE 382C Software Architectures
The course will teach students about software architectures, architectural model specification techniques and analysis techniques offered by the research community as well as those architectures, model specifications and analytical methods commonly used in industry.

ECE 382C.16 Distributed Information System Security
Intended to acquaint the student with the analysis and engineering techniques employed in securing today's networked information system environment. Emphasis is placed on examination of practical security threats, exposures in distributed systems and the technology that is being applied and developed as countermeasures.

ECE 382C.3 Verification and Validation
This course covers various traditional and state-of-the-art techniques for software validation, a process that includes reasoning about (the correctness of) programs and testing programs. The course content will include both techniques for dynamic analysis, such as glass-box and black-box testing, equivalence partitioning, test strategy and automation, regression testing and debugging, and techniques for static analysis, such as symbolic execution, and also techniques for software model checking including those that employ artificial intelligence-based heuristics.

ECE 382C Mobile Computing
As mobile computing devices like laptops, PDAs, cellular phones, and even miniature sensors become increasingly pervasive, the demand for applications for this novel environment escalates. This course explores the effects of mobile computing on software design and development. The approach taken uses current research projects in the field of mobile computing to highlight the key aspects that complicate software engineering. We will focus on these concerns in the context of application development.

ECE 382V Parallel Algorithms
This is an introductory graduate course in parallel algorithms. It assume undergraduate knowledge of sequential algorithms. The following topics will be covered in the course:

  • Basic Techniques: Reduce, Parallel Prefix Scan, Pointer Jumping, Partitioning, Cascading
  • Breaking Symmetry: Maximal Independent Set Problem
  • Sorting Algorithms: Odd-Even Sort, Bitonic Sort, Parallel Mergesort, Parallel Radix Sort
  • Randomization: Markov's inequality, Chernoff Bound
  • Parallel Graph Algorithms: BFS, Ear Decomposition, Spanning Tree, Shortest Path
  • Parallel Matrix Algorithms: Matrix multiplication, Matrix inversion
  • Miscellaneous: Parallel FFT, String Matching
  • Cuda: Implementing Parallel Algorithms on GPU using CUDA
  • MPI: Implementing Parallel Algorithms using MPI

ECE 382V Systems Programming
This is a computer systems course with an emphasis in software. The course will start with looking at tools like compliers, linkers, loaders, and debuggers that an operating system provides and how they work. We will explore the POSIX System-Call API that all modern operating systems implement with focus on processes, threads, i/o and inter-process-communication. The second part of the class is on the design and implementation of an operating system with focus on process, memory virtualization, and concurrency.

ECE 382V Advanced Programming Tools
Programming is difficult - some of the problem developers face include.

  • How can a project be structured so that developers can work on it concurrently?
  • How can the building of a project be automated?
  • How can a program be written to make it portable?
  • How can a program be prototyped efficiently?
  • How can a program be tested and debugged efficiently?
  • How can the performance of a program be increased?

Using the right tools can solve these problems. Examples include tools for version control, documentation, program building and configuration, automatic testing, program analysis, and integrated development.

Our approach will be to introduce a specific problem, show how a tool can solve the problem, and then develop the technical principles underlying the tool. We will have written homework problems as well as coding exercises for each concept. The class will have a major design project that will begin at the start of the term. Use of the tools will be a required part of the project. We will use open-source tools to illustrate these concepts. The specific tool stack is described in the lectures section of this document. I selected these tools based on my experience at Google; they also power many state-of-the-art commercial projects.

ECE 382V Data Engineering
Course Description – Data Engineering is concerned with the role of data in the design, development, management, and utilization of complex computing/information systems. Issues of interest include database design; meta knowledge of the data and its processing; languages to describe data, define access, and manipulate databases; strategies and mechanisms for data access, security, and integrity control.

ECE 382V Software Testing
This course first introduces the basics of software testing theory and practice, and then presents some recently developed techniques for systematically finding bugs in programs and improving their reliability. Learning the techniques and tools presented in this course is likely to significantly increase the students’ productivity as software developers and testers, and improve the quality of the code they develop.

ECE 382V Large-scale Machine Learning
Linear classifiers and logistic regression. Feedforward neural networks. Convolutional neural networks. Deep learning training by backpropagation. Interpretability of deep neural networks. Prediction and overfitting. Statistical Learning theory. Unsupervised machine learning. Deep generative unsupervised models. Generative Adversarial networks and Autoencoders. Applied deep learning using Python, Tensorflow and Keras.

ECE 380L Data Mining
Basic concepts of data mining, in parallel with a practical track involving hands-on experience with industrial strength software and a term project will be covered.

ECE 382N Communication Networks: Tech/Arch/Protocol
This is an introductory course in Computer Networking. It covers all basic components of modern networks, including: link level technologies such as Ethernet, token rings, and wireless Ethernet; switching technologies such as bridges and ATM; internetworking including IP; the transport layer, including TCP and RPC; and congestion control. Time permitting, we will also consider security, quality of service, high-performance networks, and/or multimedia. Although IP and TCP are primary examples used in the course, it is NOT a course on TCP/IP.

ECE 382N.11 Distributed Systems
This course will expose students to the theoretical and practical aspects of designing distributed systems such as: Datagram Sockets, TCP sockets, Java RMI, Map Reduce Abstraction, Models of Distributed Computation, Logical clocks, vector clocks, Resource Allocation, Drinking Philosophers, Global Property Evaluation, Snapshots, Unstable properties, Ordering of Messages, Elections, Spanning Trees, Synchronizers, Consensus, Byzantine Agreement, and Self-stabilizing algorithms.

ECE 382N.4 Advanced Embedded Microcontroller Systems
Hardware and software design of microcontroller systems; applications, including communication systems; object-oriented and operating systems approaches to interfacing and resource management.

ECE 382 Algorithmic Foundations for Software Systems
We will begin by reviewing foundations of discrete mathematics. We will then study measuring program performance using the big-O notation. Following this, we will study fundamental data structures and their associated algorithms; specifically, we will cover lists, arrays, queues, stacks, hash tables, sets, binary trees, and graphs. We will then focus on general algorithm design principles, such as greedy approaches and dynamic programming. Our last topic will be matrix algorithms. The principle focus of the lectures will be on theoretical aspects, in the style of the CLRS Algorithms text listed below. There will also be programming assignments that will require implementing and testing algorithms. In addition, there will be a team project that either evaluates some textbook algorithm(s) in real-world settings, or explores how to specialize and enhance some textbook algorithm(s) under specific conditions.

ECE 381V Introduction to Optimization
This course will serve as an introduction to modeling, applications and algorithms of discrete and continuous optimization. The students will learn how to model the real world within the paradigms of linear programming, mixed integer linear programming, and more general convex optimization. We will emphasize interesting applications where these classes have had impact in industry, including applications in data mining and machine learning (no prior knowledge of Machine Learning is required).

ECE 379K Engineering Program Analysis
Dynamic analysis is commonly used to detect errors in software, including memory errors, concurrency errors (e.g., data races), performance issues, etc. Although valuable, dynamic analysis can be costly because the program execution needs to be (continuously) monitored to collect necessary data for the analysis. Additionally, naively engineered dynamic analysis can interfere with the program being analyzed, which can impact the conclusions of the analysis. The main goal for this course is to provide motivation for various dynamic analysis techniques, introduce popular tools that are frequently used to implement an efficient and effective dynamic analysis, and provide hands-on experience in developing dynamic analysis techniques.

ECE 379K: Programming Paradigms
There are hundreds of programming languages out there and many of them bring several unique language features that should help developers to write correct software faster. This course will study several programming languages (including C, C++, Java, OCaml, etc.) and some of the unique features that are introduced to increase developers’ productivity. The course will also explore how software engineering practices differ across languages and the set of design patterns for each language. Moreover, unique language features have impact on how developers organize, write, test, and analyze code; we will introduce and discuss several of these aspects.

ECE 398R Master’s Report
Completion of report in the last semester enrolled in the program to fulfill the requirement for the master's degree. Offered on the credit/no credit basis only. Prerequisite: Graduate standing in electrical engineering and consent of the graduate adviser.

Master’s Report/Deadlines

Master's Report

Software Engineering graduate students can complete 10 courses to attain their degree, or 9 courses and a Master's Report. For more information, please review the following:

  • Report Deadlines - This document lists all of the important deadlines students will need to meet in order to graduate (graduation application deadline, project dates): Dates & Deadlines
  • Quick Reference Sheet - This document has links to the graduation application, formatting templates, formatting guidelines, and other important forms: Quick Reference Sheet (PDF)
  • Choosing Committee Members - Information on how to select a supervisor and reader for the report/thesis committee: Quick Reference Sheet (PDF)

Students who choose to do a report must seek approval of their faculty supervisor on the topic one semester in advance.