Caution! The website you're looking at is from a previous semester, Spring 2019. For the current semester's website, please visit this page.


Description. This course is an introduction to computer science in the context of scientific, engineering, and commercial applications. The goal of the course is to teach basic principles and practical issues, while at the same time preparing students to use computers effectively for applications in computer science, physics, biology, chemistry, engineering, and other disciplines. Topics include: programming in Java; hardware and software systems; algorithms and data structures; fundamental principles of computation; and scientific computing, including simulation, optimization, and data analysis.

Prerequisites. None.

Video lectures. Available here.

Class meetings. Class meetings are held twice per week, on Tuesdays & Thursdays.

Precepts. Precepts meet twice per week, on either Tuesdays & Thursdays or Wednesdays & Fridays.

Required reading. R. Sedgewick and K. Wayne, Computer Science: An Interdisciplinary Approach, Addison–Wesley Professional, 2016. ISBN 978-0134076423. We will be referencing this text all semester. The lectures are based on its contents. (Labyrinth)


Below you will find our contact information, but please keep in mind that it is almost always more appropriate to post your question on Piazza rather than emailing an individual staff member.

Need to switch into a full precept? Please contact Colleen Kenny.

Dan Leyzberg

Alan Kaplan
Lead Preceptor

Donna Gabai

Jenny Louthan
Graduate Student

Rachel Protacio
Graduate Student

Anastasiya Kravchuk-Kirilyuk
Graduate Student

Priscilla Lee
Graduate Student

Suriya Kodeswaran
Graduate Student

Jennifer Lam
Graduate Student

Zhongqiao Gao
Graduate Student

Xin Sun
Graduate Student

Mihir Kulkarni
Graduate Student

Xi Chen
Graduate Student

Sonali Mahendran
Graduate Student

Alberto Mizrahi
Graduate Student

Theano Stavrinos
Graduate Student

Graders.The following undergraduates are graders this semester: Akiva Goldberger, Al Liang, Alik Zalmover, Amina Elgamal, Anlin Zhang, Begum Ortaoglu, Ben Ryu, Benjamin Coles, Charles Smith, Cheyenne Zhang, Christine Cho, Christy Lee, Claire Chiu, Clare Cook, Eileen Wang, Elise Colter, Elizabeth John, Gabriel Grajeda, Geoffrey Zheng, Grace Stempel, Grace Wei, Hannah Huh, Jacqueline He, Jacqueline Xu, Janet Wang, Jasmin Gao, Jeanna Joseph, Jeremy Chizewer, Julia Ruskin, Kenneth Peng, Kevin Feng, Khatanbuuvei Bold, Kwan Sirisakunngam, Lillian Xu, Matthew Penza, Michael Fletcher, Mwad Saleh, Noah Daniel, Oluwamayowa Oke, Rachana Balasubramanian, Rahul Saha , Sadie Van Vranken, Saisha Agrawal, Sarah Gao, Selena Chiu, Tiffany Sun, Tim Feng, Victoria Talvola, Young Ha Yoo, John Willett.


Precepts are an integral part of this course. We offer two formats: 50-minute so-called "regular precepts" and 80-minute "extended-time precepts." Both formats are designed for students with no computing background, but we have found that some students prefer to have more time to ask questions and learn at a more relaxed pace.

If you miss your precept, you can attend any other precept section. All Tuesday and Wednesday precepts cover the same content; all Thursday and Friday precepts cover the same content. We ask that you email the other preceptor in advance to let him/her know that you're coming.

P01 Tuesdays & Thursdays 2:30-3:20pm with Alan in Friend 110
P02 Tuesdays & Thursdays 3:30-4:20pm with Suriya in Friend 110
P03 Tuesdays & Thursdays 4:30–5:20pm with Jennifer in Friend 110
P04 Tuesdays & Thursdays 7:30–8:20pm with Jennifer in Friend 109
P05 Wednesdays & Fridays 10:00–10:50am with Anastasiya in Friend 110
P06 Wednesdays & Fridays 11:00–11:50am with Jenny in Friend 110
P07 Wednesdays & Fridays 12:30–1:20pm with Rachel in Friend 108
P07A Wednesdays & Fridays 12:30–1:20pm with Suriya in Friend 109
80-minute extended-time precepts:
P10 Tuesdays & Thursdays 3:00–4:20pm with Priscilla in Friend 109
P10A Tuesdays & Thursdays 3:00–4:20pm with Rachel in Friend 009
P11 Tuesdays & Thursdays 4:30–5:50pm with Alan in Friend 108
P11A Tuesdays & Thursdays 4:30–5:50pm with Jenny in Friend 009
P12 Wednesdays & Fridays 11am–12:20pm with Donna in Friend 108
P13 Wednesdays & Fridays 1:30–2:50pm with Donna in Friend 108
P14 Wednesdays & Fridays 3:00-4:20pm with Priscilla in Friend 109


Course software.This course has an associated software package called introcs that provides a complete Java programming environment. Install it on your computer by following the instructions for your operating system: Mac OS X, Windows, or Linux.

Piazza. Piazza is an online forum where you can ask and answer short questions.

Booksite. The booksite is a resource that accompanies the textbook for use while online (for example, while programming); it contains the code from the book and solutions to selected exercises. The textbook is for your use when initially learning new material or reinforcing your understanding of that material (for example, when reviewing for an exam).

codePost. You can check your assignment and programming exam feedback and grades on codePost.

Workstation computers.For students who may not have a computer or for students whose computers fail during the semester:


Course grades. Course grades are based on nine weekly programming assignments (40%), two written exams (35%), two programming exams (15%), and a final programming project (10%). There is no curve: you must earn, at a minimum, 93.0% of the available points for an A, 90.0% for an A–, 87.0% for a B+, 83.0% for a B, 80.0% for a B-, 77.0% for a C+, 73.0% for a C, 70.0% for a C-, or 60.0% for a D. You will fail the course if you earn below 60.0% of the available points.

Midterm exams. There are two two-part exams during the semester. One pair will be given in the middle of the semester; the other pair in the last week or so of classes. The exams have a written portion and a programming portion. There is no final exam. No makeup exams will be considered without a Dean's recommendation and our approval in advance.

Programming assignments. There are nine weekly programming assignments, all equally weighted.

Final project. The final project is a large programming project, approximately the length of two weekly assignments. It is due toward the end of Reading Period.

Late work. Assignments are due on Monday nights at 11:59pm. Submissions made at 12:00am will be marked late. If any part of an assignment is submitted late, the entire assignment will be marked late. To submit an assignment late, mark the checkbox on our online submission system (i.e., TigerFile) that indicates that your work is incomplete. If the deadline has passed and the checkbox is not marked, we will grade submitted work as-is. We will not accept any work after Dean's Date without a Dean's recommendation.

Penalties for late work. Late assignments are assessed a penalty equal to 20% of the possible points on the assignment per day or partial day late. The penalties for your first four late days are automatically waived. Additional late penalties will be waived only in the case of unforeseeable circumstances like medical emergencies, as documented by your Dean or Director of Studies.

Regrades. If you feel we have made a mistake while grading your work, write a short note describing the potential mistake and attach it to the graded work. Return it to your preceptor within two weeks of the work being handed back.

Collaboration Policy

This course permits (and encourages) many forms of collaboration, including with course staff, classmates, and lab TAs. However, you must be careful to collaborate only as authorized below. Here is an executive summary:

COS 126

Your solutions. You must individually compose all of your solutions. The term solutions refers to any of the products created when completing a programming assignment, such as source code (including comments) and the readme.txt file. It includes both finished and unfinished products, regardless of correctness or completeness.

All the rules above continue to apply after assignments are graded and after the end of the semester.

Collaboration with course staff. You are welcome to discuss your solutions with course staff members (instructor and preceptors) in office hours or via private Piazza posts. Do not post or email us your code; instead, submit it via the course submission system.

Collaboration with classmates. We encourage you to discuss common concerns with classmates either private via personal interactions or publicly in the Piazza course forum. These discussions must be kept at a general level, without exposing your solutions.

For example, you may discuss: But, you may not:
  • How to interpret an error message. For example, "What does StackOverflowError mean?"
  • How to use a feature in IntelliJ. For example, "How do I start the emmbedded terminal?"
  • Clarifications for the lecture videos, lecture slides, textbook, old exam questions, or the assignment specifications.
  • Look at another classmate's solutions (or show another classmate your solutions).
  • Lead a classmate step-by-step through any part of the assignment (or allow a classmate to lead you step-by-step through any part of the assignment).

Collaboration with students who have already taken COS 126. Anyone who successfully completed COS 126 in a previous term, including lab TAs and peer tutors, may assist you in the following ways:

Collaboration with a partner. On certain assignments the collaboration policy is relaxed to allow working with a partner, subject to the following rules:

Collaboration acknowledgment. You must acknowledge all collaboration in the readme.txt file for that week's assignment.


Plagiarism and abetting plagiarism are serious academic infractions. Programming is a creative work and the academic regulations that apply to plagiarizing prose also apply to plagiarizing code. Princeton's Rights, Rules, Responsibilities defines plagiarism as "the use of any outside source without proper acknowledgment." It ranges from "verbatim copying" (e.g., cutting-and-pasting code) to "thorough paraphrasing" (e.g., changing variable names or rearranging code).

Outside sources and citations. Copying or adapting code that is not yours is permitted only if it comes from the course materials (i.e., the course textbook, companion booksite, programming assignment specifications, checklists, lecture slides, lecture videos, and precepts). If you do so, you must cite any code that you copy or adapt (with the exception of code that is included with the assignment).

Plagiarism detection. We use sophisticated software tools to detect plagiarism. For example, we compare each submission (including interim submissions) against a code database, which includes all submissions from this offering and previous offerings of the course. While we take no pleasure in bringing cases to the Committee on Discipline; it is our duty to keep the playing field level for the overwhelming majority of students who work very hard in this course and follow the rules.

Penalties. We refer alleged academic violations (including plagiarism and abetting plagiarism) to the Committee on Discipline. If found responsible, the typical penalty is an F as a course grade plus whatever penalty that the CoD imposes. (The typical CoD penalty for plagiarism is suspension from the University for one year.) Violators of course policies that are not adjudicated by the CoD will receive penalties based on the severity of the violation, ranging from a warning (for violations that are both unintentional and innocuous) to an F in the course (for violations that are both intentional and serious).