Historical Data: Course Descriptions and Recommended Preparation

Updated May 21, 2019

Spring 2019 Graduate Course Information

This is historical data. This page serves the purpose to help graduate students understand each graduate course offered during Spring 2019. Please use this page as a guideline to help decide what courses to take.

CSE 205A - Logic in Computer Science with Prof. Victor Vianu

Description:  The goal of this course it to introduce students to mathematical logic as a tool in computer science. After covering basic material on propositional and predicate logic, the course
presents the foundations of finite model theory and descriptive complexity. Other topics, including temporal logic, model checking, and reasoning about knowledge and belief, will be discussed as time allows. Evaluation is based on homework sets and a take-home final.

Required Knowledge: Basic computability and complexity theory (CSE 200)

Recommended Preparation for Those Without Required Knowledge: Sipser,  Introduction to the Theory of Computation

Link to Past Course: N/A

CSE 207 - Modern Cryptography with Prof. Mihir Bellare

Description:  This course is an introduction to modern cryptography. Topics include block ciphers, hash functions, pseudorandom functions, symmetric encryption, message authentication, RSA, asymmetric encryption, digital signatures, key distribution and protocols. We will introduce the “provable security” approach, defining security for various primitives and then proving that schemes achieve the defined goals. We adopt a “theory brought to practice” viewpoint, focusing on cryptographic primitives that are used in practice and showing how theory leads to higher-assurance real world cryptography.

Required Knowledge: Theory of computation, algorithms, probability, mathematical proofs and maturity

Recommended Preparation for Those Without Required Knowledge: CSE 200

Link to Past Course: http://cseweb.ucsd.edu/~mihir/cse207/index.html

CSE 216 - Interaction Design Research with Prof. Scott Klemmer

Description: This course is a broad graduate-level introduction to interaction design research. The course begins with seminal work on interactive systems, and moves through current and future research areas in interaction techniques and the design, prototyping, and evaluation of user interfaces. Topics include social computing, crowdsourcing, software tools, design and evaluation methods, ubiquitous and context-aware computing, tangible interfaces, and mobile interfaces. Students will: critically read research papers, undertake a small research project, give a presentation, and write a paper.

Required Knowledge: All PhD students can be admitted. Master's students who have taken an introduction to HCI course can be admitted. Undergraduate students that have taken COGS 14A or CSE 20 can be admitted, as well as undergraduate students who have earned an A- or better in CSE 170/COGS 120 or COGS 102C.

Recommended Preparation for Those Without Required Knowledge: Take one of the required courses listed above to prepare.

Link to Past Course: https://d.ucsd.edu/IxD/research/2018/

CSE 218 - Adv Topic/Software Engineering with Prof. Bill Griswold

Description: Programmers and software designers/architects are often concerned about the modularity of their systems, because effective modularity reaps a host of benefits for those working on the system, including ease of construction, ease of change, and ease of testing, to name just a few. Other possible benefits are reuse (e.g., in software product lines) and online adaptability.

This course will be an open exploration of modularity - methods, tools, and benefits. In the process, we will confront many challenges, conundrums, and open questions regarding modularity.

In this class, we will explore defensive design and the tools that can help a designer redesign a software system after it has already been implemented. Defensive design techniques that we will explore include information hiding, layering, and object-oriented design. In the area of tools, we will be looking at a variety of pattern matching, transformation, and visualization tools.

Each week there will be assigned readings for in-class discussion, followed by a lab session. Each week, you must engage the ideas in the Thursday discussion by doing a "micro-project" on a common code base used by the whole class: write a little code, sketch some diagrams or models, restructure some existing code or the like.

Required Knowledge: Students must satisfy one of:

1. Be a CSE graduate student.  It's also recommended to have either:
(a) programming experience through CSE 100 Advanced Data Structures (or equivalent), or
(b) substantial software development experience, or
(c) CSE 210.

or

2. Have graduate status and have either:
(a) programming experience up through CSE 100 Advanced Data Structures (or equivalent), or
(b) substantial software development experience, or
(c) CSE 210.

Equivalents and experience are approved by petition.

Recommended Preparation for Those Without Required Knowledge: See above

Link to Past Course: https://cseweb.ucsd.edu/~wgg/CSE218/index.html

CSE 223B - Distributed Computing & Systems with Prof. George Porter

Description:  CSE 223B is a 4-unit graduate subject with lectures, paper discussions, a midterm, a final, and a major term research project culminating in writing a research paper of your own. It will present abstractions and implementation techniques that facilitate the design of distributed systems–including both operating systems and sophisticated Internet servers–that can deal with the demands of real-world workloads. Topics will include efficient operating system primitives, high-performance network servers, load shedding, storage systems, security, and fault tolerance. 

Required Knowledge: CSE 221 and/or CSE 222A. Note that undergraduate level operating systems courses (such as CSE 120) do not fulfill the prerequisite requirement, which will be strictly enforced.

Recommended Preparation for Those Without Required Knowledge: N/A

Link to Past Course: N/A

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: undergrad security + some OS class or some PL class

Recommended Preparation for Those Without Required Knowledge: Take CSE 120, CSE 127, CSE 130, CSE 221, and/or CSE 230

Link to Past Course: N/A

CSE 237D - Design Automation and Prototyping of Embedded Systems with Prof. Ryan Kastner

Description:  This is an embedded systems project course. You will work on teams on either your own project (with instructor approval) or ongoing projects. Examples from previous years include remote sensing, robotics, 3D scanning, wireless communication, and embedded vision. You can browse examples from previous years for more detailed information. The class time discussions focus on skills for project development and management. We discuss how to give presentations, write technical reports, present elevator pitches, effectively manage teammates, entrepreneurship,  etc.. The grading is primarily based on your project with various tasks and milestones spread across the quarter that are directly related to developing your project. Each project will have multiple presentations over the quarter. The class ends with a final report and final video presentations.

Required Knowledge: A general understanding of some aspects of embedded systems is helpful but not required. The desire to work hard to design, develop, and deploy an embedded system over a short amount of time is a necessity.

Recommended Preparation for Those Without Required Knowledge: Contact Professor Kastner as early as possible to get a better understanding for what is expected and what types of projects will be offered for the next iteration of the class (they vary substantially year to year). This is particularly important if you want to propose your own project.

Link to Past Course: http://kastner.ucsd.edu/ryan/cse-237d-embedded-system-design/

CSE 240A - Princ/Computer Architecture with Prof. Jishen Zhao

Description:  This course provides a thorough and fundamental treatment of the art of computer architecture. Topics include concepts of von Neumann architectures, methods of evaluating CPU performance, instruction-set design and examples, pipelining, branch prediction, cache and memory hierarchy, main memory organization and memory controller, virtual memory, multicore processors, cache coherence and memory consistency, and GPU architecture.

Required Knowledge: Basics of Instruction Set Architecture, cache design, and the design of single-cycle, multi-cycle, and pipeline processors.

Recommended Preparation for Those Without Required Knowledge: If you do not have the appropriate background, you should either 1) not take this class or 2) spend significant time reviewing the textbook and lecture notes from CSE141. 

Link to Past Course: https://hadiclass.github.io/cse240a-fa18/index.html

CSE 252C - Select Topic/Vision & Learning with Prof. Manmohan Chandraker

Description:  This course will cover advanced concepts in computer vision and focus on recent developments in the field. Example topics include 3D reconstruction, object detection, semantic segmentation, multi-target tracking, action recognition, reflectance estimation, image captioning and domain adaptation. The class will be composed of lectures by the instructor, but with a participation element too where students will engage through lightning presentations. Grading will be based on a participation, mid-term, final exam and course project.

Required Knowledge: Previous experience with computer vision and deep learning is required. Programming experience in Python is required.

Recommended Preparation for Those Without Required Knowledge: CSE 252A, CSE 252B, graduate machine learning classes offered in the CSE and COGS departments.

Link to Past Course: N/A

CSE 254 - Statistical Learning with Prof. Sanjoy Dasgupta

Description: This is a research-oriented course on methods of unsupervised learning that use neural nets: variational autoencoders, GANs, etc. The focus will be on understanding the behavior of these methods, relating them to other forms of unsupervised learning, and identifying good research questions. Each student will give a detailed presentation of a paper in this area.

Required Knowledge: Basic machine learning at the level of CSE 250B.

Recommended Preparation for Those Without Required Knowledge: "Machine Learning: A Probabilistic Approach" by Kevin Murphy

Link to Past Course: N/A

CSE 256 - Statistical Natural Lang Proc with Prof. Ndapa Nakashole

Description:  Natural language processing (NLP) is a field of AI which aims to equip computers with the ability to intelligently process natural (human) language. This course will explore statistical techniques for the automatic analysis of natural language data. Specific topics covered include: probabilistic language models, which define probability distributions over text passages; text classification; sequence models; parsing sentences into syntactic representations; and machine translation.

Required Knowledge: Basic concepts of probability.

Recommended Preparation for Those Without Required Knowledge: Basic concepts of probability can be found here: https://see.stanford.edu/materials/aimlcs229/cs229-prob.pdf.  However, we will spend one lecture revising this material

Link to Past Course: This is an introduction to NLP course, similar in content to: http://cseweb.ucsd.edu/~nnakashole/teaching/190_wi18.html

CSE 276D - Healthcare Robotics with Prof. Laurel Riek

Description:  Robotics has the potential to improve well-being for millions of people, support caregivers, and aid the clinical workforce. This course brings together engineers, clinicians, and end-users to explore this exciting new field. It is project-based, interactive, and hands-on, and involves working with stakeholders to develop prototypes that solve real-world problems. Students will explore the latest research in healthcare robotics, human-robot teaming, and health design.

Required Knowledge: This course will involve design thinking, physical prototyping, and software development. Students with backgrounds in engineering should be comfortable with building and experimenting within their area of expertise. (e.g., CSE students should be experienced in software development, MAE students in rapid prototyping, etc.). Students with backgrounds in design should be comfortable employing mixed-methods approaches to designing with stakeholders. All students should be open to learning how to work with stakeholders from the community, including clinicians and people with disabilities.

Recommended Preparation for Those Without Required Knowledge: Any of the following: CSE 276A, CSE 276B, CSE 216, CSE 219, MAE 207, MED 265, CLRE 252

Link to Past Course: N/A

CSE 276E - Robotic System Design & Implementation with Prof. Steven Swanson

Description:  End-to-end system design of embedded electronic systems including PCB design and fabrication, software control system development, and system integration. The course is an intensive capstone project course that provides students a chance to integrate knowledge from a wide range of domains into a single project.

Required Knowledge: Basic electronics and intermediate C/C++ programming.

Recommended Preparation for Those Without Required Knowledge: Read through an undergraduate circuits textbook.  If you don’t know how to program, you should not take the class.

Link to Past Course: https://sites.google.com/a/eng.ucsd.edu/quadcopterclass/

CSE 291 (A00) – Biomolecular Big Data Systems with Prof. Nuno Bandeira

