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 Elyse Cornwall
Elyse
Photo of Amrita Kaur
Amrita

Our wonderful undergraduate section leaders.

I) Online Course Essentials

Our course website is located here at https://cs106b.stanford.edu. Our website is your go-to for all course materials (schedule, lecture slides, assignments, section handouts, course policies, and more). You should regularly check the course website to stay up-to-date with our class.

All lectures will be recorded and posted on Canvas under the "Panopto Course Videos" tab. In this class, we will only use Canvas to distribute recorded videos – all other materials will be published on our course website.

The discussion forum on Ed is the place for students to ask questions about lectures, sections, assignments, and course logistics. If you are enrolled in the course on Axess, you will already be registered for our Ed discussion forum.

Paperless is our tool for assignment submission and grading. You use Paperless to submit assignments, schedule grading sessions and view grading feedback. ASigning up for LaIR helper hours (office hours staffed by the section leaders) is also accessed through the Paperless portal.

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, absolutely 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

Lectures will take place on MTuWTh from 1:30PM-2:45PM in NVIDIA Auditorium. Come to learn the material and engage in interesting problems collectively with the class! Recorded lecture videos will also be available on Canvas shortly after lecture ends.

Attendance

It has been observed over many quarters that attending classes highly correlates with doing well in the course and mastering the material. Thus, all students are expected attend lectures in person if at all feasible (i.e., not if you are sick or an SCPD remote student), in order to fully participate in class discussions and other synchronous activities. We understand that this isn't possible for every student all the time, so if you are unable to attend a lecture, we ask that you watch the video of class before our next class.

In fact, we think that staying up-to-date with the lectures is so important, that we are offering a small incentive to help motivate you: up to 5% of your course grade (knocked off the final exam) can come from lecture attendance. To recieve credit for "attending" lecture, you will need to either come to lecture in person or watch the recording before the next class, and then complete an attendance ticket on Gradescope. Read more about lectures.

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. Read more about section.

Friday Help Sessions

Instead of having lectures on Fridays, we will be hosting a completey optional weekly help session to review the week's content and work through additional practice problems. This session will be led by our amazing section leaders every Friday from 1:30-2:45pm in NVIDIA Auditorium (same time and place as lecture). The resources from this help session will be posted on our course website and the recordings will be hosted on Canvas. However, we strongly encourage you to attend in person, as that will help you get the most out of these review sessions!

Assignments

There will be regular assignments, about one per week. An assignment may include written problems, hands-on exercises with the tools, coding tasks and/or a larger complete program. Read more about assignments.

The assignment deadline policy has been designed to build in flexibility. Assignments submitted by the due date earn a small on-time bonus. After the due date, there is a "grace period" (typically 24 hours) where we will accept late submissions without penalty. Read more about the late policy.

Assessments

We plan for a mid-quarter exam and a final exam. The mid-quarter exam will serve as a check-in to help you assess your understanding of fundamental topics covered in the first half of the course.

We will have more information about these assessments as the quarter progresses.

Read more about assessments here.

Course Grades

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

  • 55% Programming assignments
  • 10% Midterm
  • 20-25% Final Exam
  • 10% Section participation & IG attendance
  • 0-5% Lecture attendance

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 assignments up to the time of the request at a passing level. You must also have an extenuating circumstance that warrants an extension of time beyond the end of the quarter to complete the remaining work. Approval for an incomplete is at the instructors’ discretion. Incompletes will not be considered for reasons such as low performance or overcommitment.

IV) Course Resources

Textbook

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.

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. 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. The section leaders staff regular LaIR helper hours. The CS106B Ed Discussion forum allows public Q&A and discussion with your peers. Read more about getting help.

Accommodations

Students who need an academic accommodation 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 observe our course-specific Honor Code expectations. 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.

The CS department 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.