Current Courses & Preparation by Course

Updated May 15, 2018

This page serves the purpose to help graduate students understand each graduate course offered during the 2018-2019 academic year. Please use this page as a guideline to help decide what courses to take.

Fall 2018 Graduate Course Information

CSE 202 - Algorithm Design and Analysis with Prof. Mohan Paturi

Description:  Please see website below for more information.

Required Knowledge: Please see website below for more information.

Recommended Preparation for Those Without Required Knowledge: Please see website below for more information.

Link to Past Course:

CSE 208 - Advanced Cryptography with Prof. Daniele Micciancio

Description: Advanced topics in cryptography, e.g., interactive protocols, zero-knowledge proofs, secure computation, obfuscation, homomorphic encryption, theoretical foundations, or other topics not covered in the introductory course CSE 207. Exact coverage changes every quarter.

Required Knowledge: Introductory modern cryptography course, like CSE 207, or equivalent. 

Recommended Preparation for Those Without Required Knowledge: CSE 207

Link to Past Course:

CSE 210 - Principles of Software Engineering with Prof. Bill Griswold

Description: Building a great, successful software system is an intellectually challenging activity that is more likely to fail than succeed. Yet, software is becoming increasingly sophisticated and now permeates every aspect of our lives. In short, software is becoming harder to build, but it's increasingly important to build it right.

The methods for creating software have changed dramatically to keep pace. This course is an introduction to the state of the art and hot trends in software development. This course will not only introduce the salient concepts of software engineering, but it will also introduce valuable practices and develop our skills in applying them through a small team project (several projects have gone into production over the years). We will study insightful case studies such as the Mythical Man Month and Microsoft Secrets, as well as classic and leading-edge articles from the research literature, including XP and Design Patterns.

This course is run as a seminar (albeit at a large scale), requiring daily preparation (with hand-ins) and constant, deep participation.  There is also a project with weekly milestones and a project presentation at the end.

Required Knowledge: An undergraduate degree in computer science (or equivalent) is a prerequisite, but an undergraduate software engineering class is not.

Recommended Preparation for Those Without Required Knowledge: These courses would provide adequate preparation: CSE 100 and one of CSE 131 or CSE 110.

Link to Past Course:

CSE 218 - Advanced Topics in Software Engineering with Prof. Nadir Weibel

Description: The advent of affordable sensors and interaction devices (e.g., webcams, mobile phone-based sensors, digital pens, Microsoft SenseCam, Microsoft Kinect, Google glasses, etc.), eye-tracking systems, and wireless mobile computing devices (e.g., mobile smartphones, Arduino boards with 802.11b wireless connectivity, etc.) has created boundless opportunities for in-the-world computing applications that can transform our lives.

This course explores these opportunities in the form of both a project-based class and an in-depth discussion of a range of ubiquitous computing technologies and applications.

On the one hand, we will explore the development of applications and systems based on those devices. On the other hand, we will critically read, and discuss research papers from the literature of ubiquitous computing, pervasive computing, and human-computer interaction.

Every week a new ubiquitous computing device will be introduced and we will discuss the technology behind it, and how it has been used in research (i.e. reading and discussing technical and research papers).

In addition, we will form teams to undertake small research projects. **Teams will span CSE 218 graduate students and CSE 118 undergraduate. Graduate students will take a leadership role in the projects and manage the projects.**  The projects will involve the design and implementation of a ubiquitous computing application, based on one of the devices presented in class. Depending on availability of equipment, we might focus on a variety of different devices. Past classes focused on mobile devices, Microsoft Kinect, Google Glass, mobile eye-tracking.

Required Knowledge: Required is general knowledge in programming applications specifically using C++/C# and Java, as well as web technology.  Interest and knowledge in research methodologies, as well as being capable to read/understand/discuss scientific literature will be important to progress through the readings.

Moreover, graduate students will be required to lead groups, so initiative and willingness to manage a project is required.

Recommended Preparation for Those Without Required Knowledge:

Link to Past Course:

CSE 221- Operating Systems with Prof. Geoff Voelker

Description:The purpose of this course is to teach computer software system structures from a design point of view. We will look at different structuring techniques, and we will examine their usage in both important historical systems and in modern systems.

Required Knowledge: Undergraduate operating systems

Recommended Preparation for Those Without Required Knowledge: CSE 120

Link to Past Course:

CSE 224 - Graduate Networked Systems with Prof. George Porter

