Big Data and Deep Learning Systems, Fall 2017 (Grad)
This course teaches recent work on data processing and machine learning systems. Topics include resource management, dataflow processing, data processing programming, stream processing, graph processing, machine learning, deep learning, distributed store, etc. The students read research papers and submit paper reviews, do a few programming assignments to deepen the knowledge on data processing, and work on semester-long projects on the topics they propose.

Software Development Principles and Practices, Fall 2017 (Undergrad)
This course teaches the principles of software development for medium to large software design and implementation. Students will apply the principles to software systems in practice by working on group projects. This semester students build web services they propose using typescript/angular2 and python/django with web server and database backends.

Lab Seminar, Spring 2017 (Grad)
We have discussed research methodologies with recent research papers.

Operating Systems, Spring 2017 (Undergrad)
This course has two main parts: learning the principles of operating systems and building features in operating system kernels to have deeper understanding of operating systems. The topics include kernels and processes, concurrency, memory management, and persistent storage. If time permits, the course will also cover more advanced topics such as virtualization. The projects include system calls, synchronization, CPU scheduling, file systems, etc.

Lab Seminar, Spring 2016 (Grad)
We have studied classical papers on operating systems, distributed systems, and databases.

Operating Systems, Spring 2016 (Undergrad)
This course has two main parts: learning the principles of operating systems and building features in operating system kernels to have deeper understanding of operating systems. The topics include kernels and processes, concurrency, memory management, and persistent storage. If time permits, the course will also cover more advanced topics such as virtualization. The projects include system calls, synchronization, CPU scheduling, file systems, etc.

Lab Seminar, Fall 2015 (Grad)
We have studied recent open-source big data work.

Computer Security, Fall 2015 (Undergrad)
This course teaches the basic concepts of computer security. The topic covered are control hijacking attacks and defenses, fuzzing, symbolic execution, static and dynamic program analysis, secure system design, access control, sandboxing and isolation, operating system security, cryptography, network security, mobile security, and web security. Students solidify the understanding of the concepts by doing projects such as analyzing code with symbolic execution, implementing a sandbox by interposing system calls, demystifying HTTPS, and analyzing mobile apps with dynamic taint analysis.

Software Development Principles and Practices, Spring 2015 (Undergrad)
This course teaches the principles of software development for medium to large software design and implementation. Students will apply the principles to software systems in practice by working on group projects. Through this experience, students will learn how to build correct and high-performance software.

Big Data and Cloud Systems, Fall 2014 (Grad) 
This is a research-focused class on big data and cloud systems. The course involves both a reading/lecture/discussion component and a project component. We will read recent research papers on big data and cloud systems. We will read papers from SOSP, OSDI, NSDI, EuroSys, USENIX ATC, SOCC, VLDB, SIGMOD, ICDE, etc. Students are expected to read papers before the class and submit a one page summary for each paper, and participate in the discussion during the class. A major portion of this course is a term project. The goal is to investigate new ideas and solutions. The students are expected to form small groups of 2-3 people to work on a few selected areas of big data and cloud systems. The project requires a proposal, a project update (presented in class), and a final report (both written and presented).

Web Enterprise Computing, Fall 2014 (Undergrad) 
This is an “experimental” hands-on course on large-scale software systems, with emphasis on web serving and analytics running in the cloud. How can companies like Amazon, Google, and Microsoft build software that serves a lot of customers much better than other companies? Building large software systems that actually work is notoriously hard. This course covers techniques for dealing with the complexity of software systems. We will focus on the technology of software engineering for the individual and small team. Topics will include, among others, abstraction, specifications, principles of design and software architecture, testing, debugging, static analysis, and version control. The students are expected to apply the theory to systems in practice by working on group project(s) in the areas of web serving and analytics.

Advanced Operating Systems, Spring 2014 (Grad) 
This is a hands-on class on operating systems. We learn operating systems by actually building interesting features in existing Linux-based platforms, both Tizen and Android. The topics include System Calls, Process Management, Tizen and Android Architecture, Kernel Synchronization, Interrupts and Interrupt Handlers, Bottom Halves and Deferring Work, Sensor Frameworks, Process Scheduling, Resource Scheduling, Memory Management, Process Address Space, File Systems, Virtual File Systems, Block I/O, SSD, Virtualization, and New OS Architecture. This is a project-oriented class. Be prepared to do serious coding in a group of 3 students.

Systems Programming, Fall 2013 (Undergrad)