Description: With the sequencing of the genome and subsequent identification of the list of parts (genes and their protein products), there is renewed emphasis on understanding the many roles of the protein gene products using automated high-throughput approaches. The last few years have thus seen tremendous improvement in the quality and quantity of available mass spectrometry data, as well as the realization that advanced algorithms and big data crowdsourced platforms are critical to the success of this technology. This course will cover the computational, statistical and algorithmic foundations of computational analysis of mass spectrometry data from high-throughput proteomics (the “cellular computers”) and metabolomics (e.g., hormones, drugs, antibiotics) experiments. In addition, we will also cover data science aspects of how these algorithms are integrated with global big data repositories and how these support communities of experts in distributed collaborative annotation of biomolecular ‘living data’.

Required Knowledge: CSE 100 (Advanced data structures) and CSE 101 (Design and analysis of algorithms) or equivalent very strongly recommended; Knowledge of graph and dynamic programming algorithms; Experience with Java or Python programming languages

Recommended Preparation for Those Without Required Knowledge: Online courses and practice of graph and dynamic programming algorithms in Java or Python.

Link to Past Course: N/A

CSE 291 (B00) - Topics in Search and Reasoning with Prof. Sicun Gao

Description: The course will discuss the details of the following algorithms: RRT, MCTS, TRPO/PPO, CDCL. Students will be required to present papers and explore related research topics. 

Required Knowledge:  Reasonable familarity of at least one of the algorithms mentioned in the description. 

Recommended Preparation for Those Without Required Knowledge:  N/A

Link to Past Course:  N/A

CSE 291 (C00) - Genomic Data Science with Prof. Iana Safonova

Description: This course covers various fields of genomic data science, including but not limited to genome assembly, haplotype assembly, analysis of RNA-seq data, computational immunology, and structural genomics. In this course, we discuss various computational problems arising in these fields, algorithms and the state-of-the-art tools solving them. Students will complete a number of homework assignments involving analysis of real sequencing data and interpretation of the results. Students will also complete a scientific project dedicated to one of discussed topics.

Required Knowledge: Any programming language (e.g., Python), algorithms, and basic biology

Recommended Preparation for Those Without Required Knowledge: Take online courses (e.g., at Coursera, Stepik, edx) covering basics of programming and algorithms.

Link to Past Course: Here is a link to online information of this course: https://sites.google.com/view/yana-safonova/cse291

CSE 291 (D00) - Physics Simulation with Prof. Steven Rotenberg

Description: This course will focus on computational physics simulation with emphasis on the dynamics of motion. Specific sub-topics include rigid body dynamics, deformable body dynamics, contact, fracture, and fluid dynamics. Additional topics may include galactic, molecular, and vehicle dynamics.

Required Knowledge:  Familiarity with Newtonian mechanics. Familiarity with C++ or similar programming language. Familiarity with OpenGL or similar graphics API.

Recommended Preparation for Those Without Required Knowledge:  Gain familiarity with the topics listed above.

Link to Past Course:  N/A

CSE 291 (E00) - Advanced Statistical Natural Language Processing with Prof. Taylor Berg-Kirkpatrick

Description:  This course will explore current statistical techniques for the automatic analysis of natural (human) language data. The dominant modeling paradigm is corpus-driven statistical learning, with a split focus between supervised and unsupervised methods. Advanced Statistical NLP is a lab-based course. Instead of homeworks and exams, you will complete four hands-on coding projects. We will also consider practical constraints that affect the scalability of real-world NLP systems to big data.

Required Knowledge: This course assumes a good background in basic probability and a strong ability to program in Java. Prior experience with linguistics or natural languages is helpful, but not required.  There will be a lot of statistics, algorithms, and coding in this class. Recommended perquisites are courses on discrete mathematics, probability, algorithms, and linear algebra.

Recommended Preparation for Those Without Required Knowledge: Review basic probability theory and and practice dynamic programing in a language like C++ or Java.

Link to Past Course: http://www.cs.cmu.edu/~tbergkir/11711fa17/

CSE 291 (F00) - Post-relational Data Models in the Big Data Era with Prof. Alin Deutsch

Description:  The course surveys a wide range of data models and high-level query languages that have achieved prominence with the advent of the Big Data era. These include graph database models and query languages in their various incarnations, such as XML and its standard query languages XPath and XQuery; JSON and SparkSQL, AQL, MongoDB's query language, etc.;  RDF and Semantic Web data (SparQL); graph databases (neo4j's graph data model and the Cypher query language, the Gremlin query language). The course emphasizes the common ideas across these models and languages, connecting them to their common roots in object-oriented and SQL databases.

Required Knowledge: Prerequisite is CSE 132A or CSE232 or equivalent (check with instructor).

Recommended Preparation for Those Without Required Knowledge: Any introductory undergraduate database class suffices.

Link to Past Course: N/A


Winter 2019 Graduate Course Information

This is historical data. This page serves the purpose to help graduate students understand each graduate course offered during Winter 2019. Please use this page as a guideline to help decide what courses to take.

CSE 200 - Computability and Complexity with Prof. Russell Impagliazzo

Description:  This is an introduction to computational complexity (and a bit of decidability) geared for first-year non-theory students. We cover such topics as time hierarchy, completeness for NP and related classes, randomized computation, and the polynomial hierarchy.

Required Knowledge: Some basic algorithms is important, such as an undergraduate class on the subject that includes say, dynamic programming. A class in formal languages is helpful but not really required. The more abstract mathematics you've had the better, not because it will be used, but because the level of abstraction is the biggest challenge students face in CSE 200.

Recommended Preparation for Those Without Required Knowledge: If you skim through the early chapters of Sipser, and are comfortable solving the problems given, you should be prepared. Otherwise, you might want to take CSE 105 first.

Link to Past Course: http://cseweb.ucsd.edu/classes/wi16/cse200-a/

CSE 203B - Convex Optimization Algorithms with Prof. CK Cheng

Description:  We study the formulations and algorithms solving convex optimization problems. The topics include convex sets, functions, optimality conditions, duality concepts, gradient descent, conjugate gradient, interior-point methods, and applications. The objective of the course is to provide students the background and techniques for scientific computing and system optimization.

Required Knowledge: Linear algebra.

Recommended Preparation for Those Without Required Knowledge: Study the Appendix (Mathematical background, Numerical linear algebra) of the textbook before the quarter starts.

Link to Past Course: http://cseweb.ucsd.edu/classes/fa17/cse291-a/

CSE 221 - Graduate Operating Systems with Prof. Joseph Pasquale

Description: This is an advanced class on operating systems where we critically review some of the more influential operating systems research literature. As a result of taking this class, you will learn the major principles of operating system design from original sources. We will be reviewing both older ("classic") and modern papers on operating systems. Topics covered include operating system structure, protection, virtual memory, synchronization, communication, virtual machines, networked and distributed operating systems, file systems, scheduling, and virtual machines.

Required Knowledge: Undergraduate operating systems.

Recommended Preparation for Those Without Required Knowledge: CSE 120.

Link to Past Course: http://cseweb.ucsd.edu/classes/wi08/cse221

CSE 222A - Computer Communication Networks with Prof. Alex Snoeren

Description: CSE 222A is a graduate course on computer networks. The continued exponential growth of the Internet has made the network an important part of our everyday lives. Companies use the network to conduct business, doctors to diagnose medical issues, etc. This course will provide a broad understanding of exactly how the network infrastructure supports distributed applications. Topics covered in the course include: Internet routing, software-defined networking, datacenters, content distribution networks, and peer-to-peer systems.

Required Knowledge: Prerequisites for the course include a general understanding of computer networks, distributed systems, and operating systems.

Recommended Preparation for Those Without Required Knowledge: CSE120, CSE123

Link to Past Course: http://cseweb.ucsd.edu/classes/wi18/cse222A-a/

CSE 230 - Principles of Program Languages with Prof. Ranjit Jhala

Description:  Unlike most engineering artifacts, Programming Languages and Programs are mathematical objects whose properties can be formalized. The goal of this course is to introduce students to fundamental intellectual and mechanical tools required to rigorously analyze Languages and Programs and to expose them to recent developments in and applications of these techniques. We shall study operational and axiomatic semantics, two different ways of precisely capturing the meaning of programs by characterizing their executions. We will see how the lambda calculus can be used to distill essence of computation into a few powerful constructs. We use that as a launching pad to study expressive type systems useful for for analyzing the behavior of programs at compile-time and then, how to derive expressive program analyses using Abstract Interpretation. 

Required Knowledge: Basic discrete math (sets, boolean algebra, induction etc.).

Recommended Preparation for Those Without Required Knowledge: Be familiar with the sort of topics covered in CSE 20, CSE 105 and CSE 130.

Link to Past Course: http://cseweb.ucsd.edu/classes/wi08/cse230/
http://cseweb.ucsd.edu/classes/wi13/cse230-a/

CSE 231 - Advanced Compiler Design with Prof. Sorin Lerner

Description:  In this course, we will explore the basic techniques that are the cornerstone of a variety of program analysis tools, including optimizing compilers, just-in-time compilers, program verifiers, bug fingers, code refactoring tools, garbage collectors, and runtime monitoring systems. These techniques may come in handy, no matter what field of CS you end up working in. The course will have a large project component.

Required Knowledge: Programming in C++.

Recommended Preparation for Those Without Required Knowledge: Learn how to program in C++.

Link to Past Course: https://ucsd-pl.github.io/cse231/wi18/

CSE 232B - Database System Implementation with Prof. Alin Deutsch

Description: The course explores the internal structure of database systems via a project that takes students from specification of the grammar and semantics of the query language to implementing an evaluation engine for it, then building in optimizations. We use as vehicle the W3C Standard XML query language XQuery.

Required Knowledge: Students should have taken an introductory course on principles of database systems (CSE 132A or CSE 232, or equivalent project experience with SQL databases). They should also be comfortable programming in Java.

Recommended Preparation for Those Without Required Knowledge: CSE 132A or CSE 232

Link to Past Course: https://cseweb.ucsd.edu/classes/sp16/cse232B-a/

CSE 237A - Intro to Embedded Computing with Prof. Tajana Rosing

Description: Increasing integration of communications, multimedia and processing and relentless digitization of data (including even RF data) continues to expand the scope and complexity of embedded systems. To appreciate these advances, and to productively contribute to future advances of these systems, a critical appreciation of the underlying technology underpinning is a must. The goal of this course is to develop a comprehensive understanding of the technologies behind the embedded systems, particularly, those using computing elements (processor, DSP, or ASPs). The students develop an appreciation of the technology capabilities and limitations of the hardware, software components for building embedded systems, and methods to evaluate design tradeoffs between different technology choices.

Required Knowledge: None.

Recommended Preparation for Those Without Required Knowledge: undergraduate computer architecture, operating systems, Linux

Link to Past Course: http://cseweb.ucsd.edu/classes/wi18/cse237A-a/

CSE 240B - Parallel Computer Architecture with Prof. Bryan Chin

Description: The days of improving computer performance via frequency and scalar micro-architectural improvements are long gone.  Moore's Law is reaching its limits and the challenges related to Dennard scaling have prevented the easy performance gains we enjoyed in the past.  Parallel computation has been and continues to be a powerful method at our disposal to take advantage of new silicon capabilities. This course is divided into two parts.  In the first part, we will study advanced computer architecture topics such as cache coherency for NUMA machines and memory consistency models.  In particular, we will look at the challenges for architecture as the number of processors scales to large numbers.  

