Syllabus


Hi there đź‘‹ and welcome to CS106B!

Course Overview

A nonprofit needs to assign tasks to its volunteers so they get completed as fast as possible. A political scientist wants to determine how to allocate city council seats based on a popular vote. A climatologist wants to estimate how many trees are in a forest. A city planner wants to see whether a proposed development will be underwater as sea levels rise. 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 with computers.” Over the course of ten 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 can both capture the position of a dancer in space and compress a data file. 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.

Who We Are and What to Expect From Us

Hi everyone! We're Keith (instructor) and Jonathan (head TA):

Photo of Keith Schwarz
Keith
Photo of Jonathan Coronado
Jonathan

We're committed to giving you the best educational experience we can this quarter. We'll provide high-quality lectures, assignments, and support materials. Please feel free to stop by our office hours to say hi and introduce yourself - one of the best perks of teaching CS106B is meeting amazing students like you! You can also chat with us after lecture if you'd like. We're happy to take questions on the weekly assignments, provide pep talks around exam time, offer guidance on navigating Stanford, talk about the CS landscape, etc.

We are joined this quarter by a group of phenomenally talented section leaders. Your section leader will run a weekly discussion section, meet with you regularly to review your assignments, and staff our regular "LaIR" assignment help hours.

What We Expect From You

We expect that each of you will approach this course with an open mind and a healthy spirit of curiosity. We find this course material absolutely fascinating, and it's truly amazing how much you will be able to get the computer to do once you've completed CS106B. But beyond that, we think the material you'll learn this quarter will cause you to look at the world in a different way - you'll have new ways of recognizing patterns behind complex structures and will more generally see things through a computational lens.

It is perfectly normal, when learning a new skill, to get stuck and need some help. We expect that you'll have a bunch of questions, so please feel free to ask us! Knowing how to ask good questions is a skill in and of itself, so we may answer the questions you ask us (e.g. "why doesn't my code work?") with some questions of our own (e.g. "what have you done to try to identify the problem?") to help you learn to work independently.

We also expect you to treat the course staff professionally. Professionalism means many things, and in particular we expect the following:

  • We expect that, if a situation arises that impacts your ability to meet deadlines or course requirements (e.g. something that prevents you from attending section one week, or a conflict with an exam time), you will let us know as soon as possible. In an actual work environment, it would not be appropriate, for example, to miss an important meeting due to a conflict you knew about for weeks but didn't disclose to your manager. Similarly, if you have OAE accommodations pertinent to an assignment or exam, we expect that you'll share your OAE letter with us (use this form to submit your letter) well in advance.

  • We expect that you will treat the course staff courteously. We assume this goes without saying, but it's not okay to be rude, disrespectful, or abusive in your interactions with us. Similarly, if you arrange a one-on-one meeting with your section leader, Jonathan, or Keith, we expect you'll attend that meeting or give clear advance notice that you won't be able to make it.

  • We expect that you'll create a welcoming environment for other students. We love it when folks ask questions, but please don't ask questions whose aim is to signal that you know some particular fact or are familiar with some concept. Remember that no one is born knowing the material in this course, so don't be disparaging of someone just because they haven't heard of something. And of course, don't assume someone will or won't have a particular aptitude for the material just because of how they look or dress; brilliant computer scientists come from everywhere.

  • We expect that you'll follow up with us if you contact us and we don't respond. We're only human and sometimes miss an email in our inbox or fail to notice a post on EdStem. If we don't get back to you, it's not because we're ghosting you; we probably just didn't see your message or accidentally thought we'd already replied to it. In that case, send us a (polite!) nudge to make sure it's on our radar.

  • We expect you'll assume we're operating in good faith. We understand how frustrating it can be if we make an error when grading, misread your code in office hours, etc. If something like that happens, we ask you assume that the root cause was a simple mistake on our part rather than something more nefarious. Stated more simply, assume that we "did a dumb" rather than we "are a dumb." (Adopting this attitude of assuming human error rather than malice will make you a much happier person in the long run!)

Websites and Technology

The main CS106B website is where you are right now, cs106b.stanford.edu. We have links to a bunch of other tools here. Here's the quick rundown:

  • Our main course website cs106b.stanford.edu is the main hub for course information. It contains links to everything you’ll need.
  • We use Canvas to host lecture videos.
  • We use Ed as our Q&A forum.
  • You will need to download and install Qt Creator to complete the coding assignments.
  • You'll submit your work online through Paperless.
  • We will handle lecture participation through PollEV.

Prerequisites

CS106B assumes that you have a familiarity with programming at the level of CS106A or the AP Computer Science exam. Check out our course placement page for more information about deciding whether CS106B is right for you. As always, feel free to get in touch with us if you have any questions.

