Syllabus
Hi there đź‘‹ and welcome to CS106B!
Why CS106B? Perhaps you want to be able to computationally solve a wide range of problems thoughtfully, elegantly, and efficiently.
Imagine a nonprofit organization needs to assign tasks to its volunteers so they get completed as fast as possible. Or imagine a sociologist wants to learn how Americans utilize their National Parks system. Maybe a climatologist wants to estimate how many trees are in a forest. And, a city planner wants to see whether a proposed development will be underwater as sea levels rise. Also imagine that a physicist wants to know why perturbations to a system cause cascading effects.
How can we use computing power to answer these questions?
This course is about transitioning from “I know how to write programs” to “I know how to solve problems well with computers.” Over the course of eight weeks, we’ll explore an array of techniques, tools, and perspectives useful for modeling and solving problems. We’ll explore recursion and see how it can be used both to model the intricacies of nature and to optimally allocate resources. We’ll develop a rich vocabulary of structures that capture both the position of a dancer in space and ways of scheduling patients in a hospital. And we’ll see how to put these techniques to use in problems drawn from a range of disciplines.
By the time you’ve completed this course, you’ll learn how to look at problems in fundamentally different ways and how to use those perspectives to create clean and elegant computational solutions.
CS106B Programming Abstractions is the second course in Stanford’s introductory software engineering sequence. The prerequisite CS106A establishes a solid foundation in programming methodology and problem-solving in Python. Once you complete 106A or an equivalent course, CS106B will: acquaint you with the C++ programming language; introduce advanced programming techniques such as recursion, algorithm analysis, and 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 software engineering!
Teaching Team
Our wonderful undergraduate section leaders.
Our amazing 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, assignment, section handouts, course policies, and more). Please regularly visit so that you are up-to-date with the latest announcements and course information.
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 to the staff. 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).
Paperless is our tool for assignment submission and grading. You use Paperless to submit assignments, schedule grading sessions and view grading feedback. Signing up for LaIR helper hours 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!):
- What is possible with technology and code? What isn’t possible?
- How can I use programming to solve problems that I otherwise would not be able to?
- 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):
- C++ basics
- Abstract data structures
- Recursion
- Classes and object-oriented programming
- Memory management and implementation-level abstractions
- Linked data structures
- 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 or high school student, 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 if it is necessary for you 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 2:00-3:00pm PDT (GMT -7). Students should attend lectures live via Zoom in order to fully participate in class discussions, breakout rooms, polls, etc. Recordings will be posted to Canvas for later asynchronous viewing. Read more about lecture, including how to find the appropriate Zoom information.
Sections
In addition to lecture, you’ll also attend a weekly, 1 hour 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 Sunday, June 20 and 5:00pm PDT on Tuesday, June 22. 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 23. 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 first week of classes (you may have section on Wednesday the 23th!), 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 here.
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 here.
All assignments are done on an individual basis and will be due at 11:59pm in your local time zone.
The assignment deadline policy has been designed to build in flexibility, given that the circumstances of online learning can be unpredictable. Assignments submitted by the due date earn a small on-time bonus. After the due date, there is a "grace period" (typically 48 hours) where we will accept late submissions without penalty. Read more about the late policy here.
Assessments
We plan for a mid-quarter diagnostic and an end of quarter assessment . The mid-quarter diagnostic 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. 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.
Read more about assessments.
Course Grades
Final grades for the course will be determined using the following weights:
- 60% Programming assignments (may be weighted toward cumulative assignments)
- 15% End of quarter assessment
- 15% Mid-quarter diagnostic
- 10% Section participation
IV) Course Resources
Textbook
Roberts, Eric. Programming Abstractions in C++. ISBN 978-0133454840.
You can either purchase your own copy or use the version linked on the course website. Recommended readings for each lecture will be posted on our lecture calendar.
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 and head TA will hold office hours (Zoom). The course helpers and section leaders staff regular LaIR helper hours (Zoom). 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.
During summer quarter, the Summer Academic Resource Center (SARC) also offers tutoring and academic workshops separate from our course. All summer students should have been added to a Canvas page with their tutoring resources.
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 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.
Course Information based on prior handouts by Keith Schwartz, Nick Bowman, and Kylie Jue.