In the second part of the course, we will explore recent advances and research in parallel computation and advanced computer architecture.  Past topics have included: GPUs, TPUs, transactional memory, wide SIMD and vectorization, SIMT, and on-chip interconnects.  Topics may change, depending on the interests of the class.

Required Knowledge: Background in computer architecture.  Some knowledge of C programming is helpful but not essential.  240A or equivalent.

Recommended Preparation for Those Without Required Knowledge: See instructor.

Link to Past Course: https://sites.google.com/eng.ucsd.edu/cse240bspring2018/home

CSE 241A - VLSI Integrated Computing Circuitry with Prof. Andrew Kahng

Description: Design methodologies and tradeoffs in the physical ("netlist to layout") implementation of VLSI systems.  Algorithm and optimization foundations for solution of interconnection, clustering, partitioning, placement, power-ground distribution, clocking, routing, performance estimation, timing closure and other fundamental VLSI physical design problem classes.   Computer-aided design and performance analysis algorithms and optimization frameworks are studied in the context of lectures/homeworks, design exercises and mini-projects.

Textbook: Weste and Harris, CMOS VLSI Design: A Circuits and Systems Perspective, 4th edition.

Required Knowledge:  Layout (ECE 165 or ECE 260A) and logic design (CSE 140) are strongly recommended as background.

Recommended Preparation for Those Without Required Knowledge:  Study of a VLSI Design book such as Weste/Harris (used in ECE 260A), and browsing of a VLSI physical design algorithms book such as Sherwani.

