Hi there 👋 and welcome to CS106B!

CS106B Programming Abstractions is the second course in our introductory programming sequence. The prerequisite, CS106A, establishes a solid foundation in programming methodology and problem-solving in Python. CS106B will give you the tools to solve more complex computational problems while focusing on the theme of abstraction, all using the C++ programming language.

We're excited to share this great material with you and have a superb team of section leaders that will support you through the challenges to come. We hope you will find the time worth your investment and that you enjoy your growing mastery of the art of programming!

Teaching Team

Photo of Nick Bowman
Photo of Kylie Jue

Our wonderful undergraduate section leaders.

I) Online Course Essentials

The central place for all CS106B resources is the course website. The site is located at You should regularly check the class website for handouts, announcements, and other information, including the most up-to-the-date information on assignments and errata.

All lectures and other course meetings will be recorded and posted on the "Course Videos" tab of the course Canvas page. In CS106B, we will only use the Canvas page to distribute recorded materials – all other material will be published on the course website.

There will be an online Ed Discussion forum available to all students, where you can ask questions about lecture, section, assignments, and course logistics. Please join the forum using this link at your earliest convenience.

Finally, all assignment submissions, feedback, grading, and virtual office hours will be conducted using the CS198 Paperless website. You will be able to use this website to submit assignments, view graded assignments, and sign up for LaIR (virtual office hours staffed by the section leader community).

II) Course Topics

Learning Goals

After you’re finished with CS106B, we hope you’ll have achieved the following learning goals:

  • I am excited to use programming to solve real-world problems I encounter outside class.
  • I recognize and understand common abstractions in computer science.
  • I can identify programmatic concepts present in everyday technologies because I understand how computers process and organize information.
  • I can break down complex problems into smaller subproblems by applying my algorithmic reasoning and recursive problem-solving skills.
  • I can evaluate design tradeoffs when creating data structures and algorithms or utilizing them to implement technological solutions.

We’ll also be giving you tools to tackle the following questions (note that these don’t have single right or wrong answers!):

  1. What is possible with technology and code? What isn’t possible?
  2. How can I use programming to solve problems that I otherwise would not be able to?
  3. What makes for a “good” algorithm or data structure? Why?
  4. Which problems should I solve with algorithms and data structures? What does a responsible programmer do when using data about real people?

Lecture Schedule

While the below schedule is subject to change over the course of the quarter, we will cover the following topics (in approximate order):

  1. C++ basics
  2. Abstract data structures
  3. Recursion
  4. Classes and object-oriented programming
  5. Memory management and implementation-level abstractions
  6. Linked data structures
  7. Advanced algorithms


The prerequisite for CS106B is completion of CS106A and readiness to move on to advanced programming topics. A comparable introductory programming course or experience (including high school AP courses) is often a reasonable substitute for Stanford’s CS106A. If you are unsure if this course is the right for you, read more about course placement.

III) Course Structure


If you are an undergraduate, you must enroll in CS106B for 5 units (this is by department and university policy, no exceptions). If you are a graduate student, you may enroll in CS 106B for 3 or 4 units to reduce your units for administrative reasons. Taking the course for reduced units has no change on the course workload.


Lectures will take place on Monday, Wednesday, and Friday from 11:30am–12:30pm PDT (UTC -7). Students should attend lectures live via Zoom in order to fully participate in class discussions, breakout rooms, polls, etc. Zoom call information will be posted in a restricted section of the course website and on Canvas in order to protect course security.

If there is a day where you cannot attend a lecture live, recordings of the sessions will be available later on Canvas.

Read more about lectures.


In addition to lecture, you’ll also attend a weekly, 50-minute small group discussion section via Zoom. Each discussion section will be led by an assigned section leader, who will act as your mentor, grader, and personal connection to the greater CS106B course staff.

