Home Page

Associate Professor
Computer Science Department
Carnegie Mellon University

Office: GHC 9101
Executive assistant: Jessica Packer, jpacker@cs.cmu.edu, 412-268-2565, GHC 9006


Diderot Project

I am the architect of the Diderot project and lead its development.  Diderot offers an online platform for improving the quality and accessibility of education. Diderot revolves around highly interactive, online books and quizzes, running and auto-grading code, and discussions. The key technologies behind Diderot include the following.
  • Tools for transforming traditional plain-text materials (currently in LaTeX and Markdown) to interactive, online books and quizzes.
  • A networked environment that connects users, learners and teachers, in one online platform.
  • Fine-grain, concept-level, representation of knowledge that enables algorithms to aid in discovery and learning.
  • An online exam and quiz system with an integrated Q & A and discussions.
  • A cloud-based code autograder that can put effectively any amount of compute power at the fingertips of the user.
  • Cloud-based implementation that seamlessly scales and trivially deploys at any institution without requiring any onsite IT services.
Diderot is rapidly evolving and is now being used by 1500 students at Carnegie Mellon on a day to day basis. The courses using Diderot range from small advanced courses to large introductory courses with hundreds of students.
A rough guide to Diderot is available.


  • July 2020: Fundamentals of Programming (15122) switches to Diderot for their Summer 2020 semester.
  • January 2020: Happy to welcome CMU Qatar campus courses and 15751 to Diderot community.
    • 10715: Advanced Introduction to Machine Learning
    • 15122: Principles of Imperative Computation
    • 15122Q: Parallel and Sequential Algorithms (Qatar Campus)
    • 15210: Parallel and Sequential Algorithms
    • 15210Q: Parallel and Sequential Algorithms (Qatar Campus)
    • 15251: Great Theoretical Ideas in Computer Science
    • 15688: Practical Data Science (Online Edition)
    • 15751: TCS Toolkit
    • 15780: Graduate AI
  • August 2019: Happy to welcome many new courses to Diderot community. 
    • 10715: Advanced Introduction to Machine Learning
    • 15122: Principles of Imperative Computation
    • 15210: Parallel and Sequential Algorithms
    • 15251: Great Theoretical Ideas in Computer Science
    • 15388/688: Practical Data Science
    • 15455: Undergraduate Complexity Theory
    • 15819: Foundations of Quantitative Program Analysis
    • 21228: Discrete Mathematics
  • July 2019: Imperative Computation(15122) switches to Diderot for their Summer 2019 edition. 
  • March 2019: Diderot has been recognized by the Carnegie Mellon Teaching Innovation Award.
  • January 2019: Algorithms (15210), Great Ideas (15251), and Grad AI (15780) start using Diderot for their Spring 2019 edition.   


Diderot is currently not publicly available.  The GitHub repository for Diderot is available for feedback and other resources. 

A brief history of Diderot

Diderot's development has intertwined with the development of an undergraduate course (15210) that I have developed with Guy Blelloch.  When I started teaching the course in Fall 2012, I started writing lecture notes and building a code auto-grader for the course.  To streamline the development of the notes I wrote them in a style that structured the text as a sequence of colorful "blocks".    For example, plain paragraphs would be in grey blocks, theorems would be in blue blocks, examples would be in yellow blocks,  etc. This structure allowed generating different versions of the notes, for example, one for the instructor and for the student automatically from the same sources.  My initial goal was to improve the readability and accessibility of the material, while also making it easier to prepare for lectures.  Over time, I realized that this style can serve as a foundation for an "interactive book" that allows the readers to discuss specific blocks of text. This would be like a social network that revolves around books, rather than,  for example, cooked asparagus pictures. By that time, publishers were interested in making a book out of the notes, and I asked them if they could make an interactive book as I had imagined. The publishers didn't know how to do that...  

So as a hobby, I started learning about web development and developing a concept version of an interactive book.    In Fall 2016, I developed a basic concept running on my laptop.  But, I didn't know how to scale it to several hundred students in my class.  During the thanksgiving holiday in 2016, I stayed home to take care of our new two-month old puppy Gustav, while my wife visited family on the west coast.  During that holiday, I learned about cloud computing and after ten days of hacking interspersed with Gustav playtime, the concept was running on the cloud.  This was a light-bulb moment for me.  With the cloud, an interactive book can serve thousands and even millions of people economically and anywhere on earth, connecting people and knowledge in entirely new ways.  Furthermore, the vast compute resources  could open up entirely new ways of instruction and learning, e.g., books could contain runnable code, grading could be done on the cloud, and algorithms may be employed to improve learning.  The possibilities were exciting so I continued learning and hacking slowly in my free time.  The project picked up steam when Anil Ada  joined in 2018 and Rohan Yadav joined in 2019.   Diderot now has several components (the compiler, the interactive books, and a cloud-based autograder and code-runner) and is evolving rapidly.  

I am grateful to our students and fellow faculty members for trying Diderot and to the SCS community for their support.  

Funding and Acknowledgments 

Diderot is generously supported by Amazon Web Services. In the past, it was supported by Google Cloud.

    15897: Parallelism and Concurrency (Fall 2019)

    Class times: Mon-Wed 10:30-11:50
    Place: Gates 4303
    Diderot: Please see Diderot for the course schedule and course materials.

    This course covers topics in parallelism and concurrency.  Specific topics include the following.
    • Models of parallelism.
    • Parallel algorithms for sequences
    • Parallel algorithms for trees
    • Parallel algorithms for graphs
    • Algorithms for thread scheduling, e.g., greedy scheduling, online scheduling, and work stealing

    The lectures will aim at bridging Church's and Turing's different formulations of computation and attempt at developing a "unified theory" of the fundamental concepts in computing, parallelism, and concurrency.  The students will also do a project.  The project could be individual or team work and on a topic that will be agreed upon by the instructor or the student(s).