Link to Past Course:  Not possible (course website is password-protected due to IP access restrictions agreed to by UCSD and various companies (EDA, foundry).

CSE 250B (B00) - Learning Algorithms with Profs. Kamalika Chaudhuri & Sanjoy Dasgupta

Description: The course will cover three broad subjects:

I. Prediction problems (classification, regression, and conditional probability estimation). Methods covered will include nearest neighbor classification, generative models for classification, linear regression, logistic regression, support vector machines, kernel methods, boosting, and random forests. The emphasis will be on developing a sound understanding of these methods, based on probability, linear algebra, and optimization.

II. Representation learning. Methods covered will include k-means clustering, hierarchical clustering, principal component analysis, singular value decomposition, multidimensional scaling, and manifold learning.

III. Deep learning. Deep networks will be presented as a marriage of representation learning and predictive modeling.

Throughout the course, the focus will be on four desiderata: efficiency, confidence, convergence, and interpretability.

Required Knowledge: No prerequisites are enforced, but lack of the following will prove to be a significant impediment:

Proficiency with Python, preferably using notebooks.
Familiarity with multivariate calculus, basic probability, and linear algebra.

Recommended Preparation for Those Without Required Knowledge: N/A

Link to Past Course: http://cseweb.ucsd.edu/~dasgupta/250B/index.html

CSE 252B - Computer Vision II with Prof. Benjamin Ochoa

Description: This course covers topics in imaging geometry using techniques from computer vision, photogrammetry, and projective geometry. These topics include methods for projecting a 3D scene to a 2D image, reconstructing a 3D scene from 2D images, and camera parameter estimation. Upon completion of this course, students will have an understanding of single and multiple view geometry, and the algorithms used in practice.

Required Knowledge:  Linear algebra, calculus, probability and statistics. MATLAB, Python, or other programming experience.

Recommended Preparation for Those Without Required Knowledge:  Undergraduate courses and textbooks.

Link to Past Course:  https://cseweb.ucsd.edu/classes/wi18/cse252B-a/

CSE 254 - Statistical Learning with Prof. Yoav Freund

Description: The focus of this course will be on notions of intrinsic dimension and dimensionality reduction.

It is often the case that very high dimensional data, such as images, can be compressed into low dimensional vectors with small reconstruction error. The dimension of these vectors is the **intrinsic dimension** of the data. We will discuss several techniques for estimating intrinsic dimension and for mapping data vectors to their low-dimensional representations. The ultimate goal is to find streaming algorithms can can process very large dataset in linear or sub-linear time.

Techniques we will cover will include:

Principle component analysis, K-means analysis, Haussdorff dimension, Kmeans-dimension, Stability and information of K-means, Locally linear embeddings (LLE), Graph laplacian, random walk, heat dissipation and their eigen-vectors, The heat kernel, the Laplace-Beltrami operator and its eigenfunctions, Combining Kmeans++ and the heat kernel

Required Knowledge:  The course is intended to grad students with a strong math background and the ability to fill in gaps in their math knowledge. Specific areas of that will be used include: linear algebra, graph theory, streaming algorithms, differential equations and differential geometry.

Recommended Preparation for Those Without Required Knowledge:  

Link to Past Course:  

CSE 260 - Parallel Computation with Prof. Bryan Chin 

Description: Exploration of programming for parallel computing systems such as shared memory systems, message passing systems and highly parallel accelerators (like GPUs). The course will cover the principles of parallel programming by exploring algorithm design and how those design choices are affected by the machine architecture.

Required Knowledge: This is a graduate level course. Students should have strong programming ability in C (and familiarity with C++).   Familiarity with computer architecture and operating systems is useful but not strictly required.

Recommended Preparation for Those Without Required Knowledge: Class in programming which requires the use of C or strong programming skills in similar languages. Review computer architecture - especially memory system design (e.g. cache hierarchy). Contact instructor for more help or advice.

Link to Past Coursehttps://sites.google.com/eng.ucsd.edu/cse260winter2018/

CSE 276B - Human-Robot Interaction with Prof. Laurel Riek

Description:  Robots are entering our world - in homes, hospitals, roadways, schools, and workplaces. How do we make them functional, useful, and acceptable? This course will explore the core computational, engineering, and experimental challenges and techniques in human-robot interaction (HRI). Course topics include: perception of people, shared autonomy and control, coordination and collaboration, and experimental robotics. We will review seminal and recent papers in the field, and engage in team-based projects with physical, mobile robots.

Required Knowledge:  This class requires expertise in programming and data structures. Students should be comfortable decomposing a complex problem, selecting suitable algorithms, and implementing them. Prior exposure to robotics, computer vision, or machine learning is helpful, but not required. Experience using unix-like operating systems is also a plus. Students should be comfortable reading and analyzing scientific papers at the graduate level. Please note, this class will be time-intensive. It involves both software development and significant reading and discussion of graduate-level research papers.

Recommended Preparation for Those Without Required Knowledge:  

Link to Past Course: 

CSE 280A - Algorithms in Computational Biology with Prof. Vineet Bafna

Description:  This course covers algorithms for population genetics. The ability to re-sequence our genomes has given us an unprecedented ability to understand our genetic history. In this course, we cover some of the basic theory and algorithmic strategies used to mine our genome.

Required Knowledge:  Basic undergraduate level probability and combinatorics, knowledge of data structures and algorithms (CSE101 or equivalent), and some linear algebra. No Biological knowledge is assumed, butthe student is expected to learn modern biology as it is being taught in class.

Recommended Preparation for Those Without Required Knowledge:  Please take CSE282, CSE202, or UCSD's online course on algorithms.

Link to Past Course:  http://proteomics.ucsd.edu/vbafna/teaching-2/cse280a-algorithms-for-genetics/

CSE 282 - Bioinformatics II: Sequence and Structure Analysis - Methods and Applications with Prof. Pavel Pevzner

Description:  This class closely follows the textbook Phillip Compeau and Pavel Pevzner. Bioinformatics Algorithms: An Active Learning Approach. 3rd edition. Active Learning Publishers 2018.

Required Knowledge:  The course assumes some prior background in biology, some algorithmic culture (CSE 101 course on algorithms), and some programming skills.

Recommended Preparation for Those Without Required Knowledge:  If you don’t have required knowledge listed above, you should take the online UCSD course on Algorithms on Coursera.

Link to Past Course:  N/A

CSE 291 (A00) - Topics in Emerging Computer Architectures with Prof. Jishen Zhao

Description:  This course provides an introduction to state-of-the-art and emerging computer architecture designs and a vision of future trends. Students are expected to explore research opportunities related to what are discussed in this class. Topics that will be covered in this class include but not limited to: (1) advanced topics in memory system organization and design; (2) emerging technologies and their applications in various computer systems, such as CPU, GPU, and data centers (including 3D/2.5D integration, nonvolatile memories, photonic network-on-chip (NoC)); (3) datacenter architectures, fabrication, and metrics; (4) non-von Neumann architectures and neuromorphic computing.

Required Knowledge:  undergraduate or graduate-level computer architecture

Recommended Preparation for Those Without Required Knowledge:  Textbook on advanced computer architecture

Link to Past Course: N/A

CSE 291 (B00) - Communication Complexity with Prof. Shachar Lovett

Description: Communication complexity is an computational model which captures communication bottlenecks in algorithm design. In its simplest setting, there are two players, Alice and Bob, each holding their own input. Their goal is to compute a function of their joint inputs, while minimizing the communication involved. 

This abstract model captures many real-life scenarios. These include time-space tradeoffs for data structures, streaming algorithms, sketching algorithms, sub-linear time algorithms, and the ability of linear programs to approximate NP-hard optimization problems. 

In this class, we will both show applications of the communication complexity model to prove lower bounds for computational problems (such as the ones described above), as well as learn some of the techniques used to prove communication complexity lower bounds.

Required Knowledge: There is no specific required knowledge, except for mathematical maturity. It is good to have taken graduate algorithms (202) and complexity (200) classes before to get a broader view of computation, but it is not a strict requirement.

Recommended Preparation for Those Without Required Knowledge: Reviewing the material for CSE 200 and CSE 201.

Link to Past Course: N/A

CSE 291 (C00) - Machine Learning on Geometrical Data with Prof. Hao Su

Description: This course will explore the state of the art algorithms for both supervised and unsupervised machine learning on geometric data - analysis as well as synthesis. After a brief introduction to geometry foundations and representations, the focus of the course will be machine learning methods for 3D shape classification, segmentation, and symmetry detection, as well as new shape synthesis. Deep neural architectures appropriate for data in the form of point clouds or graphs will also be studied, as well as architectures that can associate semantic information with object models, including functionality. Techniques for analyzing not only individual 3D models but entire collections of such through computing alignments, and maps or correspondences, will be discussed.

Required Knowledge: strong background of linear algebra, machine learning, and deep learning, preliminary in statistics and geometry

Recommended Preparation for Those Without Required Knowledge: convex optimization, differential geometry

Link to Past Course: N/A

CSE 291 (D00) - Computer Vision: Advances in 3D Reconstruction with Prof. Manmohan Chandraker

Description: The field of 3D reconstruction has made tremendous progress in recent years, with popular applications such as self-driving and augmented reality. Yet, significant unsolved problems remain, for instance, in generalizing to complex materials, fast motions, non-rigid deformations or semantic concepts. On the other hand, the advent of deep learning has led to significant gains in image classification and recognition. This has opened the possibility of translating those advances to tackle some of the above challenges in 3D reconstruction. In this course, we will review some of the fundamental concepts that play a role in 3D reconstruction and study recent developments that enhance or use them in novel ways. Consistent with recent advances, several of our topics will exploit frameworks based on deep learning.

Required Knowledge: This is an advanced class, covering recent developments in computer vision research. Students at all levels including undergraduates, masters and PhD, with a strong interest in computer vision may enroll. Prior background in computer vision and machine learning is required, preferably through research experience or as covered by CSE 152, 252 and similar offerings. Students are encouraged to contact the instructor if unsure about meeting any criteria for enrollment.

Recommended Preparation for Those Without Required Knowledge: CSE 152, CSE 252 or similar at UCSD, CS231n at Stanford (online material)

Link to Past Course: http://cseweb.ucsd.edu/~mkchandraker/classes/CSE291/2017/

CSE 291 (F00) - Advanced Data Analytics and Machine Learning Systems with Prof. Arun Kumar

Description: This is a research-oriented course on the emerging area of advanced data analytics and machine learning (ML) systems, at the intersection of data management, ML, and systems. This area is a driving force behind several modern data-driven applications that use large-scale ML, machine perception, and machine reading to analyze large and complex datasets, including enterprise business intelligence, healthcare, recommendation systems, social media analytics, Web search, Web security, and Internet of Things. Students will learn about the latest research in this area and get hands-on experience doing either a research project or an in-depth survey of one of the course topics. The topics covered include scalable analytics and ML systems; systems for scalable linear algebra, feature engineering, and model selection; statistical relational learning systems; deep learning systems; hardware-software co-design for ML; data sourcing for ML; and model serving systems.

Required Knowledge:  Courses on machine learning, operating systems, and database systems (at UCSD or elsewhere). Or prior research experience on one of the course topics, subject to the consent of the instructor.

Recommended Preparation for Those Without Required Knowledge: Learn the foundations of machine learning (algorithms and a bit of theory) from standard textbooks, e.g., "Elements of Statistical Learning" by Hastie, Tibshirani, and Friedman, or "Machine Learning" by Tom Mitchell
Learn the basics of operating systems and database systems from standard textbooks, e.g., "Operating Systems: Three Easy Pieces" by Remzi and Andrea Arpaci-Dusseau and "Database Management Systems" by Raghu Ramakrishnan and Johannes Gehrke.

Link to Past Course: http://cseweb.ucsd.edu/classes/wi18/cse291-a/
http://cseweb.ucsd.edu/classes/wi17/cse291-g/

CSE 291 (G00) - Deep Learning for Sequences with Prof. David Kriegman

Description:  Deep learning has had an enormous impact and has been especially effective for images (ConvNets) and sequences (RNN’s). This course focusses on deep learning for sequence processing and their application including video understanding, language translation, speech recognition, image captioning, OCR, and financial market prediction. After creating a foundation in common architectures (RNN, LSTM, GRU, Attention) and their training, we will dig into recently published papers that highlight methods and applications of deep learning for sequence processing. Each paper will be presented by a student, and all students are expected to particpate in a critical discussion of these papers. There will be one or two programming assignments and a full quarter project (individual or small group).

Required Knowledge: Students should have sufficient experience in deep learning to both present papers and engage in critical discussion; they should have experience with deep learning frameworks to implement a substantial full quarter project. There are many ways to have acquired this background including, but not limited to courses such as CSE 253, COGS 181, etc

Recommended Preparation for Those Without Required Knowledge:   N/A

Link to Past Course: N/A

CSE 291 (H00) - Successful Engineering Entrepreneurship with Prof. Rakesh Kumar

Description:  The major objectives of this course are to:

Encourage and Coach students to think like and become successful entrepreneurs; Describe major reasons why Microsystem start-ups typically are not successful, and; Educate them in the breadth of methodologies required for success in getting their innovative Microsystem ideas to the marketplace.

Experienced guest lectures will be invited to share their success stories and lessons learned. In addition to reading assignments, and class participation exercises students will be required to bring forward their own innovative ideas in teams of 3-5 students and will be required to develop a first pass business plan, and a "prototype" for their start-up company as a team project. The learnings from this course will also benefit students that choose to work as intrapreneurs within larger organizations.

Required Knowledge:   Master's students in good standing

Recommended Preparation for Those Without Required Knowledge:   N/A

Link to Past Course: N/A

CSE 291 (I00) - Introduction to Computer Science Education Research with Prof. Leo Porter

Description:  Computer science as a major has high societal demand.  In addition, computer programming is a skill increasingly important for all students, not just computer science majors.  However, computer science remains a challenging field for students to learn.  This course examines what we know about key questions in computer science education:  Why is learning to program so challenging?  What pedagogical choices are known to help students?  How do those interested in Computer Science Education Research (CSER) study and answer pressing research questions?

This course surveys the key findings and research directions of CSER and applications of those findings for secondary and post-secondary teaching contexts.  We study the development of the field, current modes of inquiry, the role of technology in computing, student representation, research-based pedagogical approaches, and important open research questions. CSER is a relatively new field and there is much to be done; an important part of the course engages students in the design phases of a CSER study and asks students to complete a significant project (e.g., a review of an area of CSER research, prototyping of a software system to aid student learning).

Required Knowledge:  None

Recommended Preparation for Those Without Required Knowledge:  None

Link to Past Course: N/A

CSE 291 (K00) - Human-Computer Interaction for Health (HCI4H) with Prof. Nadir Weibel

Description: Human-Computer Interaction for Health (HCI4H) explores the challenges of designing and introducing new interactive and sensing technology to study healthcare and address its core problems. In this class students will be exposed to the healthcare domain at large, including visits to hospital facilities, such as emergency rooms, trauma rooms, operating rooms, radiology clinics, outpatient medical offices, medical students teaching facilities like the Medical Education Building (MET), which includes the Simulation Training Center (STC), the Center for the Future of Patient Care (CFS), and the Center for the Future of Surgery (CFS), but also other measurement centers such as the Calit2 Exercise and Physical Activity Resource Center (EPARC), sleep clinics, and technology-centered health companies such as the West Health Institute.
The HCI4H class will approach the field by being exposed to the health-related regulations and the human protection courses offered by the CITI program. We will also brainstorm about the application of a variety of cutting-edge interactive technologies that are currently being used and can potentially be used in the near future to support healthcare, including Microsoft Kinect, Google glasses, Digital Pens, Mobile Health tracking devices (Fitbit/digital scales/Basis/Microsoft Band/Apple Watch), Microsoft HoloLens, and more. We will explore current research with and around this technology based on a variety of currently running projects in the Human-Centered and Ubiquitous Computing Lab (http://ubicomp.ucsd.edu)

Required Knowledge: The course is aimed to be interdisciplinary and bring together students from CSE, CogSci, DBMI, Medicine, Biology, Public Health and others. Given the diversity of potential students, course pre-requisites fro this class are hard to establish. The only real pre-reqs are to be well experienced in your domain, to have a deep interest in research around technology and healthcare, and to have some experience in healthcare, technology or both.

Recommended Preparation for Those Without Required Knowledge: CSE 118 (Weibel), CSE 218 (Weibel), CSE 170, technology in healthcare classes, Innovation in Healthcare (Med school class)

Link to Past Course: http://hci4h.ucsd.edu/

CSE 291 (L00) - Bioinformatics & HW Acceleration with Prof. Tajana Rosing

Description:  The course will cover Pavel Pevzner's textbook on Bioinformatics, but with specific focus on how algorithms described in the book can be accelerated in hardware.

Required Knowledge:  Undergraduate-level digital logic.

Recommended Preparation for Those Without Required Knowledge:  Read a relevant textbook.

Link to Past Course: N/A


Fall 2018 Graduate Course Information

This is historical data. This page serves the purpose to help graduate students understand each graduate course offered during Fall 2018. Please use this page as a guideline to help decide what courses to take.

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 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:  http://kastner.ucsd.edu/ryan/cse237c/

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 Coursehttp://cseweb.ucsd.edu/classes/fa14/cse250A-a/

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

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: http://cseweb.ucsd.edu/~schulman/class/cse291_w17/


Spring 2018 Graduate Course Information

This is historical data. This page serves the purpose to help graduate students understand each graduate course offered during Spring 2018. Please use this page as a guideline to help decide what courses to take.

CSE 201A - Advanced Complexity with Prof. Russell Impagliazzo

Description: This course surveys important recent research in computational complexity, which aims to identify the computational resources (e.g, time, memory, circuit size, parallel time, randomness)  needed to solve computational problems.  This course is of particular interest for students whose own work involves or touches on computational complexity, e.g., complexity theory, algorithm design, cryptography, machine learning, database theory or coding theory.  We will start with a discussion of the consequences of various outcomes of the P vs. NP question involving both worst-case and average-case complexity.  Part of this discussion will involve the complexity-theoretic foundations of cryptography.  We will look at randomized interactive protocols both from a cryptographic and complexity-theoretic perspective.  This will lead to the PCP theorem and hardness of approximation.  Other topics will include randomized algorithms, derandomization, Boolean circuit lower bounds, relativization , and natural proofs.  Time permitting, we might cover some of  quantum computation, fine-grained complexity, PPAD and hardness of finding Nash equilibria, or other topics suggested by students.

Required Knowledge: We assume some general exposure to computational complexity and its basic notation, and a reasonable level of mathematical sophistication.  CSE 200 or the equivalent should be adequate preparation.

Recommended Preparation for Those Without Required Knowledge: CSE 200

Link to Past Course: https://cseweb.ucsd.edu/classes/sp11/cse201A-a/

CSE 207 - Modern Cryptography with Prof. Mihir Bellare

Description: This course is an introduction to modern cryptography. Topics include block ciphers, hash functions, pseudorandom functions, symmetric encryption, message authentication, authenticated encryption, asymmetric encryption, digital signatures, certificates, key distribution and protocols. We will introduce the “provable security” approach, defining security for various primitives and then proving that schemes achieve the defined goals. We adopt a “theory brought to practice” viewpoint, focusing on cryptographic primitives that are used in practice and showing how theory leads to higher-assurance real world cryptography.

Required Knowledge: This is a theory course. The minimal background is undergraduate discrete mathematics, algorithms and theory, corresponding to UCSD courses CSE 21, 101 and 105. Graduate background in algorithms and complexity theory, corresponding to UCSD courses CSE 202 and CSE 200, is preferred. In more detail, the needed background includes algorithms, probability theory, randomized algorithms. Some basic complexity theory (eg. P, NP, NP-completeness, reducibility between problems) will help.  Most importantly, it needs general “mathematical maturity.” This means being comfortable and adept with mathematical language, abstractions, definitions and proofs. 

Recommended Preparation for Those Without Required Knowledge: CSE 101, 105, 202, 200.

Link to Past Course: http://cseweb.ucsd.edu/~mihir/cse207/index.html

CSE 216 - Interaction Design Research with Prof. Scott Klemmer

Description: This course is a broad graduate-level introduction to interaction design research. The course begins with seminal work on interactive systems, and moves through current and future research areas in interaction techniques and the design, prototyping, and evaluation of user interfaces. Topics include social computing, crowdsourcing, software tools, design and evaluation methods, ubiquitous and context-aware computing, tangible interfaces, and mobile interfaces. COGS 230 / CSE 216 is a 4-unit course, open to all doctoral students.

Required Knowledge: Students will need four skills: critically reading research papers, undertaking a small research project, giving a presentation, and writing a paper.

Recommended Preparation for Those Without Required Knowledge: Masters students should have taken an intro HCI course like COGS 120 / CSE 170 Human-computer Interaction Design. Undergrads may enroll in this course if they have two prerequisites: Cogs 14a or CSE 20, AND an A- or better in Cogs 120 or 102C.

Link to Past Course: https://d.ucsd.edu/IxD/research/2017/

CSE 218 - Advanced Topics in Software Engineering with Prof. Bill Griswold

Description: Programmers and software designers/architects are often concerned about the modularity of their systems, because effective modularity reaps a host of benefits for those working on the system, including ease of construction, ease of change, and ease of testing, to name just a few. Other possible benefits are reuse (e.g., in software product lines) and online adaptability.

This course will be an open exploration of modularity - methods, tools, and benefits. In the process we will confront many challenges, conundrums, and open questions regarding modularity.

In this class we will explore defensive design and the tools that can help a designer redesign a software system after it has already been implemented. Defensive design techniques that we will explore include information hiding, layering, and object-oriented design. In the area of tools, we will be looking at a variety of pattern matching, transformation, and visualization tools.

Each week there will be assigned readings for in-class discussion, followed by a lab session. Each week, you must engage the ideas in the Thursday discussion by doing a "micro-project" on a common code base used by the whole class: write a little code, sketch some diagrams or models, restructure some existing code or the like.

Required Knowledge: Programming experience through CSE 100 Advanced Data Structures; Graduate Status or completion of CSE 110 Software Engineering

Recommended Preparation for Those Without Required Knowledge: See above.

Link to Past Course: https://cseweb.ucsd.edu/~wgg/CSE218/index.html

CSE 221 - Operating Systems with Prof. YY Zhou

Description: Operating system structures, concurrent computation models, scheduling, synchronization mechanisms, address spaces, memory management protection and security, buffering, streams, data-copying reduction techniques, file systems, naming, caching, disk organization, mapped files, remote file systems, case studies of major operating systems.

Required Knowledge: Undergraduate OS course (CSE 120 or equivalent)

Recommended Preparation for Those Without Required Knowledge: CSE 120

Link to Past Course: http://cseweb.ucsd.edu/classes/fa16/cse221-a/

CSE 223B - Distributed Computing and Systems with Prof. Alex Snoeren

Description: CSE 223B is a 4-unit graduate subject with lectures, paper discussions, labs, a midterm, a final, and a term project. It will present abstractions and implementation techniques that facilitate the design of distributed systems--including both operating systems and sophisticated Internet servers--that can deal with the demands of real-world workloads. Topics will include efficient operating system primitives, high-performance network servers, load shedding, storage systems, security, and fault tolerance.

Required Knowledge: CSE 221 (or consent of instructor) and substantial programming experience for lab assignments and term project. Note that CSE 223A is not a prerequsite. However, those interested in the theoretical underpinnings of distributed computation are encouraged to take CSE223A as well. CSE223A and CSE223B may be taken in any order.

Recommended Preparation for Those Without Required Knowledge: CSE221 / CSE222A 

Link to Past Course: http://cseweb.ucsd.edu/classes/sp17/cse223B-a/

CSE 227 - Computer Security with Prof. Hovav Shacham

Description: CSE 227 is a graduate course in computer security.  Students will read and discuss recent papers in computer security and undertake a substantial research project.  Topics vary from year to year but include systems security, network security, web security, usable security, and privacy.  Cryptography is not covered in CSE 227; students are instead referred to CSE 207, CSE 208, and CSE 209B.

Required Knowledge: CSE 221, graduate operating systems, is an enforced prerequisite. 

Recommended Preparation for Those Without Required Knowledge: In addition to graduate 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: https://cseweb.ucsd.edu/classes/wi14/cse227-a/

CSE 232 - Principles of Database Systems with Prof. Yannis Papakonstantinou

Description: CSE232 teaches the basic principles of the internals of SQL databases. This includes data structures, query processing, query optimization and transaction processing in SQL relational database management systems. The last weeks also cover database technologies beyond the relational data model and centralized query processing: Query processing on semistructured data, query processing in virtual databases, incremental view maintenance, column databases, parallel databases.

See the slideset and reading list in http://db.ucsd.edu/static/CSE232F16/  for the list of covered topics.

Required Knowledge: The class assumes that the students are already competent in database application programming using SQL and transactions. A prerequisites exam in the first week will test the students' knowledge on prerequisites. The prerequisites exam counts for 10% of the overall grade and is graded on Pass / Fail. That is, you either get full points or zero points. In the latter case, it is strongly advised that you do not continue taking the class. 

Recommended Preparation for Those Without Required Knowledge: 

To refresh your knowledge on prerequisites (and to cover gaps), see the reading list in http://db.ucsd.edu/static/CSE232F16/  

If you have not had a course on designing an SQL database and programming using an SQL database, you are advised to take CSE132A and take CSE232 next year.

Link to Past Course: http://db.ucsd.edu/static/CSE232F16/

CSE 233 - Database Theory with Prof. Victor Vianu

Description: This course presents an overview of the theory of databases. Topics include the theory of query languages, dependency theory, deductive databases, incomplete information, complex objects, semistructured data, and other advanced topics and research issues as time allows. Connections are made to relevant areas in logic and complexity theory. Evaluation is based on homework sets and a take-home final.

Required Knowledge: Students should have had at least one basic database systems course including SQL. The course is theoretical, and mathematical maturity is highly desirable. Basic knowledge of computability and complexity theory is assumed.

Recommended Preparation for Those Without Required Knowledge: Review theoretical background from a standard textbook such as Sipser's "Introduction to the theory of computation."

Link to Past Course: N/A

CSE 240A - Principles of Computer Architecture with Prof. Leo Porter

Description: This course introduces students to the basics of modern processor operation.  The topics discussed in the course include: system performance, instruction set architecture, pipelining, branch prediction, out-of-order superscalars, memory-hierarchy design, simultaneous multithreading, and chip multiprocessors.

Required Knowledge: Basics of Instruction Set Architecture, cache design, and the design of single-cycle, multi-cycle, and pipeline processors.

Recommended Preparation for Those Without Required Knowledge: CSE 141

Link to Past Course: https://cseweb.ucsd.edu/classes/fa13/cse240A-a/

CSE 240B - Parallel Computer Architecture with Prof. Bryan Chin

Description: The days of improving computer performance via frequency and scalar micro-architectural improvements are long gone.  Moore's Law continues to improve the number of devices on a CPU, but the challenges with Dennard scaling have prevented the easy performance gains we enjoyed in the past.  Parallel computation has been and continues to be a powerful method at our disposal to take advantage of new silicon capabilities. This course is divided into two parts.  In the first part, we will study advanced computer architecture topics such as cache coherency for NUMA machines and memory consistency models.  In particular, we will look at the challenges for architecture as the number of processors scales to large numbers.  

In the second part of the course, we will explore recent advances and research in parallel computation and advanced computer architecture.  Past topics have included: GPUs, TPUs, transactional memory, wide SIMD and vectorization, SIMT, and on-chip interconnects.  Topics may change, depending on the interests of the class.

Required Knowledge: Background in computer architecture.  Some knowledge of C programming is helpful but not essential.

Recommended Preparation for Those Without Required Knowledge: See instructor.

Link to Past Course: https://sites.google.com/a/eng.ucsd.edu/cse240bspr2017/

CSE 248 - Algorithmic and Optimization Foundations for VLSI CAD with Prof. Andrew Kahng

Description: Combinatorial algorithms and global optimization foundations for solution of interconnection, clustering, partitioning, placement, estimation and other fundamental VLSI physical design problem classes.  Assignments include implementation / experimentation for homework and project.

Required Knowledge: CSE 202 (at least, CSE 101 required), CSE 241A / ECE 260B (strongly recommended), C/C++ programming background (strongly recommended).

Recommended Preparation for Those Without Required Knowledge: Contact professor to discuss.

Link to Past Course: N/A

CSE 252C - Selected Topics in Vision and Learning with Prof. Ben Ochoa

Description: This course is dedicated to recent research on computer vision, including learning-based methods.  Students enrolled in this course are required to present a paper in class and complete a project inspired by the paper.  All projects will follow specific guidelines, including preparation of a project proposal, draft project report, and final project report.  The project should be at the frontier of current research, but need not necessarily advance the state of the field. For example, replicating the results of an innovative paper would be a good project.  Projects must be closely inspired by one or two specific high-quality papers and should have an experimental aspect.

Required Knowledge: Linear algebra, calculus, probability and statistics, computer vision.

Recommended Preparation for Those Without Required Knowledge: Graduate-level computer vision courses and textbooks.

Link to Past Course: https://cseweb.ucsd.edu/classes/sp17/cse252C-a/

CSE 255 - Data Mining and Predictive Analytics with Prof. Yoav Freund

Description: In this course you will learn how to use Spark to perform large scale data analysis.  Subjects covered: The I/O bottleneck and the memory hierarchy. RDDs and Map-reduce. Spark dataframes and spark SQL. PCA, dimensionality estimation and low dimensionality mapping. Ensemble methods for classification. Deep Neural Networks and tensor flow.

Required Knowledge: Python, Jupyter notebooks. Probability and statistics. Machine Learning.

Recommended Preparation for Those Without Required Knowledge: edX Data-Science Micro-masters: 3 first courses: https://www.edx.org/micromasters/data-science

Link to Past Course: https://mas-dse.github.io/DSE230/class_plan/

CSE 283 - Data Wrangling in Bioinformatics with Prof. Vineet Bafna

Description: The development of omics (genomics, transciptomics, proteomics) technologies provides us with an unprecedented opportunity to understand cellular function, and higher levels of organization. In this class, we will focus on big data being generated in biology, and the techniques used to analyze the data. While the course should be self-contained, we assume some mathematical maturity.

Required Knowledge: Students are encouraged to take CSE 282 prior to this course.

Recommended Preparation for Those Without Required Knowledge: CSE 282

Link to Past Course: N/A

CSE 291 (A00) - Alternative Computing Paradigms with Prof. Tajana Rosing

Description: This course will cover various new computing paradigms targeted to accelerating big data workloads, ranging from approximate computing, to processing in memory, neuromorphic computing, hyperdimensional computing and other strategies.

Required Knowledge: Graduate-level computer architecture

Recommended Preparation for Those Without Required Knowledge: Textbook on advanced computer architecture

Link to Past Course: N/A

CSE 291 (B00) - Micro-Quadcopter from Scratch with Prof. Steve Swanson

Description: In this course you will build a small, remote-controlled multi-rotor aircraft (i.e., a quadcopter). You will design the circuitry and circuit boards, have the board manufactured, assemble, and fly your quadcopter. This is an intensive project class. You should expect to work hard.

Required Knowledge: Some experience with electronics or control algorithms.

Recommended Preparation for Those Without Required Knowledge: The class is not recommend if you don’t have some experience with electronics or control algorithms.

Link to Past Course: N/A

CSE 291 (C00) - 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, and mutual exclusion.

Link to Past Course: N/A

CSE 291 (D00) - 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 291 (G00) - Mathematics for Robotics

Link to Past Course: N/A

CSE 291 (E00 + F00) - Successful Engineering Entrepreneurship with Prof. Rakesh Kumar

Description: The major objectives of this course are to:

Encourage and Coach students to think like and become successful entrepreneurs, 

Describe major reasons why Microsystem start-ups typically are not successful, and

Educate them in the breadth of methodologies required for success in getting their innovative Microsystem ideas to the marketplace.

Experienced guest lectures will be invited to share their success stories and lessons learned. In addition to reading assignments, and class participation exercises students will be required to bring forward their own innovative ideas in teams of 3-5 students, and will be required to develop a first pass business plan, and a "prototype" for their start-up company as a team project. The learnings from this course will also benefit students that choose to work as intrapreneurs within larger organizations.

Required Knowledge: Master's students in good standing

Recommended Preparation for Those Without Required Knowledge: 

Link to Past Course: N/A

CSE 291 (G00) - Advanced Statistical NLP with Prof. Ndapa Nakashole

Description: This is a project and research-oriented course on statistical natural language processing (NLP). The course will contain a lecture component, and a second component with focus on understanding and extending state-of-the-art machine learning algorithms for a series of important topics in NLP. The course will start off with a few introductory lectures and two programming assignments. The course assumes background in basic machine learning.

Required Knowledge:  The course assumes knowledge of basic probability. Programming assignments will be in Python.

Recommended Preparation for Those Without Required Knowledge: Contact instructor for more information.

Link to Past Course: The course will contain aspects of two different courses:
http://cseweb.ucsd.edu/~nnakashole/teaching/291_sp17.html
http://cseweb.ucsd.edu/~nnakashole/teaching/190_wi18.html

CSE 291 (H00) - Management of Large-Scale Graph Data with Prof. Amarnath Gupta

Description: In many application areas, data is structured as a graph of objects and their relationships or interactions. Transportation networks, social networks, biomolecular interactions, product networks, knowledge graphs, internet-of-things are only a few of the domains that produce and analyze large graphs. Companies like Google, Linkedin, Facebook, Walmart, eBay and Amazon use graph-structured data as part of their operational and analytical processes. In many cases, these graphs are very large. In 2015, the Facebook graph had an estimated 1.39B nodes and 1 Trillion edges. Due to the increasing volume and connectedness of graphs, tasks like graph storage, answering queries and performing analytics become a significant bottleneck.

The CSE 291 course on the Management of Large-Scale Graph Data offers an in-depth view of modeling, storing, retrieving and analyzing graph-structured data from the standpoint of Data Management Systems. In this course, we will cover:

  • Dominant graph data models
  • Graph operations
    • Graph query languages
    • Index structures and algorithms
    • Query processing algorithms and optimization techniques for graphs
    • Distributed graph computation
    • Several real-life industry-strength systems
    • Some connections between Graph Data Management and Machine Learning

In covering these topics, we will deliberately take a “big data” perspective to address the problem of scalability for query and analytics workloads.

The class will involve reading research papers and a hands-on project.

Required Knowledge: CSE-232A or equivalent coursework on relational data management. I am expecting students to know SQL and the fundamental mechanisms of relational query processing and optimization, some graph theory, typically covered in a Discrete Math course, and basic graph algorithms covered in an Algorithms class.

Recommended Preparation for Those Without Required Knowledge: N/A

Link to Past Course: N/A


Winter 2018 Graduate Course Information

This is historical data. This page serves the purpose to help graduate students understand each graduate course offered during Winter 2018. Please use this page as a guideline to help decide what courses to take.

CSE 200 - Algorithm Design and Analysis with Prof. Shachar Lovett

Description:  Complexity theory

Required Knowledge: CSE 105 or equivalent course

Recommended Preparation for Those Without Required Knowledge: Michael Sipser, Introduction to the Theory of Computation, 3rd ed. Also see 105 website: http://cseweb.ucsd.edu/classes/fa17/cse105-a/

Link to Past Course: http://cseweb.ucsd.edu/classes/sp13/cse200-a/

CSE 202 - Algorithm Design and Analysis with Prof. Russell Impagliazzo

Description: This course is intended  primarily for non-theory computer science graduate students who will need to formalize computational problems, and design and implement or use existing efficient algorithms for these problems.  The emphasis is on methods that can be used  for a wide variety of cutting edge applications, as in genomics, data mining, or VLSI design.  This course presents general techniques and paradigms for designing and analyzing algorithms for a variety of  computational problems.  Techniques include reductions between problems, graph search, greedy algorithms, divide and conquer, back-tracking, dynamic programming, and hill-climbing.   For each technique, we will see a variety of applications of the technique, starting with relatively straight-forward applications and then going on to look at applications or settings that stretch the uses of the technique.  These examples will be presented in class, in independent reading in the text, and discovered by students in assignments.  A course project will be on formalizing computational problems and inventing algorithms for them.

Required Knowledge:  We assume some undergraduate exposure to discrete mathematics, and to algorithms and their analysis, and the ability to read, recognize and write a valid proof. For example, CSE 20, CSE 21, and CSE 101 cover the prerequisite material. We will cover many of the same topics from an undergraduate algorithms courses. However, after a quick review of the basics, we will move on to related advanced material for each topic. If your background in these areas is weak, you may need to do some extra work to catch up. Please talk to me about this.  Students without prerequisites will be admitted at their own risk.

Recommended Preparation for Those Without Required Knowledge: Please see above.

Link to Past Course: https://cseweb.ucsd.edu/classes/wi14/cse202-a/, https://sites.google.com/a/eng.ucsd.edu/cse101/cse202

CSE 222A - Computer Communication Networks with Prof. Alex Snoeren

Description: CSE 222a is a graduate course on computer networks. The continued exponential growth of the Internet has made the network an important part of our everyday lives. Companies use the network to conduct business, doctors to diagnose medical issues, etc. This course will provide a broad understanding of exactly how the network infrastructure supports distributed applications. Topics covered in the course include Internet routing, software-defined networking, data centers, content distribution networks, and peer-to-peer systems.

This is a research-oriented course focusing on current and classic papers from the research literature. Further, all students will work on an original research project, culminating in a project write-up and conference-style presentation. In the past, the very best of these course projects have resulted (with additional work) in publication in top conferences.

Required Knowledge: Prerequisites for the course include a general understanding of computer networks, distributed systems, and operating systems; CSE 120 or equivalent, or instructor consent.

Recommended Preparation for Those Without Required Knowledge: Students could take CSE 120 and CSE 123. If students do not have a strong background in operating systems, they should read Anderson and Dahlin, Operating Systems: Principles and Practice, 2nd Edition (2014). Students should read Computer Networks: A Systems Approach, fifth edition, by Larry Peterson and Bruce Davie.

Link to Past Course: http://cseweb.ucsd.edu/classes/wi15/cse222A-a/

CSE 231 - Advanced Compiler Design with Prof. Sorin Lerner

Description: 

Required Knowledge: 

Recommended Preparation for Those Without Required Knowledge: 

Link to Past Course: 

CSE 232B - Database System Implementation with Prof. Alin Deutsch

Description:

Required Knowledge:

Recommended Preparation for Those Without Required Knowledge:

Link to Past Course:

CSE 237A - Introduction to Embedded Computing with Prof. Tajana Rosing

Description: Increasing integration of communications, multimedia and processing and relentless digitization of data (including even RF data) continues to expand the scope and complexity of embedded systems. To appreciate these advances, and to productively contribute to future advances of these systems, a critical appreciation of the underlying technology underpinning is a must. The goal of this course is to develop a comprehensive understanding of the technologies behind the embedded systems, particularly, those using computing elements (processor, DSP, or ASPs). The students develop an appreciation of the technology capabilities and limitations of the hardware, software components for building embedded systems, and methods to evaluate design tradeoffs between different technology choices

Required Knowledge: linux, c programming, computer architecture, undergraduate OS

Recommended Preparation for Those Without Required Knowledge: review textbooks/materials for corresponding undergrad courses

Link to Past Course: https://cseweb.ucsd.edu/classes/wi15/cse237A-a/

CSE 237D - Embedded System Design with Prof. Ryan Kastner

Description: This is an embedded systems project course. You will work on teams on either your own project (with instructor approval) or ongoing projects. Examples from previous years include remote sensing, quadcopters, underwater vehicles, embedded vision, etc. Feel free to browse examples from previous years. The in-class discussions largely revolve around effectively presenting your research. We will discuss how to give good presentations, how to develop an online project web presence, and effectively write material towards a target audience. Each project will have multiple presentations over the quarter that will be critiqued by the instructors and students. The class ends with a final report and final video presentations.

Required Knowledge: None, but students must be self-motivated and willing to spend time outside of class to be successful.

Recommended Preparation for Those Without Required Knowledge:

Link to Past Course: http://kastner.ucsd.edu/ryan/cse-237d-embedded-system-design/

CSE 240C - Advanced Microarchitecture with Prof. Hadi Esmaeilzadeh

Description: This incarnation of the CSE 240C will focus on Accelerated Architecture Design for Machine Learning and Artificial Intelligence. 

A wide range of commercial and enterprise applications such as health monitoring, social networking, e-commerce, and financial analysis, rely on Machine Learning (ML) to accomplish their objectives. In fact, the advances in machine learning are changing the landscape of computing towards a more personalized and targeted experience for users. For instance, services that provide personalized health-care and targeted advertisements are either prevalent or on the horizon. Nevertheless, machine learning algorithms are computationally intensive workloads. Specifically, learning a model from data requires substantial amount of computation that is repeated over the training data for a relatively large number of iterations. While the demand for these computationally intensive techniques is increasing, the benefits from general-purpose solutions is diminishing. With the effective end of Dennard scaling, traditional CMOS scaling no longer provides performance and efficiency gains commensurate with increases in transistor density. The current paradigm of general-purpose processor design falls significantly short of the traditional cadence of performance improvements. These challenges have coincided with the explosion of data where the rate of data generation has reached an overwhelming level that is beyond the capabilities of current computing systems to match.  As a result, both the industry and the research community are focusing on programmable accelerators, which can provide large gains in efficiency and performance by restricting the workloads they support. In this course, we will first thoroughly examine these trends to understand the underlying research challenges and opportunities. Second, we will devise novel technologies to build the foundation of next generation computing systems for artificial sentience and consciousness.

The course will be a combination of lectures, student presentation, and separate brainstorming sessions in which we will collectively explore and develop new ideas on each topic. The students will do a project based on one of these ideas.

The course is open to both PhD and MS students. Undergraduate students require permission from the instructor. Both CSE and ECE students can register for the course.

There is no required textbook. All relevant materials will be made available online.

Required Knowledge: The students are expected to be comfortable with a) computer architecture, and b) programming in a language such as Python or C/C++.

