CS 70

Key Points

Class Format

  • Each week you'll have lesson material to go through at your own pace.
  • In class, you'll work on homework and check in with the professors.
  • During each class meeting, fill out a check in form to get credit for the day.
  • You may attend class on Zoom if it's best if you don't attend in person (e.g., if you have symptoms of illness).

Homework

  • Except for the first one, you'll have a partner for all homework assignments.
  • Each partnership will have one 24-hour extension to apply to a homework deadline.
  • We want you to support and learn from your classmates: be careful to preserve each other's learning processes.

Proficiency Checks

  • Each week there are four proficiency checks, each focused on a single learning objective.
  • Take proficiency checks in exam-like conditions.
  • There will be opportunities to retry proficiency checks where you did not demonstrate proficiency the first time.
  • During finals week there will be a final try at all remaining proficiency checks (with the possibility of partial credit).

Getting the Most Out of CS 70

  • We are here to help! Please reach out to the course staff—and to each other—early and often!

CS 70 Memory Diagrams

  • We use memory diagrams to help trace the correctness of C++ code.
  • In our diagrams, we draw a variable's
    • value "inside the box" since it exists at runtime.
    • name, type, and location "outside the box" because they are useful for tracing the code, but they are not explicitly represented in memory at runtime.
  • Our model abstracts away other details of specific computers (such as registers, the specific size of different numeric types, and the real naming conventions for memory slots) because those details vary from one computer to another, and are not helpful for modeling correctness.

C++ Guiding Principles

  • Programming languages are designed by particular people, for particular purposes, in particular contexts.
  • We discussed two principles that are important for explaining some of the design choices in C++ and let us reason about how the language behaves.
    • The Zero-Overhead Principle: Don't slow programs down “needlessly”.
      • Providing a lanuage feature should never slow down a program that doesn't use that feature.
      • Generally do things in the quickest possible way (even at the expense of safety or convenience).
    • The “Power to the People” Principle: Provide language features that allow expert programmers to do things in unsual ways.
      • Sometimes beginners accidentally use featues intended for experts!
  • Both of these features mean we should not ignore compiler warnings when it notices we're doing something questionable!

(When logged in, completion status appears here.)