Courses and Preparation by Course for 2016-2018

Updated May 11, 2018

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


Fall 2016 Graduate Course Information

This is historical data. This page serves the purpose to help graduate students understand each graduate course offered during Fall 2016. 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/fa13/cse200-a/

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

Description:

Required Knowledge:

Recommended Preparation for Those Without Required Knowledge:

Link to Past Course:

CSE 207- Cryptography & Network Security with Prof. Mihir Bellare

Description: This course is an introduction to modern cryptography. We consider both symmetric and asymmetric cryptography. Topics include blockciphers, hash functions, pseudorandom functions,
symmetric encryption, message authentication codes, RSA, asymmetric encryption, digital signatures and key distribution. 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. This is not a computer security course. We will not be covering topics like operating systems security, viruses, and worms. We warn that the content is theoretical and mathematical maturity is essential to doing well.

Required Knowledge: Algorithms (CSE 201, 101), computational complexity (CSE 200, 105), probability theory, algebra, discrete mathematics.

Recommended Preparation for Those Without Required Knowledge: CSE 101, 105, 21; http://cseweb.ucsd.edu/~dasgupta/book/index.html or http://math.mit.edu/~sipser/book.html

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

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/wi16/cse221-b/

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

Description:

Required Knowledge:

Recommended Preparation for Those Without Required Knowledge:

Link to Past Course:

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

Description: The course teaches how database systems work. Its primary topics are

  1. Query processing in row-oriented, relational database systems. The discussion includes hardware considerations, indexing, query optimization (algebraic and cost based), cost estimation, techniques for pruning the plan space.
  2. Transaction processing. The discussion includes recovery and concurrency control.

There is also brief discussion of:

  1. Incremental View Maintenance
  2. Column-oriented database systems and query processing

The slideset and reading list at the class web page is very representative of the content.

Required Knowledge: The course assumes that the students already know how to build applications using a relational database. Therefore the students already are very competent with SQL and know the typical structure of normalized databases.

Recommended Preparation for Those Without Required Knowledge: If you do not know SQL and how to build applications using a relational database, take CSE132A.

Link to Past Course: www.db.ucsd.edu/CSE232W15

CSE 237B- Software for Embedded Systems with Prof. Rajesh Gupta

Description: Embedded Software

Required Knowledge: No official courses. However, decent programming experience, and knowledge of embedded hardware interfaces are required.

Recommended Preparation for Those Without Required Knowledge: If you have an EE or CS undergraduate background, you would be able to pick up necessary knowledge. Lack of programming or system building experience will not be possible to overcome.

Link to Past Course:It is on TritonEd. I usually follow Burns and Wellings book on Real Time Systems and Software but will be changing the text this year. One of the topics being introduced this year is modeling and verification of Cyber-Physical Systems (Book by Rajeev Alur).

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- Princ/ Computer Architecture 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 Course: http://cseweb.ucsd.edu/classes/fa14/cse250A-a/

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

Description:

Required Knowledge:

Recommended Preparation for Those Without Required Knowledge:

Link to Past Course:

CSE 252A- Computer Vision I with Prof. Ben Ochoa

Description: This is an introductory course in Computer Vision, and it is followed by CSE 252B and CSE 252C. CSE 252A provides a broader introduction to vision, where CSE 252B and CSE 252C are more specialized, diving more deeply into topics. CSE252A covers image formation, 2D image analysis, 3D reconstruction, and recognition.

Required Knowledge: Students should comfortable with multivariable calculus, linear algebra, basic probability, and be comfortable 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/fa14/cse252A-b/

CSE 291 A00- Operating Systems: Design and Implementation with Gregory Kesden

Description: This is a graduate-level course intended for students who want to gain an advanced understanding of distributed systems. The course focuses on the principles and techniques behind the design, implementation, and management of distributed systems, including topics in and relating to networking, RMI/RPC, concensus, coordinator election, concurrency control, consistency, quorums, replication, processor allocation and process migration, naming, failure, distributed shared memory, distributed file systems, ACID, BASE, CAP, Anonymous Routing, Distributed Hashing, Map-Reduce, NoSQL, Hadoop, HDFS, Spark, MPI, OpenMP, and Virtualization.

Required Knowledge:

Recommended Preparation for Those Without Required Knowledge:

Link to Past Course:

CSE 291 E00- Securing Systems Using Programming Languages and Analysis with Prof. Deian Stefan

Description:

Required Knowledge:

Recommended Preparation for Those Without Required Knowledge:

Link to Past Course:

CSE 291 F00- Introduction to Robotics Software with Dr. Chris Barngrover

Description:

Required Knowledge:

Recommended Preparation for Those Without Required Knowledge:

Link to Past Course:


Winter 2016 Graduate Course Information

This is historical data. This page serves the purpose to help graduate students understand each graduate course offered during Winter 2016. Please use this page as a guideline to help decide what courses to take.  We will be adding Spring 2016 Course information at a later date.

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/fa13/cse200-a/

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

Description:

Required Knowledge:

Recommended Preparation for Those Without Required Knowledge:

Link to Past Course:

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

Description:

Required Knowledge:

Recommended Preparation for Those Without Required Knowledge:

Link to Past Course:

CSE 221- Operating Systems with Prof. Geoff Voelker

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

Required Knowledge: Undergraduate operating systems

Recommended Preparation for Those Without Required Knowledge: CSE 120

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

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

Description: CSE223B presents 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 include efficient operating system primitives, high-performance network servers, load shedding, storage systems, security, and fault tolerance.

This course will be a fair amount of work and is not for the faint of heart. It is expected that students signing up for this course are interested in understanding how to design and build research-grade distributed systems. Ideally, students completing the course will be well-prepared to begin research in distributed systems and Internet services. This course will not teach you how to program---you need to know that coming in. This course will teach you how to design and implement real distributed systems.

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: Take CSE120, CSE123, CSE221 and/or CSE222 before enrolling. This course will be offered again next year.

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

CSE 227- Computer Security with Kirill Levchenko

Description: This course focuses on computer and network security, exploring a range of topics design 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. We will explore a range of topics on both the defensive and offensive side of the field, as illustrated by papers and via lecture. This class will have two primary means of evaluation: classroom participation and a research project of your own choosing (in groups of two typically). 

Required Knowledge: Graduate operating systems and networking

Recommended Preparation for Those Without Required Knowledge: Take CSE 221 and CSE 222

Link to Past Course: https://cseweb.ucsd.edu/classes/wi13/cse227-a/

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

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 241A- VLSI Integration of Computing Circutry (cross-listed with ECE 260B) 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:

Required Knowledge:

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/wi15/cse252B-a/

CSE 253- Neural Networks and Pattern Recognition with Prof. Gary Cottrell

Description:

Required Knowledge:

Recommended Preparation for Those Without Required Knowledge:

Link to Past Course:

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 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. We 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:

Recommended Preparation for Those Without Required Knowledge:

Link to Past Course:

CSE 291 (A00)- HCI4H: Human-Computer Interaction for Health with Nadir Weibel

Description:Human-Computer Interaction for Health (HCI4H) explores the challenges of introducing new interactive and sensing technology to study healthcare and address its core problems. The advent of new interactive technology including tablets, smartphones, tracking devices, depth cameras, wearable devices, and so on, has raised new opportunities for studying and applying this technology to the healthcare domain. However, healthcare is an extremely challenging environment to research and develop technology for. Numerous regulations for the protection of patients and their data have an impact on how technology can be used in healthcare. These rules include the Health Insurance Portability and Accountability Act (HIPAA), federal administrations such as the Food and Drug Administration (FDA), and institutional bodies such as the human subject protection programs and the Institutional Review Board (IRB).To enroll in this class, you need instructor approval. Please fill this form: http://weibel.ucsd.edu/clearance/hci4h

Required Knowledge: Graduating Senior, and deep interest in research around technology and healthcare, and to have some experience in healthcare, technology or both. Submit your application for faculty approval: http://weibel.ucsd.edu/clearance/hci4h

Recommended Preparation for Those Without Required Knowledge: N/A

Link to Past Coursehttp://thiscourse.com/ucsd/hci4h/wi15/

CSE 291 (B00)- Robotics Project with Chris Barngrover and Greg Hoover

Description: A team-based robotics project course challenging students to complete targeted goals. At each challenge, students must apply their hardware and software skills, and ingenuity to create robotic systems perform- ing specific tasks.

Required Knowledge: Credit in either preceding course or full understanding of ROS and/or embedded systems, drivers, etc for robotics.

Recommended Preparation for Those Without Required Knowledge: Take one of the two robotics courses offered in the fall.

Link to Past Course: N/A


Spring 2016 Graduate Course Information

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

CSE 202- Algorithim Design and Analysis with Prof. Kamalika Chaudhuri

Description: The goal of this class is to introduce you to some topics in the design and analysis of algorithms. In the first part of the class, we will review some basic algorithm design paradigms, and show how one can use these paradigms to design efficient exact and approximation algorithms. In the second part, we will cover some more advanced topics, such as flows, randomized algorithms and streaming algorithms.

Required Knowledge: A prerequisite for this course is CSE 101 or its equivalent. You should have undergraduate exposure to discrete mathematics and algorithms and their analysis. At the beginning of the class, I expect you to be very familiar with the material in Chapters 1-3 of the text book (which will not be covered in the class), and somewhat familiar with Chapters 4-5 (which will be covered very rapidly.) We will very briefly review topics from your undergraduate algorithms courses, and then look at some more advanced topics. The textbook is "Algorithm Design" by Kleinberg and Tardos.

Recommended Preparation for Those Without Required Knowledge: If you have had absolutely no exposure to algorithms, I would recommend taking the undergrad class. If you have had some exposure but not a lot, please read the first few chapters of the textbook before coming to class.

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

CSE 221- Operating Systems with Prof. Yuan-Yuan Zhou

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 233- Database Theory with Prof. Victor Vianu

Description: This course will present an overview of the theory of databases. Topics include the theory of query languages, dependency theory, deductive databases, incomplete information, and other advanced topics and research issues as time allows. Connections will be made to relevant areas in logic and complexity theory.

Required Knowledge: A good degree of mathematical maturity (including the ability to write proofs) is essential, as well as general database background (e.g. CSE 232).

Recommended Preparation for Those Without Required Knowledge: Prepare by taking the appropriate courses prior this this class.

Link to Past Course: n/a

CSE 237B- Software for Embedded Systems with Prof. Rajesh Gupta

Description: Embedded Software

Required Knowledge: No official courses. However, decent programming experience, and knowledge of embedded hardware interfaces are required.

Recommended Preparation for Those Without Required Knowledge: If you have an EE or CS undergraduate background, you would be able to pick up necessary knowledge. Lack of programming or system building experience will not be possible to overcome.

Link to Past Course:It is on TritonEd. I usually follow Burns and Wellings book on Real Time Systems and Software but will be changing the text this year. One of the topics being introduced this year is modeling and verification of Cyber-Physical Systems (Book by Rajeev Alur).

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

Description: This is purely a project class. You will be put into teams of 2-3 people and develop an embedded systems. I will provide a number of options including mentors (typically graduate students or staff). The class involves presentations, reports and demos of your project. You will learn about how to present research, manage projects, ethics, etc.

Required Knowledge: Self-motivation; A desire to work hard weekly on a project.

Recommended Preparation for Those Without Required Knowledge: Contact Prof. Kastner for more info about the projects. many of them are ongoing, and you could start before the quarter.

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

CSE 240A- Princ/ Computer Architecture with Prof. Leonard Porter

Description:

Required Knowledge:

Recommended Preparation for Those Without Required Knowledge:

Link to Past Course:

CSE 240B- Parallel Computer Architecture with Prof. Michael Taylor

Description:

Required Knowledge:

Recommended Preparation for Those Without Required Knowledge:

Link to Past Course:

CSE 244A- VLSI Test with Prof. Alex Orailoglu

Description: Introduction to testing, test economics, fault modeling, simulation, testability measures, combinational circut test generation, sequential circut test generation, digital DFT and scan design, built in self-test, test compression, logic diagnosis, system test and core-based design.

Required Knowledge: Background in Digital Logic and Hardware Design

Recommended Preparation for Those Without Required Knowledge: CSE140(L), CSE 141(L)

Link to Past Course:

CSE 248- Algirtihmic & Optimaztion Foundations VLSI CAD with Prof. Andrew Kahng

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

CSE 250C- Machine Learning Theory with Raef Bassily

Description: Theoretical foundations of machine learning. Topics include concentration of measure, the PAC model, generalization, uniform convergence bounds and VC dimension, model selection and validation. Other possible topics include boosting, online learning, adaptive learning, algorithmic stability, learning under privacy constraints (learning with differential privacy).

Required Knowledge:Basic probability and statistics. Knowledge in convex optimization is a plus but not required. In general, the course will be self-contained when advanced mathematical tools are needed.

Recommended Preparation for Those Without Required Knowledge: CSE 103 and CSE 101 or similar courses are recommended. A recommended textbook for preparing: "Understanding Machine Learning: From Theory to Algorithms" by Shai Shalev-Shwartz, Shai Ben-David. (However, the textbook is not strictly required, and it may not contain all the material to be covered in class.)

Link to Past Course: n/a

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

Description: Big Data analytics using Scala

Required Knowledge: Some exposure to Scala, Statistics: PCA and Kmeans.

Recommended Preparation for Those Without Required Knowledge: IPython Notebooks.

Link to Past Course: http://seed.ucsd.edu/mediawiki/index.php/BigDataAnalytics2015

CSE 272- Advanced Image Synthesis with Prof. Henrik Jensen