Recommended Preparation for Those Without Required Knowledge: Through study of computer architecture and mastering programming.

Link to Past Course: This is the first time this course is offered.

CSE 241A - VLSI Integration of Computing Circuitry with Prof. Andrew Kahng

Description: (1) Learn about ASIC implementation flow:  Verilog-to-GDSII (how an IC is physically realized (implemented)).  This includes (a) semi-custom implementation of CMOS digital circuits, and optimization with respect to different constraints such as area, speed, power, reliability and cost; (b) understanding the impact of constraints, tradeoffs and technology scaling; and (c) getting some feel for each phase of the implementation flow.

(2) Learn about building blocks:  wires, gates, memories, including some futures (e.g., non-volatile memories, 3D integration).

(3) Prepare for future design experiences: become familiar with industry-standard design tools and libraries (job-readiness…) - mostly using Synopsys DesignCompiler, Cadence SOC Encounter, TSMC 90nm/65nm libraries, ANSYS/Apache PowerArtist and RedHawk - working with small open-source cores.

This course is largely populated by students with ECE/CE interests. Assignments are dominated by labs and mini-projects involving industry-relevant tools and design implementation issues.

Required Knowledge: ECE 260A or at least ECE 165

Recommended Preparation for Those Without Required Knowledge: Textbooks on IC physical design; ECE 111 material; reading the Weste-Harris (260A) text; possibly a MOOC such as https://www.coursera.org/course/vlsicad ; algorithms and scripting (Tcl) can help as well.

