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

Lecturer: Chris Gregg
✉️cgregg@stanford.edu
Lecturer: Julie Zelenski
✉️zelenski@stanford.edu
Head TA: Nick Bowman
✉️nbowman@stanford.edu

Our wonderful undergraduate section leaders.

Lectures

Lectures this quarter will take place on Monday, Wednesday, and Friday from 2:30 - 3:20 pm PDT (GMT -7).

All lectures will be available live on Zoom, as well as recorded for download or viewing later. In order to protect course security and integrity, all Zoom information for lecture will be posted on Canvas, via the lecture calendar event. Read more about lecture, including how to find the appropriate Zoom information.

Sections

In addition to lecture, you’ll also attend (via Zoom) a weekly small-group discussion section. Read more about section here.

Prerequisites

The prerequisite for CS106B is solid performance in CS106A and readiness to move on to advanced programming topics. A comparable introductory programming course (including high school AP courses) is often a reasonable substitute for our CS106A. If unsure if this course is the right for you, read more about course placement.

Units

CS106B is offered for 3 to 5 units. If you are an undergraduate student, you must enroll in CS106B for 5 units (this is by department and university policy, no exceptions). Matriculated graduate students may enroll for 3 or 4 units to squeeze into a limited tuition allowance, however this is solely a bookkeeping change and has no effect on the course requirements.

Textbook

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

Ensure that you either own or have access to a copy. Recommended readings for each lecture will be posted on our lecture calendar. Read more about the textbook.

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 instructor 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 participate!

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.

Assignments

Our schedule plans for 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.

Programs will be graded on "functionality" (is the program's behavior correct?) and "style" (is the code well written and cleanly designed?). We use a bucket grading scale to focus attention on the quantitative rather that quantitative feedback.

The grading on your assignment is discussed a one-on-one session with your section leader, with an emphasis on providing targeted feedback for individual improvement. Read more about assignments.

Assessments

There will be a mid-quarter and final assessment, though neither will be a traditional exam. We will have more information on the format as we figure it out ourselves. Read more about assessments.

Course grades

Per university directive, all courses in Spring 2020 will use a Satisfactory / No Credit grading scheme. The impetus for this is a recognition that our students are learning in very different contexts. A silver lining of this policy is that it allows us to focus on the good stuff: the joy of learning, mastery of an important skill, and less on the minutiae of grading. We are going to be just as serious about teaching and getting you high quality feedback.

Our goal for you is to leave the course with mastery of the material and a solid foundation for further study in computer science. We think your enhanced coding superpowers are much greater reward than any letter grade could be.

Course grades will be calculated using the following component weightings:

  • Assignments 55%, Mid-quarter assessment 15%, Final assessment 20%, Section participation 10%
  • Revised 5/24/2020 (removed end-quarter, re-distribute weight)
  • Assignments 60%, Mid-quarter assessment 25%, Section participation 15%

To receive a satisfactory grade, we expect satisfactory work on each component. This means you are required to make a real effort on and submit all the assignments, pass the assessments, and attend/participate in section. But, importantly, skipping some portion of the class because you think you “don’t need it” to pass the class is taken as an indication of lacking mastery of the material and can lead to a non-passing grade. We want you to engage with all the material in the class, not aim to do the minimal amount that you think might be required for passing. Please take this to heart when doing the work for this class

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 til now at a passing level and must have an extenuating circumstance which warrants an extension of time beyond the end of the quarter. Approval for an incomplete is at the instructor's discretion. Incompletes are not considered for reasons such as low performance or to ease your schedule.

Honor Code

The Stanford Honor Code is an undertaking of the students and faculty to individually and collectively participate in upholding the highest standards for academic integrity. Please review our Honor Code handout for a thorough explanation of how it applies in this course. 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 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 reserve the right to use software tools to compare your submissions against those of all other current and past students and will refer all cases of concern to the Office of Community Standards.