You’ll be asked to submit your section preferences between 5:00pm PDT on Thursday, June 24 and 5:00pm PDT on Sunday, June 27. The sign-up form will be available on the web at the URL, and after a matching process, your section assignments will be emailed out to you by the morning of Wednesday, June 30. Note that you should only sign up for sections at the URL indicated previously (you should not sign-up for sections on Axess).

Sections begin the second week of classes, and attendance and participation will be mandatory for all students. Your section leader will be grading your participation in section on a weekly basis, and these grades will make up 10% of your final grade. Participation during section can take many forms, including asking questions, contributing answers, and participating in discussions with fellow students.

Read more about section.


Our schedule plans for roughly one assignment per week. Depending on the week's topics, the accompanying assignment may consist of written problems, hands-on exercises with the tools, targeting coding tasks, and/or a larger complete program.

All assignments are done on an individual basis and will be due at 11:59pm PDT.

The assignments will become more complex as the quarter progresses so later assignments will be weighted slightly more than the earlier ones. Programs will be graded on "functionality" (is the program's behavior correct?) and "style" (is the code well-written and designed cleanly?). We may also ask you to submit brief reflections on areas of improvement based on feedback from previous assignments.

We use a bucket grading scale to focus attention on the qualitative rather than quantitative feedback. Read more about assignments and the bucket grading scale.

From past experience, we expect most grades to be ✓+ and ✓. Dividing the grades into categories means that your section leader can spend more time commenting on what you need to learn from the assignment and not have to worry about justifying each point. The overall goal is to maximize the learning experience in doing the assignments, and from a pedagogical perspective over many quarters of experience, we have found the "bucket" grading system to work much better for programming assignments than assigning numeric grades. Along with your final grade on the assignment, your section leader will also provide written feedback on your submission.


Except for the final assignment, you will have the opportunity to submit homework revisions once you have received feedback from your section leader. Please note that you must have submitted the original assignment by the end of the grace period in order to be eligible for revisions. (In other words, you cannot submit an assignment for the first time using the revision deadline.)

By submitting a revised assignment, you can improve only your functionality grade, capped at a ✓. Revised assignments must:

  1. Fix existing bugs
  2. Not introduce new bugs
  3. Include your own test cases that would have uncovered the bugs previously in your program
  4. Be submitted within three days after the following assignment’s due date. (For example, if Assignment 2 is due on 7/9, revisions for Assignment 1 will be due on 7/12.)

A section leader will grade your revised assignment, but if you do not meet the above requirements, a higher grade is not necessarily guaranteed.

Late policy

The assignment deadline policy this quarter has been designed with built-in flexibility in mind, given that the circumstances of online learning may sometimes be unpredictable. With that being said, here are the details of the assignment deadline and late policy this quarter:

With that being said, here are the details of the assignment deadline and late policy this quarter:

All assignments this quarter will have a single published deadline, which will be enforced as 11:59pm PDT. For example, an assignment with a submission deadline of July 2, means that you have until 11:59pm PDT on July 2, as displayed on your computer/phone/home clock to submit the assignment. Submission by this deadline will result in a 5% added bonus to your final grade on that particular assignment. These bonuses will be added at the end of the quarter and will not be reflected in your individual bucket grades.

  • All students will be granted a penalty-free 24-48 hour "grace period" for submission on all assignments (except the final one). The length of the grace period may vary on an assignment-to-assignment basis, but will be clearly published alongside the due date for each assignment. The grace period allows you to submit the assignment after the original deadline, with no impact on your final grade. Following our prior example, for an assignment with a July 2 submission deadline and a 24-hour grace period, all students have the opportunity to submit until 11:59pm PDT on July 3 and still be eligible to submit their work for full credit. This grace period is meant to give built-in flexibility for any unexpected snags – however, we strongly recommend students to submit by the original deadline if possible, in order to avoid falling behind on the class cadence.
  • Late submissions are not accepted after the grace period expires, unless there is an exceptional situation that the teaching team has been made aware of, as described below.

Note that there won’t be grace periods for final project deadlines.

You should think of the grace period following the deadline as an extension you have been granted ahead of time. As a result, a penalty-free extension beyond the expiration of the grace period will generally not be granted. In special circumstances (primarily extended medical problems, emergencies, or previously established OAE accommodations), the grace period may be extended for individual students on a case-by-case basis. All extension requests must be directed to the lecturers (Kylie and Nick) no later than 24 hours before the program is due. Only the lecturers will be able to approve extensions. In particular, do not ask your section leader.

Read more about the late policy.


There will be a mid-quarter diagnostic and a final project. The mid-quarter diagnostic will serve as a check-in to help students to assess their understanding of fundamental core topics covered in the first four weeks of the class.

The final project will be released well before the end of the quarter and will ask students to design an exam/section problem on a topic of their choice. The multi-week project will give you the opportunity to check in with instructors and/or your section leader for feedback while developing a solution to a problem that you get to motivate and develop. You will present and teach the problem in a 1-on-1 meeting at the end of the quarter.

We will have more information about these assessments as the quarter progresses. Our primary focus is to take advantage of the virtual learning environment to create assessments that will allow you to demonstrate what you’ve learned in the class rather than testing you under strict time constraints as in a traditional exam.

Read more about assessments.

Course Grades

Final grades for the course will be determined using the following weights:

  • 60% Programming assignments
  • 20% Personal project (final assessment)
  • 10% Mid-quarter diagnostic
  • 10% Section participation


The university “I” grade (“incomplete”) is appropriate for circumstances of significant personal or family emergency disruption that prevent a student from finishing course requirements on schedule. To be considered for an incomplete, you must have completed all of the assignments up until your “incomplete” request at a passing level. You must also have an extenuating circumstance that warrants an extension of time beyond the end of the quarter. Approval for an incomplete is at the instructors’ discretion. Incompletes will not be considered for reasons such as low performance in the course or workload difficulties.

IV) Course Resources

