This is a model course in the ACM-IEEE curriculum.

Computer Science:
An Interdisciplinary Approach

by Robert Sedgewick and Kevin Wayne

THE BASIS for course content is our comprehensive textbook, which introduces and surveys the field.

The first half of the book teaches programming in Java using an “objects in the middle” approach with an emphasis on applications.

The rest of the book advances the notion that “computer science” is much more than “learning to program” by covering algorithms and data structures, theory of computing, and computer architecture, with emphasis on core ideas of Turing, von Neumann, Shannon, and others that ignited the digital age.

Introduction to Programming in Java: An Interdisciplinary Approach is a paperback comprised of first four chapters of Computer Science.

Lectures in this course are based on over 1000 carefully prepared presentation slides, which you can browse below. Clicking on a lecture title allows you to scroll through the slides for that lecture. These slides give full information about the content of the course.

All the lectures for this course are available as online videos. These are carefully prepared, integrated with course content, and produced in a studio. As with traditional in-person lectures, their purpose is to introduce topics to learners and to inspire further study.

To get an idea of what a modern online lecture video is like, try this one, the lecture on recursion from this course. Important note: The best way to experience a lecture video is to speed it up when not interested (or bored) and slow it down when interested (or confused). You can quickly scan this video in twenty minutes or so.

All of the videos are available for viewing on the CUbits platform. This platform is recommended because it applies modern machine-learning models to build searchable transcripts, indices, and other features that enhance the experience of learning from the videos.

Our Computer Science booksite is freely available on the web. It contains tens of thousands of files, is fully coordinated with our lectures and textbook and also is useful as a standalone resource. It consists of the following elements:

Excerpts. A condensed version of the text narrative.
Java code. Hundreds of easily downloadable Java programs and our I/O libraries for processing text, graphics, and sound.
Data. Real-world data sets for testing code (ours and yours).
Exercises. Selected exercises from the book and “web exercises” developed since its publication, along with some solutions.
Programming assignments. Interesting applications problems for teaching programming by challenging students to address tasks that may take a week or more to complete.

This is a living resource that is constantly being improved and updated.

You can find details on how we conduct our course at Princeton on our Princeton COS 126 course website. This course is suitable for all students and one of the highest-enrolled classes in the university’s history. The following elements may be useful for both teachers and learners outside of Princeton.

Syllabus. A detailed “contract” between faculty and students, including a full description of how we synchronize a huge class that meets as a group only occasionally, and collaboration and plagiarism policies that have been negotiated for decades.
Precepts/labs. Exercises that reinforce the lecture and textbook content, with solutions.
Exams with solutions. A treasure trove of past exam questions that instructors can use to create their own exams and students can use for self-assessment.
Programming assignments. Fully detailed specifications of the programming challenges that our students face each week.

This content has evolved through the efforts of many of our faculty since 1992 to the benefit of many thousands of Princeton students and many other teachers and learners around the world.