Description:

Required Knowledge:

Recommended Preparation for Those Without Required Knowledge:

Link to Past Course:

CSE 274- Selected Topics in Graphics with Prof. Henrik Jensen

Description:

Required Knowledge:

Recommended Preparation for Those Without Required Knowledge:

Link to Past Course:

CSE 283- Genomics/Protemics/Netowrk Biology with Prof. Vineet Bafna & Trey Ideker

Description:

Required Knowledge:

Recommended Preparation for Those Without Required Knowledge:

Link to Past Course:

CSE 291 A00- Topics in Computer Science and Engineering with Prof. Shachar Lovett

Description: Advanced techniques in algorithm design

Required Knowledge: Basic algorithms, data structures, probability, graph theory, linear algebra

Recommended Preparation for Those Without Required Knowledge: UG courses: algorithms, data structures, probability, graph theory, linear algebra. I will teach how linear algebra and randomness can be extremely useful in algorithm design. I will cover basic principles, and demonstrate application in multiple domains: optimization algorithms, graph algorithms, routing, efficient data structures, algebraic computations, coding theory and more.

Link to Past Course: Graduate version of http://cseweb.ucsd.edu/~slovett/teaching/SP15-CSE190/

CSE 291 B00- Topics in Computer Science and Engineering: Distance, Similarities, and Embeddings with Prof. Sanjoy Dasgupta

Description:What order can be put on the universe of possible distance and similarity measures? We explore this through embeddability results. One primary focus is: what distances and similarities can be monotonically transformed so as to be embeddable in Hilbert space?

Required Knowledge: Meant for advanced PhD students with strong interest in theory

Recommended Preparation for Those Without Required Knowledge:A useful textbook is "Embeddings and extensions in analysis" by J.H. Wells, available on-line through the UCSD library.

Link to Past Course: n/a

CSE 291 C00- Topics in Computer Science and Engineering: Information- Centric Networking with Prof. George Polyzos

Description: Information-Centric Networking (ICN) has emerged as a new, promising, paradigm for the Future Internet. Inspired by the fact that the Internet is increasingly used for the dissemination of information, rather than for pair-wise communication between end hosts, ICN aims to reflect current and future needs better than the existing Internet architecture. By naming information at the network layer, ICN favors the deployment of in-network caching (or storage more generally) and multicast mechanisms, thus facilitating the efficient and timely delivery of content to the users. However, ICN is more than a new networking paradigm for content distribution, with related research initiatives employing information-awareness as the means for addressing a series of limitations in the current Internet architecture and fulfilling the already identified requirements and objectives for the Future Internet.

Various research projects in the US and around the world have developed ICN architectures, protocols, and systems, including experimental testbeds and open or easily accessible software systems. Key among them are: CCN at PARC (including now hardware development), NDN (a NSF funded research project, UCLA led and with UCSD involvement), PSI (an architecture developed through European research projects in which the instructor is and was involved), CCN-lite and the FIT (publically accessible) IoT testbed in Europe.
 
This course will discuss the motivation for ICN and will describe various ICN architectures and protocols and their evolution, as well as their potential impact on applications and whole new application areas such as the Internet of Things. It will also discuss many networking problems in their generality by describing and justifying the ICN approaches.
 
The course will require students to do a project (preferably in small groups), typically with programming or other hands-on involvement (e.g., running a simulator), potentially in a public testbed or other prototype (ICN) environment (e.g., among the ones mentioned above).
 
Tentative topics to be covered include: Naming, Metadata, architectures (CCN/NDN, PSI, etc.), Name-based Routing, ICN traffic models, ICN enabled applications, Security & Privacy, Trust management, ICN for IoT, ICN in the Data Center, ICN mobility support, socio-economics and business models etc.
 
The website for the course is available and will be providing updated and more detailed information: http://cseweb.ucsd.edu/~polyzos/CSE291S16/.

Required Knowledge: At least 1 undergraduate course on Computer Networks (e.g., UCSD’s CSE123) is required as background knowledge. Also, programming and OS experience will be useful for completing the typical project for the course. **Successful completion of at least 1 undergraduate course on Computer Networks (e.g., UCSD’s CSE123) is required. Instructor’s permission if such a course has not been completed or the equivalence is not obvious.**

Recommended Preparation for Those Without Required Knowledge: Going through UCSD’s CSE123 textbook or any other typical textbook on Computer Networks (e.g., Computer Networking: A Top-Down Approach, 6th ed., J.F. Kurose & K.W. Ross, or Computer Networks, 5th ed. A.S. Tanenbaum & D.J. Wetherall) or following a MOOC on networking will provide adequate preparation.

