CS 61A: Structure and Interpretation of Computer Programs

Spring 2020
Instructor: John DeNero
MWF 2:10-3:00 in Wheeler 150

Friday, April 3
  • Homework 6 due Friday 4/3 @ 11:59pm.
  • Lab 10 due Thursday 4/9 @ 11:59pm.
  • Homework 7 due Friday 4/10 @ 11:59pm.
  • There are office hours on Friday now.
  • Friday 4/3 Lecture Q&A session cancelled.
Wednesday, April 1
  • Cats Composition Revisions due Thursday 4/2 @ 11:59pm.
  • Lab 9 due Thursday 4/2 @ 11:59pm.
  • Homework 6 due Friday 4/3 @ 11:59pm.
  • Office hours: make an appointment or join the drop-in queue during drop-in online office hours times to ask questions.
  • Lecture Q&A session on Zoom MWF 7:30pm-8:15pm.
  • All students will receive discussion attendance credit for the remaining weeks of the semester.
  • "Optional" lecture content will not appear in lab, discussion, homework, projects, or exams.
Monday, March 30
  • Cats Composition Revisions due Thursday 4/2 @ 11:59pm.
  • Lab 9 due Thursday 4/2 @ 11:59pm.

  • Homework 6 due Friday 4/3 @ 11:59pm.

    • Any office hour time can be used for homework questions, lab questions, lecture questions, or anything else.
    • Includes a mid-semester survey.
  • Lecture Q&A session on Zoom MWF 7:30pm-8:15pm will replace instructor office hours.

    • Lecture videos will be posted by 2pm.
    • You can ask questions live during the Q&A session; some Piazza questions may be answered as well.
    • These sessions will be recorded, uploaded to YouTube, and added to the lecture's playlist (by 9pm-ish).
  • Some lecture content will not appear in lab, discussion, homework, projects, or exams.

    • These lectures are marked as "optional" in the schedule.
    • Feel free to learn about these topics anyway!
    • Some optional problems will appear on homework assignments.
  • Midterm 2 is taking a while to score.

    • We hope to have it done this week, but next week is more likely.
Friday, March 20
  • No assignments over spring break.
  • Midterm 2 scores will not be released until after spring break.
  • If you took Midterm 2, please fill out the survey emailed to you by Monday 3/23 @ 11:59pm.