A note: although this class uses C++, this class is primarily designed to teach abstraction, recursion, and algorithmic analysis. If you already know those topics and just want to learn C++, you may want to opt to take CS106L instead of CS106B.

Lectures

CS106B meets Monday, Wednesday, and Friday from 1:30PM - 2:30PM in Hewlett 200. (Axess lists us as running from 1:30PM - 2:50PM. We'll only use an hour of that block and will let you out twenty minutes early.) Throughout the quarter, lectures will be recorded and made available on Canvas.

It's important to keep pace with the lectures rather than to batch them up and watch them all in one go. (That model works great for Netflix shows that really hook you in, but it's not great for learning.) To give you an incentive to stay on top of lectures, we've reserved 5% of your grade for lecture participation. Here's the details. Starting on Monday, January 13th, we'll ask a small number of practice questions through the PollEV polling system. You will earn participation credit if you meaningfully attempt to answer those questions, regardless of whether your answers are correct. If you would prefer not to attend lecture in person, in Week 4 we will send out a form that will give you the option to instead count your final exam score in place of your lecture participation grade.

To allow for some flexibility, you're allowed to miss the credit opportunity (i.e. not completing PollEV) for three lectures over the course of the quarter and still earn the full 5%.

CGOE students: Since it would not be realistic for us to expect you to attend lectures in person, you will automatically receive full credit for lecture participation.

Discussion Sections

In addition to lecture, you must also sign up for a weekly discussion section. Section signups are handled online and run from Thursday, January 9th at 5:00PM Pacific time to Sunday, January 12th at 5:00PM Pacific time. After a matching process, your section assignment will be emailed by Tuesday, January 14th at 5:00PM Pacific time. Sections begin the second week of classes. This link is also available on the CS106B web page.

Although Axess lists discussion sections for this course, we don't look at Axess section enrollments when assigning sections. Even if you're enrolled in a section through Axess, you need to sign up through our system as well to make sure that someone will be grading your assignments.

Discussion sections are an important part of the course - they provide more practice with the material and expand on the topics discussed in lecture. Our expectation, therefore, is that you will be attending discussion section each week. To that end, we've reserved 5% of your course grade for section participation, and to be eligible for an A or A+ in CS106B, you may not have more than one unexcused absence from section.

CGOE students: We're excited that folks from all over the world are interested in taking this course! Because of the logistical infeasibility of requiring section attendance from a group that's dispersed all over the surface of the Earth, we will automatically give you the full 5% section participation credit, and you are not required to attend any sections to be eligible for an A or A+.

