Syllabus


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. With that under your belt, CS106B will acquaint you with the C++ programming language and introduce advanced programming techniques such as recursion, algorithm analysis, data abstraction, explore classic data structures and algorithms, and give you practice applying these tools to solving complex problems.

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 Jenny Han
Jenny
Photo of Kylie Jue
Kylie
Photo of Trip Master
Trip

In addition, we have a wonderful team of undergraduate section leaders (photo gallery coming soon!)

I) Online Course Essentials

The central place for all CS106B resources is the course website. The site is located at https://cs106b.stanford.edu. 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 (not yet published as of June 10, 2022). 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 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 (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?

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

Prerequisites

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

Units

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 CS106B for 3 or 4 units to reduce your units for administrative reasons. Taking the course for reduced units does not imply any change in the course workload.

Lectures

Lectures will take place on Monday, Tuesday, Wednesday, and Thursday from 12:15–1:15pm PDT in NVIDIA Auditorium. With the exception of SCPD students, all students must attend lectures in person to fully participate in class discussions and other synchronous activities.

Each lecture, we will have an “attendance ticket,” a live activity that will help us take attendance and help you review the material covered in that lecture. For SCPD students, the attendance tickets for each week will be due on Sundays at 11:59pm PDT instead.

You can miss up to 4 lectures with no participation grade penalty, and you do not need to notify the instructors when this happens.

Recordings of the sessions will be available later on Canvas for future reference.

Video cameras located in the back of the room will capture the instructor presentations in this course. For your convenience, you can access these recordings by logging into the course Canvas site. These recordings might be reused in other Stanford courses, viewed by other Stanford students, faculty, or staff, or used for other education and research purposes. Note that while the cameras are positioned with the intention of recording only the instructor, occasionally a part of your image or voice might be incidentally captured. If you have questions, please contact a member of the teaching team.

Sections

In addition to lecture, you’ll also attend a weekly, 50-minute small group discussion section. 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 Sunday, June 19 and 5:00pm PDT on Tuesday, June 21. The sign-up form will be available on the web at the URL https://cs198.stanford.edu, and after a matching process, your section assignments will be emailed out to you by the morning of Wednesday, June 22. 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.

Virtual section is only available for SCPD students, students in covid isolation, or students with OAE accommodations. If you test positive or receive an exposure notification and require virtual section, please let Trip know as soon as possible at trip@cs.stanford.edu with a screenshot of your positive test (with name and date visible) or exposure notification (with name and date visible) and indicate clearly in your email the start and end dates of isolation. After your end date has passed, you are expected to return to in-person sections.

Assignments

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, targeted 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 use a bucket grading scale to focus attention on the qualitative rather than quantitative feedback:

Grade Notes
++ An absolutely fantastic submission that will only come along a few times during the quarter across the entire class. To ensure that this score is given only rarely, any grade of ++ must be approved by the instructors and head TA.
+ A submission that is "perfect" or exceeds our standard expectation for the assignment. To receive this grade, a program often reflects additional work beyond the requirements or gets the job done in a particularly elegant way.
âś“+ A submission that satisfies all the requirements for the assignment, showing solid functionality as well as good style. It reflects a job well done.
âś“ A submission that meets the requirements for the assignment, possibly with a few small problems.
✓– A submission that has problems serious enough to fall short of the requirements for the assignment.
– A submission that has extremely serious problems, but nonetheless shows some effort and understanding.
–- A submission that shows little effort and does not represent passing work.

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.

Revisions

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, which will be 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/7, revisions for Assignment 1 will be due on 7/10.)

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. 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 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-hour "grace period" for submission on all assignments (except the final one). The grace period 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 head TA (Trip), with Jenny and Kylie cc'ed, no later than 24 hours before the program is due. Only the head TA or lecturers will be able to approve extensions. In particular, do not ask your section leader.

Assessments

There will be a midterm exam and a final project. The midterm exam will serve as a check-in to help students to assess their understanding of fundamental core topics covered in the first part 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 create assessments that will allow you to demonstrate what you’ve learned in the class.

Course Grades

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

  • 55% Programming assignments (may be weighted toward cumulative assignments)
  • 20% Final project
  • 10% Midterm exam
  • 10% Section participation
  • 5% Lecture participation (attendance tickets)

Incompletes

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.

Textbook

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

You can find different options to access the textbook here . Recommended readings for each lecture will be posted on our lecture schedule.

Software

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.

Getting help

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

The instructors and head TA will hold office hours weekly. The course helpers and section leaders staff regular LaIR helper hours. 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.

Accommodations

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: http://oae.stanford.edu.

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.

Welcome to CS106B!