Week 9 Class Material
  • Lecture 23: Data Examples
  • Lecture 24: Users
  • Week 9 Readings:
  • Week 9 Resources
    Wednesday, March 18
    • Midterm 2 rules and proctoring information is posted (video).
    • An optional (but highly recommended) midterm 2 technology test will be conducted Thursday 3/19 6pm-6:15pm.

      • Your chance to make sure everything works.
      • Join the midterm 2 announcements live-stream (audio-only; @berkeley.edu login required) at 6pm.
      • Start a Loom Screen+Cam Full Desktop recording as described in the proctoring doc before 6:10pm.
      • Follow instructions posted on Piazza to download your test "exam" at 6:10pm.
      • Follow instructions posted on Piazza to submit your test "exam" and screen recording by 6:15pm.
    • Midterm 2 will be held Thursday 3/19 starting at 7:10pm.

      • Join the midterm 2 announcements live-stream (audio-only; @berkeley.edu login required) at 7pm.
      • Start a Loom Screen+Cam Full Desktop recording as described in the proctoring doc before 7:10pm.
      • Follow instructions posted on Piazza to download your exam at 7:10pm.
    • Midterm 2 format:

      • There will be 3 sections that last 22 minutes each with a 3 minute break in between each section: 7:10pm-7:32pm, 7:35pm-7:57pm, and 8pm-8:22pm.
      • For each part, you will download exam files that have a similar format to a lab or homework, including ok.
      • All questions will appear in .py files along with the doctests and templates for the exam.
      • You may submit each section as many times as you want (using python3 ok --submit) until the section stop time. We will score your final submission. Audio announcements over the live stream will warn you when time is about to expire.
      • You can only work on the current section. The second section will not be released until the first section is over, and the first section cannot be revised once the second section has begun.
    • If you cannot take the exam from home at the scheduled time or wish to be excused due to other complications, fill out the mt2 excuse request form by Thursday 3/19 @ 11am (extended; @berkeley.edu login required). All reviewed requests have been granted so far.
    Week 9 Class Material
  • Lecture 23: Data Examples
  • Lecture 24: Users
  • Week 9 Readings:
  • Week 9 Resources
    Monday, March 16
    • Office hours are online only and by appointment: oh.cs61a.org
    • Homework 5 due Tuesday 3/17 @ 11:59pm.

      • Your 2 lowest homework scores will be dropped, so you can skip this one without penalty.
    • Lab 8 will be released with solutions. You can look at them.

      • Your 3 lowest lab scores will be dropped, so you can skip this one without penalty.
    • Midterm 2 will be held Thursday 3/19 starting at 7:10pm.

      • Midterm 2 will be worth 25 points (instead of 50).
      • Watch announcements from Lectures 21 and 22 for details.
      • Information about proctoring will be shared soon. (We're still running some experiments.)
      • If you cannot take the exam from home at the scheduled time or wish to be excused due to other complications, fill out the mt2 excuse request form by Tuesday 3/17 @ 11:59pm (@berkeley.edu login required). All reviewed requests have been granted so far.
    Week 9 Class Material
  • Lecture 23: Data Examples
  • Lecture 24: Users
  • Week 9 Readings:
  • Week 9 Resources
    Friday, March 13
    • Online office hours by appointment on oh.cs61a.org.
    • Project 3 due Friday 3/13 @ 11:59pm.
    • Homework 5 due Tuesday 3/17 @ 11:59pm.

      • Your two lowest homework scores will be dropped.
    • Lab 8 will be released with solutions. You can look at them.
    • Midterm 2 will be held Thursday 3/19 starting at 7:10pm.

      • You do not need to be on campus.
      • You will need a computer capable of running Python 3 and Zoom.
      • You will need an internet connection.
      • If you cannot take the exam at the scheduled time, wish to be excused, or do not have a suitable computer, fill out the mt2 excuse request form by Tuesday 3/17 @ 11:59pm (@berkeley.edu login required).
      • Midterm 2 will be worth 25 points (instead of 50).
    • Midterm 2 content:

      • No environment diagrams or what-would-Python-display problems.
      • Covers all lecture material through Monday 3/9.
      • Wednesday 3/11 material (Efficiency) is excluded.
      • Friday 3/13 and Monday 3/16 lectures should help you review, so please watch them!
      • There will not be a lecture on Wednesday 3/18.
    • Midterm 2 format:

      • You'll write your answers in a .py file, just like a homework assignment.
      • You'll be able to check your work with Python and ok, but the provided tests will not be exhaustive.
      • You'll submit your work using ok --submit.
      • Each question will have a template for you to fill in, and you will be required to use the template, just like past exams.
      • Fill-in-the-blank problems from past exams are representative of the questions you will be asked.
      • We will provide midterm 1 and midterm 2 study guides.
      • You can use two pages of notes that you create yourself.
      • You'll be able to look up slides, examples, worksheets, & videos on cs61a.org.
      • You won't be allowed to use the rest of the internet or communicate with other people.
      • Announcements, questions, and clarifications will be posted to Piazza.
    Wednesday, March 11
    • CS 61A is now an online course:

      • In-person office hours still exist for now.
      • Online office hours by appointment on oh.cs61a.org.
      • No live discussion, lecture, or lab until live instruction at Cal resumes.
    • Project 3 is extended, due Friday 3/13 @ 11:59pm.

      • Earn an early submission bonus point for completing the project by Thursday 3/12.
    • Homework 5 due Tuesday 3/17 @ 11:59pm.
    • Midterm 2 will be held Thursday 3/19 starting at 7:10pm.

      • CS 61A's first open-interpreter, open-cs61a.org exam.
      • 25 points instead of 50; the final exam will increase from 75 points to 100.
      • No environment diagrams or what-would-Python-display problems.
      • Fill-in-the-blank problems from past exams are representative of the questions you will be asked.
      • You do not need to be on campus.
      • You will need a computer capable of running Python 3 and Zoom.
      • You will need an internet connection.
      • You may take the exam in Soda 271 if you do not have your own computer.
      • A request form for alternate times and exam excuse requests will be posted shortly.
    • Revise Cats Composition by Thursday 4/2 to earn back any lost points.
    Monday, March 9
    • CS 61A is now an online course:

      • Online office hours by appointment on oh.cs61a.org.
      • Online discussion information on Piazza.
      • Monday 3/9 will be the last live lecture until live instruction resumes.
    • Project 3 is due Thursday 3/12 @ 11:59pm.

      • Submit the checkpoint (Phases 1 & 2) by Monday 3/9.
      • Earn an early submission bonus point for completing the project by Wednesday 3/11.
      • No project party this week.
    • Homework 5 due Tuesday 3/17 @ 11:59pm.
    • Midterm 2 will be held Thursday 3/19 7pm-9pm.

      • You do not need to be on campus.
      • The format will change substantially from past semesters.
      • Further details have yet to be determined.
    Friday, February 21
    • Project 2 is due Thursday 2/27 @ 11:59pm.

      • Submit Phase 1 by Monday 2/24.
      • No homework is due next week. Just work on the project.
      • Earn an early submission bonus point for completing the project by Wednesday 2/26.
    • Guerrilla Section 12-2pm Saturday 2/22 in 273/275/277 Soda labs.

      • Topics: recursion, tree recursion, & lists.
    • Revise Hog Composition by Tuesday 3/3 to earn back any lost points.
    Wednesday, February 19
    • Homework 3 is due Thursday 2/20 @ 11:59pm.

      • Homework party Wednesday 2/19 6:30pm-8pm in 241 Cory.
    • Project 2 is due Thursday 2/27 @ 11:59pm.

      • Submit Phase 1 by Monday 2/24.
      • No homework is due next week. Just work on the project.
      • Earn an early submission bonus point for completing the project by Wednesday 2/26.
    • Guerrilla Section 12-2pm Saturday 2/22 in 273/275/277 Soda labs.

      • Topics: recursion, tree recursion, & lists.
    • Hog Composition scores released & open for revision.
    Monday, February 17
    • Lecture 11 is video-only.
    • If you want to attend lab this week, but your regular lab time is on Monday, come to any lab on Tuesday or Wednesday.
    • Midterm 1 (exam, solution) regrade requests are due Tuesday 2/18 @ 11:59pm (extended).
    • The (completely optional) Hog Contest (contest spec, leaderboard) ends Tuesday 2/18 @ 11:59pm (extended).
    • Homework 3 is due Thursday 2/20 @ 11:59pm.
    • Project 2 is due Thursday 2/27 @ 11:59pm.

      • Submit Phase 1 by Monday 2/24.
      • No homework is due next week. Just work on the project.
      • Earn an early submission bonus point for completing the project by Wednesday 2/26.
    • Guerrilla Section 12-2pm Saturday 2/22 in 273/275/277 Soda labs.

      • topics: Recursion, Tree Recursion, Lists
    Friday, February 14
    • Video-only lecture 11 will be posted Monday 2/17. Watch it before lab next week.
    • Midterm 1 (exam, solution) regrade requests are due Tuesday 2/18 @ 11:59pm (extended).
    • The (completely optional) Hog Contest (contest spec, leaderboard) ends Tuesday 2/18 @ 11:59pm (extended).
    • Homework 3 is due Thursday 2/20 @ 11:59pm.
    Wednesday, February 12
    • The Midterm 1 exam and solution are posted.

      • You should have received an email from Gradescope with your scored exam.
      • Regrade requests are due Tuesday 2/18 @ 11:59pm (extended).
    • The (completely optional) Hog Contest (contest spec, leaderboard) ends Tuesday 2/18 @ 11:59pm (extended).
    • Discussion sections do meet this week.
    • Sign up starting Wednesday 2/12 for weekly small-group mentoring sections organized by CS Mentors.

      • You can enroll in one P/NP unit if you sign up on Wednesday 2/12.
    Friday, February 7
    • Guerrilla Section 11am-1pm Saturday 2/8 in 271/273/275 Soda labs.
    • Midterm 1 is 8pm-10pm Monday 2/10. (No lecture that day.)

      • We will provide scratch paper and the midterm 1 study guide.
      • You can bring a hand-written sheet of notes (front and back).
      • See the resources page for past midterms and other practice problems.
      • See Piazza pinned posts about HKN/CSM review sessions Friday 12/7 & Saturday 12/8.
      • If you have a class conflict, please fill out this form by Friday 2/7 @ 11:59pm.
      • Main topics: calls, defs, assignment, control (if & while), higher-order functions, environments.
      • Other stuff to know: self-reference (e.g., Hog commentary), logical operators (and & or), lambdas.
    • No lab next week.
    • The (completely optional) Hog Contest (contest spec, leaderboard) ends Monday 2/17 @ 11:59pm.
    • Sign-ups for weekly small-group mentoring sections organized by CS Mentors will open Wednesday 2/12.

      • You can get a unit if you sign up on Wednesday
    Wednesday, February 5
    • The Hog project is due Thursday 2/6 @ 11:59pm.

      • Complete the whole project by Wednesday 2/5 to earn an early submission bonus point.
      • If you are struggling to find a project partner fill out: links.cs61a.org/hog-partner
    • Homework 2 is due Thursday 2/6 @ 11:59pm.
    • Guerrilla Section 11am-1pm Saturday 2/8 in 271/273/275 Soda labs.
    • Midterm 1 is 8pm-10pm Monday 2/10. (No lecture that day.)

      • We will provide scratch paper and the midterm 1 study guide.
      • See the resources page for past exams.
      • Covers material through Monday 2/3. (Today is an extended example; Friday is review.)
      • Fa19 midterm 1 (solutions) covers the same topics as this semester's midterm.
      • If you have a class conflict, please fill out this form by Friday 2/7 @ 11:59pm.
    • No lab next week.
    • The (completely optional) Hog Contest is released!

      • See the contest spec to participate.
      • The leaderboard will be updated regularly.
      • The contest closes on Monday 2/17 @ 11:59pm.
      • You can participate as an individual or with a partner.
    Monday, February 3
    • The Hog project is due Thursday 2/6 @ 11:59pm.

      • Checkpoint 1 (Phase 1 out of 3) is due Monday 2/3 @ 11:59pm. Solve this part by yourself.
      • You can work with a partner on Phases 2 & 3 once you have submitted Phase 1 on your own.
      • Complete the whole project by Wednesday 2/5 to earn an early submission bonus point.
      • If you are struggling to find a project partner fill out: links.cs61a.org/hog-partner
    • Project party 6:30pm-8pm Monday 2/3 in 241/247/237 Cory.

      • We will prioritize checkpoint 1 problems (#1-5b)
      • If you are working on 5a/5b, go to 247 Cory instead
    • Homework 2 is due Thursday 2/6 @ 11:59pm.
    • Guerrilla Section 11am-1pm Saturday, 2/8 in 271/273/275 Soda labs. See Piazza for details.
    • Midterm 1 is 8pm-10pm Monday 2/10. (No lecture that day.)

    • Discussing problems is encouraged, but sharing solutions is not allowed.
    Friday, January 31
    • The Hog project is due Thursday 2/6 @ 11:59pm.

      • Checkpoint 1 (Phase 1 out of 3) is due Monday 2/3 @ 11:59pm. Solve this part by yourself.
      • You can work with a partner on Phases 2 & 3 once you have submitted Phase 1 on your own.
      • Complete the whole project by Wednesday 2/5 to earn an early submission bonus point.
      • On Monday 1/27, some test files were fixed. Make sure you have the latest versions of tests/10.py, tests/11.py, and calc.py.
    • Homework 2 is due Thursday 2/6 @ 11:59pm.
    • Midterm 1 is 8pm-10pm Monday 2/10. (No lecture that day.)
    Wednesday, January 29
    • Homework 1 is due Thursday 1/30.
    • The Hog project is due Thursday 2/6 @ 11:59pm.

      • Checkpoint 1 (Phase 1 out of 3) is due Monday 2/3 @ 11:59pm. Solve this part by yourself.
      • You can work with a partner on Phases 2 & 3 once you have submitted Phase 1 on your own.
      • Complete the whole project by Wednesday 2/5 to earn an early submission bonus point.
      • On Monday, some test files were fixed. Make sure you have the latest versions of tests/10.py, tests/11.py, and calc.py.
    • There are many external announcements on Piazza.
    • Come to office hours for help. No appointment necessary.
    Monday, January 27
    • Watch videos through EdX or YouTube
    • Attend lab this week and finish the lab assignment during your lab section.
    • Homework 1 is due Thursday 1/30.

      • Homework party 6:30pm-8pm Monday 1/27 in 241 Cory Hall
      • More drop-in office hours will be posted shortly.
    • The Hog project is due Thursday 2/6 @ 11:59pm.

      • Checkpoint 1 (Phase 1 out of 3) is due Monday 2/3 @ 11:59pm. Solve this part by yourself.
      • You can work with a partner on Phases 2 & 3 once you have submitted Phase 1 on your own.
      • Complete the whole project by Wednesday 2/5 to earn an early submission bonus point.
    Friday, January 24
    • The first (Wed 1/22) and second (Fri 1/24) lectures will be held 2:10pm-3pm in Zellerbach Hall.
    • Lecture content appears on cs61a.org

      • Videos are posted before live lecture.
      • Slides and examples are also posted before lecture.
    • Lab 0 is posted. Try to finish it before coming to lab section next week (Monday-Wednesday).

      • Drop-in office hours to help you 12pm-2pm Friday 1/24 in 380 Soda.
      • If you don't finish beforehand, you can get help in lab next week.
    • Homework 1 is due Thursday 1/30.
    Wednesday, January 22
    • Welcome to CS 61A!
    • Join Piazza for announcements and answers to your questions.
    • The first (Wed 1/22) and second (Fri 1/24) lectures will be held 2:10pm-3pm in Zellerbach Hall.
    • Sign up online for lab and discussion sections.
    • Discussion starts Wednesday 1/22.
    • The Fall 2019 website has moved to fa19.cs61a.org.
    • Lab 0 is posted. Try to finish it before coming to lab section next week (Monday-Wednesday).

      • Drop-in office hours to help you 12pm-2pm Friday 1/24 in 380 Soda.
      • If you don't finish beforehand, you can get help in lab next week.
    • Office Hours:

      • John DeNero's office hours start next Monday 1/27. His weekly office hours are 3:15-4:30 on Monday and Wednesday in 781 Soda.
      • Course staff office hours will begin next Monday 1/27. The schedule will be posted soon.
    Tuesday, January 21
    • Welcome to CS 61A!
    • Join Piazza for announcements and answers to your questions.
    • The first (Wed 1/22) and second (Fri 1/24) lectures will be held 2:10pm-3pm in Zellerbach Hall.
    • Sign up online for lab and discussion sections.
    • There is no lab on Tuesday 1/21 or Wednesday 1/22.
    • Discussion starts Wednesday 1/22.
    • The Fall 2019 website has moved to fa19.cs61a.org.
    Week Date Lecture Textbook Lab and Discussion Links Homework & Project
    1 Mon
    1/20
    Lab 00: Getting Started
    Fri 1/31
    Wed
    1/22
    Functions
    Disc 00: Getting Started
    Fri
    1/24
    Names
    HW 01
    Thu 1/30
    2 Mon
    1/27
    Control
    Lab 01: Variables & Functions, Control
    Fri 1/31
    Hog
    Thu 2/6
    Wed
    1/29
    Higher-Order Functions
    Disc 01: Control, Environment Diagrams
    Fri
    1/31
    Environments
    HW 02
    Thu 2/6
    3 Mon
    2/3
    Iteration
    Lab 02: Higher-Order Functions, Lambda Expressions, Self Reference
    Fri 2/7
    Wed
    2/5
    Design
    Disc 02: Higher-Order Functions, Self Reference Hog Contest
    Tue 2/18
    Fri
    2/7
    Function Examples
    Guerrilla 00: Higher-Order Functions, Environment Diagrams, Control
    4 Mon
    2/10
    Midterm 1 8pm-10pm
    Wed
    2/12
    Recursion
    Disc 03: Recursion HW 03
    Thu 2/20
    Fri
    2/14
    Tree Recursion
    5 Mon
    2/17
    Containers
    Lab 04: Recursion, Tree Recursion
    Fri 2/21
    CATS
    Thu 2/27
    Wed
    2/19
    Data Abstraction
    Disc 04: Python Lists, Tree Recursion
    Fri
    2/21
    Trees
    Guerrilla 01: Python Lists, Recursion, Tree Recursion
    6 Mon
    2/24
    Mutable Values
    Lab 05: Python Lists, Data Abstraction, Trees
    Fri 2/28
    Wed
    2/26
    Mutable Functions
    Disc 05: Data Abstraction, Trees, Mutability HW 04
    Thu 3/5
    Fri
    2/28
    Iterators
    7 Mon
    3/2
    Objects
    Lab 06: Nonlocal, Iterators & Generators
    Fri 3/6
    Ants
    Fri 3/13
    Wed
    3/4
    Inheritance
    Disc 06: Nonlocal, Iterators & Generators
    Fri
    3/6
    Representation
    Guerrilla 02: Data Abstraction, Trees, Nonlocal, Iterators & Generators HW 05
    Tue 3/17
    8 Mon
    3/9
    Composition
    Lab 07: Linked Lists, Mutable Trees, Object-Oriented Programming
    Fri 3/13
    Wed
    3/11
    Efficiency (optional)
    Disc 07: Object-Oriented Programming, Linked Lists
    Fri
    3/13
    Decomposition
    Supplemental Disc 08: Efficiency
    Guerrilla 03: Linked Lists, Object-Oriented Programming
    9 Mon
    3/16
    Data Examples
    Lab 08: Midterm Review
    Fri 3/20
    Wed
    3/18
    No Lecture: Midterm 2 is next Day
    Thu
    3/19
    Midterm 2 7pm-9pm
    Fri
    3/20
    Users
    10 Mon
    3/23
    No Lecture: Spring Break
    Wed
    3/25
    No Lecture: Spring Break
    Fri
    3/27
    No Lecture: Spring Break HW 06
    Fri 4/3
    11 Mon
    3/30
    Scheme
    Lab 09: Scheme, Scheme Lists
    Thu 4/2
    Wed
    4/1
    Exceptions (optional)
    Disc 09: Scheme
    Fri
    4/3
    Calculator
    HW 07
    Fri 4/10
    12 Mon
    4/6
    Interpreters Lab 10: Interpreters
    Thu 4/9
    Scheme
    Tue 4/21
    Wed
    4/8
    Tail Calls (optional) Disc 10: Interpreters, Tail Recursion
    Fri
    4/10
    Macros (optional)
    Guerrilla 04: Scheme, Tail Recursion, Interpreters HW 08
    Fri 4/17
    13 Mon
    4/13
    Streams (optional)
    Lab 11: Macros
    Thu 4/16
    Wed
    4/15
    Declarative Programming Disc 11: Streams, Macros
    Fri
    4/17
    Tables HW 09
    Fri 4/24
    14 Mon
    4/20
    Aggregation Lab 12: Streams, SQL
    Thu 4/23
    Wed
    4/22
    Databases (optional) Disc 12: SQL
    Fri
    4/24
    Distributed Data (optional)
    Guerrilla 05: Streams, Macros, SQL HW 10
    Fri 5/1
    15 Mon
    4/27
    Natural Language (optional)
    Lab 13: Final Review
    Thu 4/30
    Wed
    4/29
    Final Examples
    Fri
    5/1
    Conclusion
    HW 11
    Fri 5/8