Link to Past Course: not available due to IP restrictions on course materials (foundry design enablement, tool documentation)

CSE 250B - Principles of Artificial Intelligence: Learning Algorithms with Prof. Sanjoy Dasgupta

Description: A rigorous, graduate-level course in machine learning. 

The course will cover three broad subjects:

I. Prediction problems (classification, regression, and conditional probability estimation). Methods covered will include nearest neighbor classification, generative models for classification, linear regression, logistic regression, support vector machines, kernel methods, boosting, and random forests. The emphasis will be on developing a sound understanding of these methods, based on probability, linear algebra, and optimization.

II. Representation learning: Methods covered will include k-means clustering, hierarchical clustering, principal component analysis, singular value decomposition, multidimensional scaling, and manifold learning.

III. Deep learning: Deep networks will be presented as a marriage of representation learning and predictive modeling.

Throughout the course, the focus will be on four desiderata: efficiency, confidence, convergence, and interpretability.

Required Knowledge: No prerequisites are enforced, but lack of the following will prove to be a significant impediment: Proficiency with Python, preferably using notebooks. Familiarity with multivariate calculus, basic probability, and linear algebra.

Recommended Preparation for Those Without Required Knowledge:

Link to Past Course:

CSE 252B - Computer Vision II with Ben Ochoa

