Current Courses & Preparation by Course

Updated June 21, 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: http://algorithms.eng.ucsd.edu/cse202

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: http://cseweb.ucsd.edu/classes/wi17/cse208-a/
http://cseweb.ucsd.edu/~mihir/cse208-Fa13/

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: https://cseweb.ucsd.edu/~wgg/CSE210/

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: https://www.coursera.org/course/hciucsd

Link to Past Course: http://weibel.ucsd.edu/cse218

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: http://cseweb.ucsd.edu/classes/fa17/cse221-a/

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: https://cseweb.ucsd.edu/~gmporter/classes/sp18/cse291/

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:  https://ucsd-pl.github.io/cse-130-230/fa17/

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: http://www.db.ucsd.edu/CSE232S18/ (Note: This past version is by a different instructor)

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: http://cseweb.ucsd.edu/classes/fa16/cse252A-a/

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:  http://cseweb.ucsd.edu/classes/fa17/cse258-a/

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: http://cseweb.ucsd.edu/~viscomp/classes/cse274/wi18/274.html

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, http://cseweb.ucsd.edu/~viscomp/classes/cse274/wi18/274.html
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: https://github.com/nadia-polikarpova/cse291-program-synthesis/wiki