Description: This course will provide a broad understanding of exactly how the network infrastructure supports distributed applications ranging from web browsing to cloud computing. Topics covered in the course include sockets programming, data centers and cloud computing, Remote Procedure Calls, scale-out distributed directories, distributed consensus and state management, indirection, overlay networks, load balancing, and security.

Required Knowledge: Projects will be implemented in C/C++ and Java.  An understanding of operating systems concepts and concurrency is recommended.

Recommended Preparation for Those Without Required Knowledge: Review C/C++ programming and Java using online resources.  Review an undergraduate textbook for information on mutexes, condition variables, mutual exclusion, context switching, processes and basic compiler concepts.

Link to Past Course:

CSE 230 - Principles of Programming Languages with Prof. Sorin Lerner

Description: This course will cover functional programming in OCaml, Object Oriented programming in Python, and constraint logic programming in Prolog. Students will also be required to read state of the art papers about research in programming languages. The course will cover material similar to 130, but with some additional focus on graduate-level research.

Required Knowledge:  Undergraduate education in CS should suffice.

Recommended Preparation for Those Without Required Knowledge:  None

Link to Past Course:

CSE 232 - Principles of Database Systems with Prof. Arun Kumar

Description: This is a graduate course on the systems principles of database management systems (DBMSs), especially, relational DBMSs (RDBMSs). RDBMSs are the cornerstone of large-scale data management in numerous application domains that define our modern world, including finance, insurance, retail, logistics, telecommunications, healthcare, governance, and education. Furthermore, concepts developed in the context of RDBMSs are indispensable for the underpinnings of the so-called Big Data and NoSQL systems that were developed for new applications such as Web search, e-commerce, social media, and advanced analytics. This course will cover key principles and systems design issues in RDBMSs, including storage management, query processing and optimization, transaction management, concurrency control, recovery, and parallel DBMSs. More recent topics such as column stores, Big Data systems, data integration, and data cleaning will likely be covered too. This course will overlap with the 190 from Spring'18, but this course does not cover the implementation details of indexing, sorting, and relational operators, although it covers other newer topics. Also, this course has no programming projects.

The class meets 3 times a week from 1:00pm to 1:50pm at CENTR 214. This course will have two in-class midterm exams (20% of the grade each) and one cumulative final exam (60% of the grade).

Required Knowledge: Relational algebra and SQL

Recommended Preparation for Those Without Required Knowledge: Take 132A; online SQL tutorials; Textbook: Database Management Systems (3rd edition), by Raghu Ramakrishnan and Johannes Gehrke (aka the "cow book").

Link to Past Course: (Note: This past version is by a different instructor)

CSE 258 - Recommender Systems & Web Mining with Prof. Julian McAuley

Description:  CSE 258 is a graduate course devoted to current methods for recommender systems, data mining, and predictive analytics.

Required Knowledge:  Students should be comfortable with programming (all example code will be in Python), and with basic optimization and linear algebra.

Recommended Preparation for Those Without Required Knowledge:  Follow the chapter references for the first three weeks of the course for background material on each of the introductory topics covered.

Link to Past Course:

CSE 274 - Selected Topics in Graphics with Prof. Ravi Ramamoorthi

Description: This is a graduate course in selected topics in computer graphics. This quarter, we will cover Sampling and Reconstruction of Visual Appearance. The course website is at:

Required Knowledge: CSE 167 (Computer Graphics) or equivalent at another university

Recommended Preparation for Those Without Required Knowledge: Take my CSE 167x course on edX

Link to Past Course: Even better is the link to the current course,
Past versions (on different topics) accessible off my website. Since topics vary, students may repeat CSE 274 for credit even if they have taken it before with myself or another instructor.

CSE 291 (A00) - Program Synthesis with Prof. Nadia Polikarpova

Description:  This course is a comprehensive introduction to program synthesis: an emerging area that sits at the intersection of programming systems, formal methods, and artificial intelligence. The goal of program synthesis is to generate programs automatically from high-level, possibly incomplete descriptions. The course will cover a wide variety of recent synthesis techniques that differ in the kind of program description they start with (from input-output examples to formal correctness specifications), the search strategy they employ (enumerative, stochastic, or symbolic search), and the kind of information they use to guide the search (counter-example guided synthesis, type-driven synthesis, synthesis with machine learning). The course will involve a project, as well as reading and reviewing research papers.

Required Knowledge:   Programming languages (CSE 230 or equivalent)

Recommended Preparation for Those Without Required Knowledge:   N/A

Link to Past Course: