teaching

CS 551: Streaming and Event-based Systems

Modern data-driven applications increasingly require continuous, low-latency processing of large-scale, rapid data events such as clicks, search queries, online interactions, financial transactions, traffic records, and sensor measurements. Distributed stream processing has become highly relevant to industry and academia due to its capabilities to both improve established data processing tasks and to facilitate novel applications with real-time requirements. In this course, you will learn how to design, implement, and evaluate scalable and reliable stream processing and event-driven applications.

CS 351: Distributed Systems

CS 351 covers fundamental concepts of distributed systems and distributed computing (logical clocks, causal order, snapshots, consensus, atomic commit), communication and synchronization primitives, concurrency control, task and data parallelism, data consistency, replication, and fault tolerance. Topics include Computation and communication primitives (Threads, Remote Procedure Call), Concurrency Control (Mutexes, Optimistic vs Pessimistic control), Task Parallelism, Data Parallelism, Pipeline Parallelism, Time in Distributed Systems (Causal Order, Lamport Clocks, Vector Clocks), Distributed Snapshots (Chandy-Lamport protocol), Replication (Primary-Backup Replication, Chain Replication, Replicated State Machines), Distributed Consensus (Raft), Data Consistency (Strong vs Weak consistency, Linearizability, Sequential Consistency, Causal Consistency, Eventual consistency), Distributed Transactions (ACID, Serializability, Two-Phase Commit), Sharding and Consistent Hashing.

  • Prerequisites: CAS CS 210.
  • Syllabi:

CS 210: Computer Systems

This course takes a programmer’s perspective to learn about the inner structure of computer systems, the design and implementation of abstractions that enable humans to use computers efficiently, the basics of Programming C, the mapping between C and assembly and between assembly and machine language, and the role of operating system software. Our goal is to learn what a “beautiful” computer system is and how it works. CS 210 is a principal course for computer science majors. It provides background for courses in the systems area such as operating systems, compilers, networks, not to mention more advanced courses in computer architecture.

  • Prerequisites: Prerequisites: CAS CS 111, CS 112. CS 131 or MA 293 is important for the material on Boolean logic and data representation.

  • Syllabi: