This page describes and provides access to print, video, and online content for four courses, which I have developed and taught at Princeton and Brown throughout my career and have been adopted in various forms at institutions throughout the world.

The courses are based on a 21st century model for disseminating knowledge, which is described on the IDEAS page and in an invited talk on this site. The best way to understand the model is as a natural extension that embraces technology of the familiar and highly successful “textbook” model that is still widely used for many core subjects throughout academia in the US since the 20th century. A short guide to this material follows.

laptops and devices with futuristic overlay

A Guide for Teachers and Learners

If you are teaching or learning introductory computer science, algorithms, discrete mathematics, or combinatorics, you may find the material here to be useful. These pages provide access to an enormous amount of content (I only teach a fraction of it myself), so I offer the following suggestions for taking advantage of it.

Watch a video. In my experience, many people make judgements about the utility of online videos without ever experiencing one. The VIDEOS tabs on these pages provide access to sixty lectures, along with a sample excerpt for each courses. To see what many people are experiencing nowadays, watch one of the samples (if you speed it up to double or even triple speed, it will take just a few minutes) .

Scan the slides. An excellent way to get an idea of a course’s content is to scan through the lecture slides. The SLIDES tabs on these pages provide a convenient way to do so.

Sign up for a MOOC or a certificate course. The “Quick Links” page here provides links to online courses that will take you through the material, using various types of assessments and feedback. Along with the textbooks, they provide with you with the opportunity gain knowledge and skills in proportion to the time and effort you put into them. These courses have attracted millions of enrolls.

Browse the booksites. The “Booksites” tabs on these pages provide access to a wealth of information that support the lectures and the textbook. If you spend some time browsing, you can see the depth and breadth of the information available.

Look at the textbook. We view each textbook as the “ground truth” for each course. We don’t cover everything in the book in a course, but everything in a course is placed into full context in the book.

Try an assignment. Weekly programming assignments are the backbone of our introductory courses. Among many other things, they serve the purpose of building confidence in our students and showing them that accomplishing amazing things with a computer is much less difficult than they might have thought. We provide a great deal of information to help them succeed. The assignments are carefully specified, and checklists can help keep you on track.

Study our exam questions. They are not perfect, but our exams in recent years are alpha- and beta-tested and graded with rubrics developed prior to the exams. We provide many exams with solutions on our Princeton websites. They are an expression of what we expect students to know after studying this material, and you are welcome to use them. There are also numerous short-answer questions in our course materials for you to study.

Further notes for teachers

“How do I make use of these materials (especially the lecture videos) while still justifying my existence as a faculty member?” That is the question that I get asked most often about these materials. The answer is that your job is to decide what you want your students to learn, to help them be successful in the effort, and to certify that they have done so. These materials may help you worry less about creating content and worry more about delivering it to your students.

Curate. Perhaps your most important function as an instructor is to decide what you want your students to learn. You can use our choices as a guide, but you also may wish to skip some of them, rearrange them, or add some of your own content. By clearly articulating which pages in the textbook you want them to read and which lectures you want them to watch, you can provide students with exactly the information they need to succeed in the course.

Concentrate on assessments. What do you want your students to know? How will you decide whether or not they know it? These are key questions for any teacher. Without question, students focus on them too. Quizzes, exams, and assignments are motivating factors for every student, and the more time you spend on putting them together, the better. As with our other content, you don’t have to create them from scratch—you can work with some of ours.

Break from the past. Before the pandemic, most people taught in pretty much the same way for years or even decades, often constricted by institutional requirements about meeting times and frequencies. Returning to precisely how things were before the pandemic would be a missed opportunity. You really do have better things to do than preparing a handout, lecture, assignment, or exam on a standard topic that is covered in a textbook or videos. It is not a given that the most effective path to learning is regular meetings in large or small groups. Synchronization of some kind is important, but we have many better options nowadays than the extreme synchronization suggested by regular live lectures.

My experience has been that using carefully prepared content such as a textbook and a set of curated lectures and taking advantage of modern technology can all allow teachers to efficiently and effectively provide a consistent learning experience for large numbers of students. I hope that these materials will help you do the same.

Quick Links to Sedgewick Courses

Computer Science. An introductory course for any college student. Covers programming in Java (using an “objects in the middle approach), algorithms and data structures, theory of computing, and computer architecture.

Algorithms. Surveys the most important computer algorithms in use today. Based on complete implementations using a modern programming style using data abstraction. Emphasizes a scientific approach to evaluating performance.

Analysis of Algorithms. An overview of techniques used in the mathematical analysis of algorithms. Covers recurrence relations, generating functions, asymptotic analysis, and analytic combinatorics, with applications to algorithms and data structures.

Analytic Combinatorics. A new field of mathematics that enables precise quantitative predictions of the properties of large combinatorial structures. Essential for the analysis of algorithms and for the study of scientific models in many other disciplines.