We expect that you will attend your assigned discussion section each week. If you need to miss a section for an unavoidable conflict, contact your section leader at least 24 hours before section to let them know. You will then need to attend another section that week. (Of course, if you unexpectedly become sick before section, we don't need 24 hours advance notice, but you should let your section leader know as soon as possible.)

Getting Help

Learning to program is like learning any skill – it takes practice, and it’s normal to need some help from time to time.

You can get one-on-one help from our staff through “LaIR Hours.” LaIR hours run from 7:00PM - 11:00PM Pacific time, Sundays through Thursdays. We'll release details about how LaIR will run this quarter once LaIR hours begin.

In addition to the LaIR, you can get help asynchronously on our online EdStem forum. This is a Q&A site that we’re constantly monitoring, and we’re happy to take conceptual questions there. Visit Canvas to get a link to the EdStem page. Our EdStem forum is primarily for conceptual questions. If you have a coding question, please post it privately so you don’t share your code with everyone else in the class.

And finally, you’re welcome to visit Jonathan or Keith’s office hours each week. We’re looking forward to meeting you and are happy to help out!

Units

If you are an undergraduate or a non-matriculated graduate student (e.g. CGOE), you need to enroll in CS106B for five units (these are department and university policies, respectively). If you are a matriculated graduate student, you may enroll for anywhere between three and five units, depending on what best fits into your schedule. Regardless of how many units you are enrolled for, the course content and requirements will be the same. The unit flexibility is simply to make scheduling easier for matriculated graduate students.

Five-unit courses at Stanford vary greatly in their difficulty. Based on past student experiences, you should expect that this course probably will require a time investment proportional to its unit load. Expect to put in around 10 – 15 hours each week working on CS106B. We'll offer a lot of support through office hours, extra practice problems, and the like, and if you're willing to put in the effort to learn the material, the course staff will be behind you every step of the way.

Readings

The required reading for this course is Eric Roberts' Programming Abstractions in C++. You can purchase a copy at the bookstore using this link:

https://www.bkstr.com/stanfordstore/search/keyword/programming%2520abstractions

You can also use this online version, which is a 2012 draft version of the book.

https://web.stanford.edu/dept/cs_edu/resources/textbook/

We assume that the majority of you have no prior programming experience in C++, and this textbook is a great resource to use at the start of the quarter as you’re transitioning into the language.

A helpful note from the School of Engineering:

“All students should retain receipts for books and other course-related expenses, as these may be qualified educational expenses for tax purposes. If you are an undergraduate receiving financial aid, you may be eligible for additional financial aid for required books and course materials if these expenses exceed the aid amount in your award letter. For more information, review your award letter or visit the Student Budget website.”

Assignments

There are nine total assignments this quarter - one at the start of the quarter to help you get your computer set up to write C++ programs, then eight programming assignments. Assignments are due on Fridays at 1:00PM Pacific time. Check out our page on assignments for more details.

Access and Accommodations

Stanford is committed to providing equal educational opportunities for disabled students. Disabled students are a valued and essential part of the Stanford community. We welcome you to our class.

If you experience disability, please register with the Office of Accessible Education (OAE). Professional staff will evaluate your needs, support appropriate and reasonable accommodations, and prepare an Academic Accommodation Letter for faculty. To get started, or to re-initiate services, please visit oae.stanford.edu.

If you already have an Academic Accommodation Letter, we invite you to share your letter with us. Academic Accommodation Letters should be shared at the earliest possible opportunity so we may partner with you and OAE to identify any barriers to access and inclusion that might be encountered in your experience of this course. Please use this form to submit your OAE letter to the course staff.

Honor Code Policy

Please see our Honor Code page for more information about the Stanford Honor Code and how it applies in CS106B.

Exams

There will be two exams in CS106B, one midterm exam and a final exam. Both exams are traditional in-person pencil-and-paper exams.

  • The midterm exam will be held from 7:00PM - 10:00PM Pacific time on Monday, February 10th.

  • The final exam will be held from 8:30AM - 11:30AM Pacific time on Monday, March 17th.

CGOE students: you are welcome to join us for the exams in-person if you are in the area. Otherwise, we will send a copy of the exam to your designated exam monitor. You will then be able to start the exam any time in the 24 hours leading up to the regular exam start time. So, for example, you could start the midterm exam any time between 7:00PM on Sunday, February 9th, Pacific time, and 7:00PM on Monday, February 10th, Pacific time.

If you have a conflict with the midterm exam time, please contact the course staff at least two weeks before the exam start date. We will not offer alternate final exams except for students with documented OAE accommodations.

Withdraw / Incomplete Policy

If a serious emergency arises after the course withdrawal deadline and you cannot complete the work in this course, you may contact Keith – not the head TA and not your section leader – to request an incomplete. We reserve incompletes for emergencies, so we do not grant incomplete grades for poor performance on the assignments or exams, nor do we offer incompletes for busy work schedules. Withdrawing is the appropriate option in those circumstances.

In order to be eligible for an incomplete, University policy says you must have completed a “substantial” part of the course work in “satisfactory” fashion. This means that incompletes are appropriate for serious medical or family emergencies that occur late in the quarter, beyond the point in which it would be possible to withdraw from the course, and which prevent you from completing the course despite having done well up to that point.

Grading

Overall, your grade for this course will be determined as follows. We will compute a raw score in two ways:

  • 40% Programming Assignments
  • 20% Midterm Exam
  • 30% Final Exam
  • 5% Section Participation
  • 5% Lecture Participation

We will then assign letter grades as follows. We first determine a grading curve over raw scores to assign initial grades. Except as noted below, we never assign grades that are lower than the decile of your raw score; for example, a 90% will never map to anything lower than an A-. There are three exceptions to this rule:

  • If you have more than one unexcused section absence, your maximum letter grade is capped at an A-.
  • If your performance on the assignments or your composite exam score does not represent passing work, you will receive a non-passing grade. (The numbers denoting “passing work” are set at the discretion of the instructor. We will likely use 60% as a cutoff for passing work for programming assignments and 50% as a cutoff for passing work for exams, subject to change.)
  • A+ grades are given rarely in CS106B and are awarded at the discretion of the instructor. There is no minimum raw score that guarantees an A+ grade.

Your final grade will be determined solely as mentioned above. We do not offer any make-up work.

Force Majeure

A note from the Center for Teaching and Learning:

Stanford as an institution is committed to the highest quality education, and as your teaching team, our first priority is to uphold your educational experience. To that end we are committed to following the syllabus as written here, including through short or long-term disruptions, such as public health emergencies, natural disasters, or protests and demonstrations. However, there may be extenuating circumstances that necessitate some changes. Should adjustments be necessary we will communicate clearly and promptly to ensure you understand the expectations and are positioned for successful learning.