Welcome to CS101B!

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.

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 CS101B. 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.

Websites and Technology

The main CS101B website is where you are right now, cs101b.stickmind.com. We have links to a bunch of other tools here. Here’s the quick rundown:

  • Our main course website cs101b.stickmind.com is the main hub for course information. It contains links to everything you’ll need.

  • You will need to download and install Visual Studio Code to complete the coding assignments.

Prerequisites

CS101B assumes that you have a familiarity with programming at the level of CS101A or the AP Computer Science exam.

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 CS101L instead of CS101B.

Lectures

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.)

Discussion Sections

The section materials for each week consist of a set of problems for further practice with recent lecture topics. You don’t need to have understood everything in lecture perfectly, but your section leader won’t be able to effectively guide you and the other students in your section through the problems unless everyone is at least caught up on viewing. Solutions to the section exercsies will be added under the webite “Sections” tab at the end of the week, for your use as assignment code templates or exam studying.

Readings

The required reading for this course is Eric Roberts’ Programming Abstractions in C++.

Assignments

Programming is a skill best learned by doing, and the programming assignments in CS101B form the central skill development part of your experience in the course. We have a great set of assignments planned that we hope you will find fun, challenging, illuminating, and rewarding. 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.

Students self-report spending between 10 and 20 hours on each assignment. If you find yourself heading towards the upper end of that range for an assignment, please reach out to course staff for tips. Our workload is challenging because we want to foster the most growth possible for you in our 10 weeks together, but we do want the total hours to stay within reason for a 5-unit course and are happy to work with you towards that goal. In CS101B, we write programs in the C++ language and use the VS Code IDE for editing, compiling, and debugging.