Current Courses & Preparation by Course

Updated September 5, 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 learn about a wide variety of operating system design and implementation principles and techniques, examining their usage in the context of both important historical systems as well as modern systems.  In addition, students learn how to read research papers in a critical manner, how to articulate an understanding of and insights into material described in research papers, and how to synthesize research themes and topics across multiple systems.  The topics covered include operating system structures, synchronization, virtual memory, distribution, interaction of architecture and systems, scheduling, communication, file systems, multicore scalability, and virtual machine monitors.

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 227 - Computer Security with Prof. Deian Stefan

Description: This course focuses on computer security, exploring a range of topics -- from systems security to web security, IoT security, and privacy -- to illustrate some of the modern research challenges in the area and the standards for advancement.  It is not designed to be a tutorial course, but rather to give students the context to understand current security research and evaluate their interest in the field.  The course will examine both the defensive and offensive side of the field. At the conclusion of the course, the student will have the foundation to conduct research in computer security and to apply the latest security research to a particular area of practice.

Required Knowledge: Either (1) CSE 221, graduate operating systems or (2) CSE 120/121, undergraduate operating systems, and CSE 127, undergraduate security.

Recommended Preparation for Those Without Required Knowledge: In addition to operating systems, we expect that students have exposure to computer architecture, programming languages, and compilers at a level equivalent to UCSD's undergraduate courses, CSE 141, CSE 130, and CSE 131.

Link to Past Course: N/A

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 237C - Validation & Testing of Embedded Systems with Prof. Ryan Kastner

Description: This class focuses on creating embedded system prototypes using a programmable system-on-chip. The class is graded primarily based on the performance in projects that are spread across the class (one approximately every two weeks). The projects require the student to implement a digital signal processing (DSP) core and integrate it into a prototype wireless RF system. Students will learn how to use modern high-level synthesis tools to create different DSP architectures.

Required Knowledge:  This class is part of the 237 “Embedded Systems” series. This class stands on its own and does not require knowledge from any of the previous 237 classes. Having some understanding of basic digital signal processing (sampling, filtering, transforms), and even better wireless systems, is useful but not required. Equally helpful is having taken classes in computer architecture (and in particular understanding pipelining, memory hierarchy, and digital design). Again, it will be useful but not required as the class is taught in a way that is self-contained. Do note that most students have a good background in at least one of these areas (DSP or computer architecture); if you do not know either, then you will have to work harder.

Recommended Preparation for Those Without Required Knowledge:  For those who do not know DSP, there are countless resources for this. You would be wise to understand finite impulse response (FIR) filters, discrete Fourier transform, and fast Fourier transforms. These form some of the core computations for the projects. Each of these topics will be described in class, but you would be wise to have at least a decent understanding of how these work. The same is true for computer architecture; there are countless resources for this. You generally want to understand the components of a data path (control flow, data flow) and the tradeoffs in memory design (number of ports, throughput, hierarchy, etc.). We will primarily be using the Xilinx Vivado HLS design tool. There are a number of tutorials on this tool at the Xilinx website. If you want to start using the tool early, contact the instructor.

Link to Past Course:

CSE 250A - Probalisitic Reasoning and Learning with Prof. Lawrence Saul 

Description: An introductory graduate course on probabilistic methods for reasoning and decision-making under uncertainty. Inference and learning in probabilistic graphical models; prediction and planning in Markov decision processes; applications to vision, robotics, speech, and natural language processing.

Required Knowledge: Elementary probability, linear algebra, and vector calculus, plus the ability to program in a high-level language (e.g., MATLAB, python, Java, C++, etc).

Recommended Preparation for Those Without Required Knowledge: Equivalent prerequisites at UCSD: CSE 103 - probability & statistics,  Math 20E - vector calculus and Math 20F - linear algebra

Link to Past Course

CSE 252A - Computer Vision I with Prof. David Kriegman

Description:  This course provides a comprehensive introduction to computer vision providing broad coverage including low-level vision (geometric and photometric image formation, color, image feature detection), inferring 3D properties from images (shape-from-shading, stereo vision, motion interpretation) and object recognition.

Required Knowledge:  Students should comfortable with linear algebra, multivariable calculus, basic probability and statistics, and programming.

Recommended Preparation for Those Without Required Knowledge:  Review textbooks on the required mathematics background knowledge.

Link to Past Course:

CSE 254 - Statistical Learning with Prof. Sanjoy Dasgupta

Description:  Neurally-inspired methods for unsupervised learning

Required Knowledge:  Students should be comfortable with algorithms (at the level of CSE 202), linear algebra, and probability.

Recommended Preparation for Those Without Required Knowledge:  N/A

Link to Past Course:  N/A

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 276A - Introduction to Robotics with Prof. Henrik Christensen

Description: This course provides an introduction to the fundamental of robotics across kinematics, sensor systems, estimation,
control, and planning.

The course includes: Introduction to robotics in general, kinematics of robot systems, robot arm systems, sensors for robots, basic vision for robots, estimation methods for extraction of sensor information, robot localization and navigation, control of robot systems, robot motion planning, robot task planning, robot architectures, and evaluation of robot systems

The lectures will be complemented by implementation of key algorithms on small-scale robot systems. The robot will use vision as its primary sensory modality.

Required Knowledge: Basic programming knowledge, linear algebra, statistics

Recommended Preparation for Those Without Required Knowledge: A basis might be CSE 276C - Mathematics for Robotics

Link to Past Course: N/A

CSE 276C - Mathematics for Robotics with Prof. Henrik Christensen

Description: The course will provide a comprehensive introduction to the key mathematical concepts used for modeling, implementing and evaluation of robot systems. The key objectives are: Understand the geometry of linear systems of equations, including null spaces, row spaces and column spaces. Understand eigenvalues, diagonalization, singular value decomposition, least-squares solutions, Learn how to model data using interpolation, linear regression, and higher-order approximation methods., Understand different methods for finding roots of equations, in one dimension and higher, including bisection, Newton's method, Müller's method, Generalize finite-dimensional linear algebra concepts such as orthogonal bases to perform function approximation, including using Legendre polynomials and Fourier series to compute least-squares approximations. Learn about different function norms, Understand optimization techniques such as gradient descent, conjugate gradient, Newton's method. Learn the basics of convex optimization, Develop methods from the Calculus of Variations for higher-order optimization. Apply these techniques to develop the Lagrangian dynamics of a robot manipulator, Learn basic computational geometry techniques, such as Convex Hull and Voronoi diagrams. Implement a geometric robot motion planner. The course will use small home assignments tasks and a larger robot project to exercise the topics covered in class.

Required Knowledge:  The students should have a basic knowledge of mathematics and know one or more programming languages such as Python or Matlab for completion of homework assignments.

Recommended Preparation for Those Without Required Knowledge: Talk to lecturer prior to the start of the course.

Link to Past Course: N/A

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:

CSE 291 (C00) - Software Support for Accelerators with Prof. Tajana Rosing

Description:  The course will cover topics related to architecture of hardware accelerators both used today and proposed for future systems, along with software that is needed to support them.  The topics covered will include operating system support, device drivers, domain-specific languages and compilers.

Required Knowledge:  Undergraduate computer architecture and operating systems

Recommended Preparation for Those Without Required Knowledge:  Read textbook required for those courses, or watch an equivalent class on the web

Link to Past Course: N/A

CSE 291 (D00) - Topics in Embedded Computing and Communication with Prof. Aaron Schulman

Description:  Embedded computing devices such as smartphones, wearables, and IoT devices have overtaken PCs as the predominant platform for computation and communication with billions of devices in use. The shift to the embedded platform has brought with it a host of new challenges. Embedded devices have severely constrained energy capacity, their network connectivity is exclusively provided by unreliable bandwidth-constrained wireless links, they carry a standard set of sensors that are seemingly insufficient for certain applications and also can inadvertently leak private information about their users. Also, embedded devices are notoriously difficult to secure because they lack hardware security primitives.

In this course, we will discuss research that addresses the challenges introduced by the mobile platform by inspecting the blurry lines between electrical engineering and computer science.

As with many other research seminars, the course will be predominately a discussion of a set of research papers. However, we will also discuss the origins of these research projects, the impact that they had on the research community, and their impact on industry (spoiler alert: the impact on industry generally is hard to predict). The course will also include a quarter-long project that will result in a draft of a conference-style paper.

Required Knowledge: Students must have taken an undergraduate systems course, either networking or operating systems. Some experience with embedded systems (e.g., Arduino hacking) and wireless communication (e.g., Software Defined Radios such as the RTL-SDR) is preferred.

Recommended Preparation for Those Without Required Knowledge:  Read the following chapters from MIT's 6.02 course from MIT OpenCourseWare: 4, 10, 14, 15. Read the following chapters in "Introduction to Embedded Systems" by Lee & Seshia: 7, 8, 10, 17

Link to Past Course: