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!
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. 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
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?
- Which problems should I solve with algorithms and data structures? What does a responsible programmer do when using data about real people?
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
- Classes and object-oriented programming
- Memory management and implementation-level abstractions
- Linked data structures
- 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 11am-12pm PT in Bishop Auditorium. 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. 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:00 PM on Thursday, September 23, 2021 and 5:00 PM on Sunday, September 26, 2021. 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, September 29. 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; this participation contributes to your course grade. Participation during section can take many forms, including asking questions, contributing answers, and participating in discussions with fellow students.
Read more about section.
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. All assignments are done on an individual basis.
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 48 hours) where we will accept late submissions without penalty. Read more about the late policy.
Programs will be graded on "functionality" (is the program's behavior correct?) and "style" (is the code well-written and designed cleanly?). W We use a bucket grading scale to focus attention on the qualitative rather than quantitative feedback. Read more about assignments and assignment grading.
There will be assessments at mid-quarter and end-quarter. Read more about assessments.
Final grades for the course will be determined using the following weights:
- 60% Programming assignments
- 15% Midterm assessment
- 20% End-quarter assessment
- 5% 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
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.
We want to enable everyone to succeed in this course and offer different paths to help.
The instructors and Head CA will hold office hours in person, with a zoom option available when needed by request. 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.
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. Once you obtain your OAE letter, please send it to the head TA.
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.