Link to Past Course: W’13 CSE 291 (Top/CSE) Information-Centric Networking: http://cseweb.ucsd.edu/~polyzos/CSE291.13W/). However, the course will be substantially updated given all the developments in the area since

CSE 291 D00- Topics in Computer Science and Engineering: Latent Variable Models with Prof. Jimmy Foulds

Description:Probabilistic machine learning models are powerful, flexible tools for data analysis. This course focuses on models with latent variables, which simplify complex data sets by discovering hidden patterns in the data. By the end of the course you will be able to apply a variety of probabilistic models for text data, social networks, computational biology, and more. You will learn how to formulate probabilistic models to solve the data science tasks you care about, derive inference algorithms for these models using Bayesian inference techniques, and evaluate their performance. Topics will include topic models, stochastic blockmodels and latent space models for social networks, Bayesian inference, Markov chain Monte Carlo, mean field variational inference, and nonparametric Bayesian models. Topics may include conditional random fields, Markov logic networks, determinantal point processes, and expectation propagation. This course continues from CSE250A.

Required Knowledge:The basics of probabilistic graphical models, as covered in CSE250A. The prerequisite knowlege for CSE250A also applies to this course: elementary probability, multivariable calculus, linear algebra, and basic programming ability in a high-level language such as C, Java, or Matlab. **Requires CSE 250A, or consent of the instructor.**

Recommended Preparation for Those Without Required Knowledge:Machine Learning: A Probabilistic Perspective (Murphy, 2012) Chapter 10, or Pattern Recognition and Machine Learning (Bishop, 2006) Chapter 8.

Link to Past Course: n/a

CSE 291 E00- Topic in Computer Science and Engineering with Gregory Kesden

Description: This is a graduate-level course intended for students who want to gain an advanced understanding of distributed systems. The course focuses on the principles and techniques behind the design, implementation, and management of distributed systems, including topics in and relating to networking, RMI/RPC, concensus, coordinator election, concurrency control, consistency, quorums, replication, processor allocation and process migration, naming, failure, distributed shared memory, distributed file systems, ACID, BASE, CAP, Anonymous Routing, Distributed Hashing, Map-Reduce, NoSQL, Hadoop, HDFS, Spark, MPI, OpenMP, and Virtualization.

Required Knowledge:

Recommended Preparation for Those Without Required Knowledge:

Link to Past Course:

CSE 291 F00- Topic in Computer Science and Engineering with Dr. Janarbek Matai and Dr. Ali Irturk

Description: This graduate level class provides an overview of techniques for implementing image processing and computer vision algorithms on an Field Programmable Gate Arrays (FPGAs) using High Level Synthesis tools provided by Xilinx. We cover both lower and higher level image (vision) algorithms such as filters, face detection and face recognition. Students will design, implement, and debug FPGA systems using C programming. For this class, we use tools from XIlinx to program FPGAs from higher-level languages.

Required Knowledge:Student must be comparable in writing programs in C. No prior knowledge of FPGA (hardware design) is required. We cover required background to program and debug an FPGA in our class.

Recommended Preparation for Those Without Required Knowledge: n/a

Link to Past Course: This class will be taught by two experts in embedded image (vision) processing. Please see class web page for more info (http://cseweb.ucsd.edu/~jmatai/teaching.php)

CSE 291 G00- Managing Large-Scale Graph Data with Dr. Amarnath Gupta

Description: Graph or network data is becoming increasingly important for many applications like social and communication networks. This course covers graph data models, storage structures, index structures, query languages, query evaluation and optimization techniques and graph analytics algorithms. Special emphasis will placed on techniques and systems that are designed for large-scale graphs.

Required Knowledge: The students are expected to have already taken CSE 132A or CSE 232 or equivalent.

Recommended Preparation for Those Without Required Knowledge: The student who have not taken any database classes in their undergrad level usually find the course hard. A good textbook for database systems is " Database Systems: The Complete Book", by Hector Garcia-Molina, Jeff Ullman, and Jennifer Widom. A MOOC can be found at http://cs.stanford.edu/people/widom/DB-mooc.html

Link to Past Course: n/a

CSE 291 H00- Analytics: Techniques and Databases with Prof. Yannis Papakonstantinou

Description: Techniques for high performance analytics processing; data warehouses, data cubes; analytics-oriented databases (column-oriented databases and parallel databases); NoSQL databases; project-oriented

Required Knowledge: CSE132, CSE232

Recommended Preparation for Those Without Required Knowledge: Go over the hardware, indexing and query processing part of the 232 lecture notes and the respective parts of the 232 textbook.

Link to Past Course: n/a