Description: This course covers topics in imaging geometry using techniques from computer vision, photogrammetry, and projective geometry. These topics include methods for projecting a 3D scene to a 2D image, reconstructing a 3D scene from 2D images, and camera parameter estimation. Upon completion of this course, students will have an understanding of single and multiple view geometry, and the algorithms used in practice.

Required Knowledge: Linear algebra, calculus, probability and statistics. MATLAB or other programming experience.

Recommended Preparation for Those Without Required Knowledge: Undergraduate courses and textbooks.

Link to Past Course: http://cseweb.ucsd.edu/classes/wi16/cse252B-a/

CSE 253 - Neural Networks and Deep Learning with Prof. Gary Cottrell

Description: This course covers logistic and softmax regression, back propagation, deep learning, convolutional networks, recurrent nets, and some recent papers. The course is in a lecture format, but most of your learning will occur from doing programming assignments.  The programming assignments are time consuming. There are four of them plus a final project of your own choosing at the end (done in teams). A typical final project will replicate some recent work, perhaps on a different dataset.

Required Knowledge: Linear algebra, multivariate calculus, probability and statistics.

Recommended Preparation for Those Without Required Knowledge: If you are missing the math background, you should acquire it via online courses or by taking classes at UCSD. This math background is essential.

Link to Past Course: The course uses Piazza as its web page; everything will be there. The previous version of the course is inactive.

CSE 254 - Statistical Learning with Prof. Yoav Freund

Description: Queuing Theory in practice: optimizing the performance of computer systems.

Performance tuning of computer systems is a rapidly increasing challenge. While in the past the main focus was on peak performance, current system aim to balance cost, energy, heat dissipation and performance.  Doing so requires the use of tools from probability and statistics, specifically, of Queuing theory. This course will be based on the book "Performance Modeling and Design of Computer Systems / Queuing Theory in Practice" by Mor Harchol Balter.

Required Knowledge: The course requires a solid foundation in Probability and statistics. Specifically, students have to master Section II of the book "Necessary Probability Background" before starting the course. The first meeting of the class will be an entrance exam.

Recommended Preparation for Those Without Required Knowledge:

Link to Past Course: N/A

CSE 260 - Parallel Computation with Prof. Bryan Chin

Description: Exploration of programming for parallel computing systems such as shared memory systems, message passing systems and highly parallel accelerators (like GPUs). The course will cover the principles of parallel programming by exploring algorithm design and how those design choices are affected by the machine architecture.

Required Knowledge: This is a graduate level course. Students should have the ability to program in C or C++. Familiarity with computer architecture and operating systems is useful but not strictly required.

Recommended Preparation for Those Without Required Knowledge: Class in programming which requires the use of C or strong programming skills in similar languages. Review computer architecture - especially memory system design (e.g. cache hierarchy). Contact instructor for more help or advice.

Link to Past Course: https://cseweb.ucsd.edu/classes/fa17/cse260-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 280A - Algorithms in Computational Biology with Prof. Vineet Bafna

Description: The course discusses algorithmic concepts (coalescent theory, combinatorial optimization, flows, MCMC) and their application to the analysis of genetic data.

Did you ever wonder how our DNA is a genetic record of who we are, where we came from, and how our genetic information contributes to our future health. Wcse cover the algorithms used for analyzing genomic data. While the course includes basic biology, all relevant material is taught in class, and nothing is assumed. Students should have an interest in the subject. All interested students are welcome.

Required Knowledge: Algorithms (202). Interest in Biology.

Recommended Preparation for Those Without Required Knowledge: Basic algorithms textbook

Link to Past Course: http://proteomics.ucsd.edu/vbafna/teaching-2/cse280a-algorithms-for-genetics/

CSE 282 - Bioinformatics II: Sequence and Structure Analysis - Methods and Applications with Prof. Pavel Pevzner

Description:

Required Knowledge: An undergraduate class in algorithms or an equivalent and strong programming skills

Recommended Preparation for Those Without Required Knowledge: Coursera Bioinformatics Specialization from UCSD

Link to Past Course: Coursera Bioinformatics Specialization from UCSD

CSE 291 A00 - Advanced Data Analytics and Machine Learning Systems with Prof. Arun Kumar

Description: This is a research-oriented course on the emerging area of advanced data analytics, at the intersection of data management, machine learning, and systems. This area is a driving force behind several modern data-driven applications that use large-scale machine learning (ML), machine perception, and machine reading to analyze large and complex datasets, including enterprise business intelligence, healthcare, recommendation systems, social media analytics, Web search, Web security, and Internet of Things. Students will learn about the latest research in this area and get hands-on experience doing either a research project or an in-depth survey of one of the course topics. The topics covered include scalable analytics and ML systems; systems for scalable linear algebra, feature engineering, and model selection; statistical relational learning systems; deep learning systems; hardware-software co-design for ML; model serving systems; and data sourcing for ML.

Required Knowledge: Courses on machine learning, database systems, and operating systems (at UCSD or elsewhere). Or prior research experience on one of the course topics, subject to the consent of the instructor.

Recommended Preparation for Those Without Required Knowledge:  

Learn the foundations of machine learning (algorithms and a bit of theory) from standard textbooks, e.g., "Elements of Statistical Learning" by Hastie, Tibshirani, and Friedman, or "Machine Learning" by Tom Mitchell

Learn the basics of database systems and operating systems from standard textbooks, e.g., "Database Management Systems" by Raghu Ramakrishnan and Johannes Gehrke, and "Operating Systems: Three Easy Pieces" by Remzi and Andrea Arpaci-Dusseau.

Link to Past Course: http://cseweb.ucsd.edu/classes/wi17/cse291-g/

CSE 291 C00 - Human-Computer Interaction for Health (HCI4H) with Prof. Nadir Weibel

