Fall 2019 Course Bulletin

What's New in Fall 2019

Important Major Requirement Changes

We now have a more flexible “Systems” requirement in our BS and BA requirements. Instead of the requirement to take COMPSCI 310 (Introduction to Operating Systems), you may choose one from a list of designated systems courses (including COMPSCI 310 itself). Check the updated BS / BA requirements for details.

New! COMPSCI 590.04 Consensus Protocols for Distributed Computing and Blockchains

Consensus and state machine replication are central to multiple distributed systems. At its core, they allow a set of servers, even if some of them are faulty, to provide the same abstraction as that of a single server executing commands. The servers need to maintain two essential properties: (i) safety: (non-faulty) servers execute the same ordered set of commands, (ii) liveness: a command sent by a client is eventually executed by the (non-faulty) servers. Companies such as Google and Amazon deploy such protocols to ensure up-time despite crash faults. In a slightly different vein, in cryptocurrencies such as Bitcoin, participants agree on an ordered set of monetary transactions despite some arbitrarily malicious participants.

Course Description:
In this course, we will learn consensus protocols under different settings. The course will be roughly partitioned into two halves: traditional consensus protocols, and the protocols inspired by Bitcoin. We will focus on the different settings under which these protocols will be run: (i) Timing models: synchrony, asynchrony, partial synchrony, (ii) Fault models: crash faults, omission faults, Byzantine faults, (ii) adversarial adaptivity: static, adaptive. We will learn certain impossibility results as well as well-known protocols in this space (such as Paxos, PBFT, Dolev-Strong). We will then discuss Bitcoin (and Nakamoto consensus), which allows consensus even when participants may not know each other. We will cover variants of the Nakamoto protocol, proof-of-stake, attacks on Bitcoin, as well as works on anonymity and privacy.

COMPSCI 310 (Introduction to Operating Systems) will be offered in Fall 2019.

But reflecting the major requirement change above, there is currently no plan to offer 310 in Spring 2020. If you are a senior interested in 310, please plan accordingly. Going forward, COMPSCI 310 will still be offered every year, though not necessarily every semester.

New! CompSci IDMs and Concentrations

We have added new IDM’s, and Concentrations and have updated our website. You can see the new pages for

New! COMPSCI 290.1/590 Graph-Matrix Computations & Data Analysis

Synopsis pending.

New! COMPSCI 290.2 Algorithms in the Real World

This is a new course on the design and implementation of modern algorithms that deal with hard problems and big data. The course is project-driven, with several mini-projects as well as a larger student-driven and more open-ended course project, all of which will involve implementing unique algorithmic insights. Emphasis will be placed on algorithmic ideas that have had substantial impact in the real world. Possible topics include non-convex optimization for machine learning, online algorithms for ad auctions, streaming algorithms for sampling, cryptography and cryptocurrency, spectral algorithms for graph exploration, and AI algorithms for playing games like Go or Poker. There are no exams, and all mini-projects and the course project will have applied and hands-on components.

You should have already completed COMPSCI 201 and COMPSCI 230 (or equivalent). There will be minimal overlap with COMPSCI 330 in content and structure, so you can take the course before or after COMPSCI 330.

COMPSCI 102 Interdisciplinary Computing WILL BE OFFERED IN SPRING 2020. (update 6/3/19)

COMPSCI 102 is a version of COMPSCI 101 that explores the concepts from 101 in the context of natural science, social science, engineering and the humanities. There is a required lab associated with COMPSCI 102.

Course Description:
Introduction to the practices and principles of computer science and programming and their impact on and potential to change the world motivated by problems drawn from natural science, social science, engineering, and humanities. Programming using Python, appropriate libraries, and APIs to process, analyze and visualize data. Design, implementation, and analysis emphasizing abstraction, encapsulation, and problem decomposition.

Not open to students who have taken COMPSCI 101. No previous programming experience required.

Upper-level Electives offered for Fall 2019:

  • 260 Computational Genomics (Hartemink)
  • 290.1 Graph-Matrix Comp & Data Analysis (Sun)
  • 290.2 Algorithms in the Real World (Fain)
  • 308 Advanced Software Design and Implementation (Duvall)
  • 310 Intro to Operating Systems (Chase)
  • 316 Intro to Database Systems (J. Yang)
  • 350 Digital Systems (Board)
  • 356 Computer Network Architecture (Gorlatova)
  • 371 Elements of Machine Learning (Tomasi)
  • 408 Delivering Software (Duvall)
  • 590.1 Graph-Matrix Computation & Data Analysis (X. Sun)
  • 590.2 High Res Cryo-Em Image Analysis (Bartesaghi)
  • 590.3 Linear and Integer Programming (Conitzer)
  • 590.4 Distributed Computing & Blockchains (Nayak)