The Course Communication Guide outlines what channels of communication are appropriate for different types of questions/help resources. Please read it over before contacting course staff.


Roberts, Eric. Programming Abstractions in C++. ISBN 978-0133454840.

You can either purchase a physical copy or use the course reader . Recommended readings for each lecture will be posted on our lecture schedule.


The official CS106 programming environment is Qt Creator, which is an editor bundled with C++ compiler and libraries. The software runs on Windows, Mac, and Linux. The Qt Installation Guide has instructions for installing the tools onto your computer.

Getting help

We want to enable everyone to succeed in this course and offer different paths to help.

The instructors will hold office hours on Zoom. The course helpers and section leaders staff regular LaIR helper hours on OhYay. The CS106B Ed Discussion forum allows public Q&A and discussion with your peers. Here is the Quick Start Guide to using Ed. Please see the course communication guide on the course website to determine what the appropriate venue for your question would be.


Students who need academic accommodations based on the impact of a disability should initiate a request with the Office of Accessible Education. Professional staff will evaluate the request with required documentation, recommend reasonable accommodations, and prepare an Accommodation Letter dated in the current quarter. Students should contact the OAE as soon as possible since timely notice is needed to coordinate accommodations. The OAE has contact information on their web page:

V) Honor Code

As a student taking a Stanford course, you agree to abide by the Stanford Honor Code, and we expect you to read over and follow the CS-specific Honor Code expectations detailed on the CS106B website. Your programs should be your own original, independent effort and must not be based on, guided by, or jointly developed with the work of others.

Stanford employs powerful automated plagiarism detection tools that compare assignment submissions with other submissions from the current and previous quarters, as well as related online resources. The tools also analyze your intermediate work, and we will run the tools on every assignment you submit.

The vast majority of you are here to learn and will do honest work for an honest grade. We celebrate and honor your commitment. Because it’s important that all cases of academic dishonesty are identified for the sake of those playing by the rules, we will refer all cases of concern to the Office of Community Standards. If we find that you have violated Stanford’s Honor Code, you will automatically fail the course. No exceptions can be made to this policy.