Description: Human-Computer Interaction for Health (HCI4H) explores the challenges of designing and introducing new interactive and sensing technology to study healthcare and address its core problems. In this class students will be exposed to the healthcare domain at large, including visits to hospital facilities, such as emergency rooms, trauma rooms, operating rooms, radiology clinics, outpatient medical offices, medical students teaching facilities like the Medical Education Building (MET), which includes the Simulation Training Center (STC), the Center for the Future of Patient Care (CFS), and the Center for the Future of Surgery (CFS), but also other measurement centers such as the Calit2 Exercise and Physical Activity Resource Center (EPARC), sleep clinics, and technology-centered health companies such as the West Health Institute.
The HCI4H class will approach the field by being exposed to the health-related regulations and the human protection courses offered by the CITI program. We will also brainstorm about the application of a variety of cutting-edge interactive technologies that are currently being used and can potentially be used in the near future to support healthcare, including Microsoft Kinect, Google glasses, Digital Pens, Mobile Health tracking devices (Fitbit/digital scales/Basis/Microsoft Band/Apple Watch), Microsoft HoloLens, and more. We will explore current research with and around this technology based on a variety of currently running projects in the Human-Centered and Ubiquitous Computing Lab (http://ubicomp.ucsd.edu)

Required Knowledge: The course is aimed to be interdisciplinary and bring together students from CSE, CogSci, DBMI, Medicine, Biology, Public Health and others. Given the diversity of potential students, course pre-requisites fro this class are hard to establish. The only real pre-reqs are to be well experienced in your domain, to have a deep interest in research around technology and healthcare, and to have some experience in healthcare, technology or both.

Recommended Preparation for Those Without Required Knowledge: CSE 118 (Weibel), CSE 218 (Weibel), CSE 170, technology in healthcare classes, Innovation in Healthcare (Med school class)

Link to Past Course: http://hci4h.ucsd.edu/

CSE 291 D00 - Recent Advances in Computer Vision with Prof. Manmohan Chandraker

Description: The advent of deep learning frameworks has led to significant gains in computer vision. In this course, we will study advances in several areas of computer vision, such as image classification, object detection, semantic segmentation, 3D reconstruction and activity recognition. We will study these by discussing a mix of canonical and recent publications. A focus area will also be to study weakly supervised, self-supervised and domain adaptation frameworks in computer vision.

Required Knowledge: Comfort with optimization, linear algebra, probability and statistics. Prior background in computer vision and machine learning, preferably through research experience or as covered by CSE 152, 252 and similar offerings. Contact the instructor if unsure about meeting criteria for enrollment. 

Recommended Preparation for Those Without Required Knowledge: Study the Stanford CS 231n course material.

Link to Past Course: http://cseweb.ucsd.edu/~mkchandraker/classes/CSE291/2017/

CSE 291 E00 - Language-Based Security with Prof. Deian Stefan

Description:  CSE 291 is a graduate course on language-based security. Most software we rely upon is plagued by security vulnerabilities — the common occurrence of large-scale private data theft alone serves to highlight the magnitude of the problem. Yet the rise of new application domains and platforms (e.g., crypto currencies and IoT) is making software ever more integral to daily life. It is prudent for us to build more secure software systems.

One promising approach to building secure systems is to leverage ideas from programming languages and program analysis. The recent industry trend of adopting new languages, type systems, and tools—as exemplified by Mozilla’s Rust and Facebook’s Flow — also makes this approach very timely.

This course explores the use of various programming languages and program analysis methods to (1) enforce security, and (2) to rigorously specify and reason about security. We will study secure runtime systems (e.g., operating systems, web servers, hardware architectures) and the underlying techniques used to make them secure (e.g., language-level information flow control, capabilities, static checkers, symbolic execution, linear type systems).

This is a research oriented class: students are expected to read papers in depth and work on a relatively large research project that can ideally lead to a conference publication.

Required Knowledge:  Operating systems, security, programming languages.

Recommended Preparation for Those Without Required Knowledge:  Read the papers and some of the notes from the previous course.

Link to Past Course: https://cseweb.ucsd.edu/~dstefan/cse291-fall16/

CSE 291 F00 - Human-Robot Interaction with Prof. Laurel Riek

Description: Robots are entering our world - in homes, hospitals, roadways, schools, and workplaces. How do we make them functional, useful, and acceptable? This course will explore the core computational, engineering, and experimental challenges and techniques in human-robot interaction (HRI). Course topics include: perception of people, shared autonomy and control, coordination and collaboration, and experimental robotics. We will review seminal and recent papers in the field, and engage in team-based projects with physical, mobile robots.

Required Knowledge:  This class requires expertise in programming and data structures. Students should be comfortable decomposing a complex problem, selecting suitable algorithms, and implementing them. Prior exposure to robotics, computer vision, or machine learning is helpful, but not required. Experience using unix-like operating systems is also a plus. Students should be comfortable reading and analyzing scientific papers at the graduate level. 

Recommended Preparation for Those Without Required Knowledge:

Link to Past Course:

CSE 291 G00 - 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: N/A

Link to Past Course: N/A

CSE 291 H00 - Impact of Formal Methods - Bio with Prof. Debashis Sahoo

Description: The course will introduce the concept of formal methods and how it has impacted the field of biology and medicine. Have you ever thought about understanding human diseases using computational techniques? This course will walk you through practical examples of biological systems and analysis techniques that extract useful information from massive amounts of data. The course will provide all background information needed for biology and medicine.

Required Knowledge: CSE100, CSE101, CSE105 or equivalent, Interest in learning formal methods and biology.

Recommended Preparation for Those Without Required Knowledge: Learn model checking and little bit of biology.

Link to Past Course: None

CSE 291 I00 - Maching Learning on 3D Data with Prof. Hao Su

Description: This course will explore the state of the art algorithms for both supervised and unsupervised machine learning on 3D data - analysis as well as synthesis. After a brief introduction to geometry foundations and representations, the focus of the course will be machine learning methods for 3D shape analysis and synthesis, such as classification, segmentation, symmetry detection, shape completion, reconstruction, etc. Techniques for analyzing not only individual 3D models but entire collections of such through computing alignments, and maps or correspondences, will be discussed. Deep neural architectures appropriate for data in the form of point clouds or graphs will also be studied, as well as architectures that can associate semantic information with object models, including functionality. Finally, generative models for 3D shape design will be covered, for example adaptations of generative adversarial networks (GANs).

Required Knowledge: Basic optimization and linear algebra, data structure, basic programming

Recommended Preparation for Those Without Required Knowledge:  Differential geometry, computer graphics, functional analysis, computer vision, graphical model

Link to Past Course: CSE 20, CSE 21, CSE 101

CSE 291 J00 - Modern Storage Systems with Prof. Steven Swanson

Description: We will discuss a range of modern storage technologies and systems: hard drives, SSDs, persistent memory, distributed storage, cloud storage, NoSOL, etc.

Required Knowledge:  CSE 221. Operating Systems and either 240a or 141 or equivalent.

Recommended Preparation for Those Without Required Knowledge:  CSE 221. Operating Systems and either 240a or 141 or equivalent.

Link to Past Course: N/A


Fall 2017 Graduate Course Information

This is historical data. This page serves the purpose to help graduate students understand each graduate course offered during Fall 2017. Please use this page as a guideline to help decide what courses to take.

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: https://sites.google.com/a/eng.ucsd.edu/cse101/cse202

CSE 203A - Advanced Algorithms with Prof. Daniel Kane

Description:  Modern advances in design and analysis of algorithms, focusing on randomized algorithms and streaming algorithms.

Required Knowledge: Understanding of basic algorithmic ideas. Basic background in probability theory.

Recommended Preparation for Those Without Required Knowledge: Take CSE 202

Link to Past Course: http://algorithms.eng.ucsd.edu/203a

CSE 206A - Lattice Algorithms & Applications with Prof. Daniele Micciancio

Description: Point lattices are powerful mathematical objects that can be used to efficiently solve many important problems in computer science, most notably in the areas of cryptography and combinatorial optimization. This course gives a general introduction to the theory of point lattices, their algorithms, computational complexity, mathematical techniques, and applications to cryptography.

Required Knowledge: This is a theoretical class, so general mathematical maturity is assumed. In terms of specific knowledge, the course assumes: a solid (undergraduate level) math background including basic linear algebra, abstract algebra, probability theory, and some calculus; interest to learn (during the course) about more advanced math topics, like harmonic analysis and algebraic number theory; introductory graduate level algorithms and complexity, including asymptotic analysis, NP-hardness, and some minimal familiarity with computer programming. Recommended (but not strictly necessary): some introductory level knowledge of cryptography, most importantly the definitional approach to security of modern cryptography.

Recommended Preparation for Those Without Required Knowledge: This is a research oriented graduate class. Students without the required knowledge should first take the appropriate introductory level math and cs classes. If you are not sure about prereq. and still want to take the class (e.g. because not offered every year) talk to instructor and consider taking as S/U.

Link to Past Course: http://cseweb.ucsd.edu/classes/wi16/cse206A-a/

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., web cams, mobile phone based sensors, digital pens, Microsoft SenseCam, Microsoft Kinect, Google glasses, etc.), eye-tracking systems, and wireless mobile computing devices (e.g., mobile smart phones, 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 into 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. Alex Snoeren 

Description:  Operating system structures, concurrent computation models, scheduling, synchronization mechanisms, address spaces, memory management protection and security, buffering, streams, data-copying reduction techniques, file systems, naming, caching, disk organization, mapped files, remote file systems, case studies of major operating systems

Required Knowledge:  Undergraduate OS course (CSE 120 or equivalent)

Recommended Preparation for Those Without Required Knowledge: CSE 120

Link to Past Course:  http://cseweb.ucsd.edu/classes/fa16/cse221-a/

CSE 227 - Computer Security with Prof. Stefan Savage

Description:

Required Knowledge:

Recommended Preparation for Those Without Required Knowledge:

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:  No past links are available for this offering. However, the course will cover similar content to 130. Here is a recent link to 130: http://cseweb.ucsd.edu/classes/fa16/cse130-a/

CSE 232 - Principles of Database Systems with Prof. Yannis Papakonstantinou

Description: CSE232 teaches the basic principles of the internals of SQL databases. This includes data structures, query processing, query optimization and transaction processing in SQL relational database management systems. The last weeks also cover database technologies beyond the relational data model and centralized query processing: Query processing on semistructured data, query processing in virtual databases, incremental view maintenance, column databases, parallel databases.

See the slideset and reading list in http://db.ucsd.edu/static/CSE232F16/ for the list of covered topics.

Required Knowledge: The class assumes that the students are already competent in database application programming using SQL and transactions. A prerequisites exam in the first week will test the students' knowledge on prerequisites. The prerequisites exam counts for 10% of the overall grade and is graded on Pass / Fail. That is, you either get full points or zero points. In the latter case, it is strongly advised that you do not continue taking the class. 

Recommended Preparation for Those Without Required Knowledge: 

To refresh your knowledge on prerequisites (and to cover gaps), see the reading list in http://db.ucsd.edu/static/CSE232F16/ 

If you have not had a course on designing an SQL database and programming using an SQL database, you are advised to take CSE132A and take CSE232 next year.

Link to Past Course: http://db.ucsd.edu/static/CSE232F16/

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. The student will learn how to use modern high-level synthesis tools to create different DSP architectures.

Required Knowledge:  This class is the third in the 237 “Embedded Systems” series, which are generally meant to be taken in order, but that is not a strict requirement. 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:  http://kastner.ucsd.edu/ryan/cse237c/

CSE 240A - Principles of Computer Architecture with Prof. Dean Tullsen

Description:

Required Knowledge:

Recommended Preparation for Those Without Required Knowledge:

Link to Past Course: 

CSE 244A - VLSI Test with Prof. Alex Orailoglu

Description: 

Required Knowledge: 

Recommended Preparation for Those Without Required Knowledge: 

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 Coursehttp://cseweb.ucsd.edu/classes/fa14/cse250A-a/

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 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/wi17/cse258-a/

CSE 260 - Parallel Computation with Prof. Bryan Chin

Description:   Exploration of programming for parallel computing systems such as shared memory systems, message passing systems, shared-nothing systems and highly parallel accelerators (like GPUs).  The course will cover the principles of parallel programming by exploring algorithm design and h0w those design choices are affected by the machine architecture.

Required Knowledge:   This is a graduate level course.  Students should have the ability to program in C or C++. Familiarity with computer architecture and operating systems is useful but not strictly required.

Recommended Preparation for Those Without Required Knowledge: Class in programming which requires the use of C or strong programming skills in similar languages.
Review computer architecture - especially memory system design (e.g. cache hierarchy). Contact instructor for more help or advice.

Link to Past Course:   Class was previously taught by Scott Baden in 2015: https://cseweb.ucsd.edu/classes/fa15/cse260-a/. This class may deviate somewhat from that class.

CSE 291 A00 - Convex Optimization with Prof. CK Cheng

Description:  We study the formulations and algorithms solving convex optimization problems. The topics include convex sets, functions, optimality conditions, duality concepts, gradient descent, conjugate gradient, interior-point methods, and applications. The objective of the course is to provide students the background and techniques for scientific computing and system optimization.

Required Knowledge: Linear algebra

Recommended Preparation for Those Without Required Knowledge: Linear algebra

Link to Past Course:  http://cseweb.ucsd.edu/classes/wi17/cse291-h/

CSE 291 B00 - Current Trends in Recommender Systems and Human Behavioral Modeling with Prof. Julian McAuley

Description:  This course will cover topics related to machine learning applied to modeling human behavior and activities, including Recommender Systems, Social Network Analysis, and Personalization (etc.). The course will primarily consist of in-class discussions of academic papers, as well as an applied machine learning project.

Required Knowledge:  CSE258 is suggested (or can be taken concurrently). Students should have knowledge of basic machine learning principles (such as regression, classification, etc.)

Recommended Preparation for Those Without Required Knowledge:  Students who have not taken CSE258 should familiarize themselves with the first few weeks' worth of material: http://cseweb.ucsd.edu/classes/wi17/cse258-a/

Link to Past Course: N/A

CSE 291 D00 - 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.

Recommended Preparation for Those Without Required Knowledge:   N/A

Link to Past Course: https://github.com/nadia-polikarpova/cse291-program-synthesis/wiki 

CSE 291 E00 - Automated Reasoning in AI with Prof. Sicun Gao

Description:  Automated reasoning is an area of AI that studies algorithmic approaches to logical reasoning, and problem solving in general. It is arguably the oldest branch and also the next frontier of AI, thanks to tremendous progress in recent decades. The course will first cover the basics of propositional and first-order logic, and then focus on core reasoning algorithms and their connections to standard topics in AI, including search, learning, planning, and optimization. Students will be guided to build a modern SAT solver from scratch.

Required Knowledge: Familiarity with C++

Recommended Preparation for Those Without Required Knowledge: N/A

Link to Past Course:  http://scungao.github.io/ucsd-fall17/index.html