1 of 29

CS61B, 2022

Lecture 37: Software Engineering IV

  • Software Engineering Engineering

2 of 29

61B: But One of Many Possibilties

We’re now mostly done with 61B!

Today, we’ll be reflecting on 61B itself.

  • How was it designed?
  • What did people think?
  • What works about the class? And what doesn’t?
  • What is the broader system in which 61B is embedded?
  • What else could 61B (and all education) be?

Then time permitting, I’d be happy to talk about the GSI/GSR/Postdoc strike.

3 of 29

61B Design Constraints

As a professor, I have more or less total control over the course.

  • We could have no exams.
  • We could have no labs.
  • We could have no theory assignments.
  • We could have no deadlines for assignments.
  • We could have no programming assignments where we actually run code.
    • Dijkstra was a famous proponent of this approach (see end of this).
  • All assignments could be partner/group assignments, or none of them.
  • Exams could involve partners (have you done this in a class you’ve taken).
  • It could be taught in C++, Kotlin, Python, OCaml, etc.

*Technically, I’d have to go through COCI to make some of these changes.

4 of 29

Other 61Bs

61B has been taught since ~Spring 1994.

  • Before that, it was CS60C, which goes back to at least 1988.

In modern times there have been 4 varieties of 61B:

  • Hilfinger: 4 extremely long real world projects that are somewhat based on data structures material.
  • Hug: 1 (or 2) long real world project that is somewhat based on data structures material. Remaining material ties in tightly to lectures.
  • 61BL: Lab based class that focuses heavily on data structures, but with one large real world project (Gitlet).
  • Shewchuk / Yelick (extinct): Focus on implementing data structures. No large real world project.

5 of 29

61B Versions 1.0, 2.0, 3.0

6 of 29

61B 1.0

Gitlet was first offered in the Spring 2015 offering of 61B.

  • My first solo offering of the class.
  • Projects had significant authorship from students.
    • Project 0 - Bomb Checkers (me, but implemented by Jimmy Lee).
    • Project 1 - ngordnet (me).
    • Project 2 - Gitlet (Joey Moghadam).
    • Project 3 - Fun with Tries (me, adapted from my old Princeton HWs).
  • Joey also used the project as one of his assignments in Summer 2015.

Spring/summer 2015 Gitlet was way too hard.

  • No testing provided.
  • No tips on persistence.

7 of 29

61B 2.0

CS61B Version 2 (Spring 2016, 2017)

  • Fall 2014/Spring 2015 observation: Hated that students had to split time between the core data structures content and a huge project that wasn’t related to that content.
  • Decided to have the messy real world project due right before data structures:
    • 2016: Build a text editor.
    • 2017: Create software for manipulating text databases.

8 of 29

The Roundtable

Held a roundtable with 12 students from each quartile to discuss their experience with The Project. Roughly:

  • Top quartile: Mostly loved it, no big deal.
  • Second quartile: It was really hard, but very rewarding.
  • Third quartile: Spent every waking hour thinking about it, managed to just barely make it. Felt amazing when done, though totally exhausted.
  • Fourth quartile: Absolutely miserable experience, generally didn’t finish. Never felt like they made progress.

Decided to tone down The Project for 61B 3.0.

9 of 29

CS61B 3.0

CS61B Version 3 (Spring 2018, Spring 2019, Fall 2020)

  • Proj2: Highly scaffolded project called Bearmaps. Tied into course content tightly.
    • Implement a Kd-Tree. No public autograder.
    • Design and implement your own priority queue with an extra changePriority operation. No public autograder.
    • Use the PQ to implement A*.
    • Use the KdTree and A* to implement a Google Maps like application.
  • Proj3: Build your own world.
    • Open ended.

In Fall 2020, TAs felt that projects didn’t give students enough independence. Project 2 was basically just “implement these ideas from lecture.”

10 of 29

CS61B 3.5

CS61B Version 3.5 (Spring 2021)

  • Proj 0: 2048
    • Much harder algorithmic design challenge than old project 0.
  • Proj 2: Gitlet
  • Inherited from Paul Hilfiger’s 61B.
  • Much bigger, open ended project than BearMaps.
    • Lots of room for creativity.
    • Tons of existing support resources and a team of TAs who knew the project well.
    • Not much data structure design, less tied to course material.

11 of 29

Time Spent Programming on Gitlet

Only includes time in Intellij!

Statistics:

  • Mean: 32 hours.
  • Median: 31 hours.
  • 25%: 20 hours.
  • 75%: 42 hours.

12 of 29

Gitlet Comments

13 of 29

CS61B 3.6

CS61B Version 3.6 (Fall 2022)

  • Replaced Gitlet with Ngordnet.
  • Ngordnet is much more data structures focused.
    • 2A: Build a TimeSeries and build an NgramMap.
    • 2B: Build whatever you need to support additional functionality, including implementing a graph somehow.

GSIs voted ~3 to 1 to keep Ngordnet over Gitlet.

14 of 29

Questions About Course Design? (I’ll answer live)

  • Example: “Why 9 slip days?”
  • Ngordnet: Enjoyed designs.
  • Ngordnet or Gitlet, what is harder?
  • Slip days policy: Kind of mean. A lot of people suffered this agony at beginning of class that they didn’t realize they had unlimited slip days.
    • We didn’t QUITE have unlimited slip days, we did say no sometimes.
  • Projects in a group setting would be more fun and less stressful.
    • Want to make sure you can do the thing.
    • Optional pairing in 61A was good.
      • I’ll probably do this for project 2b.
      • Project 3 I’ll probably keep forcing you to interact (sans exceptions).

15 of 29

Questions About Course Design? (I’ll answer live)

  • Support from staff? More soon.
  • Really liked reviewing code in a lab (peer review for project 1A).
    • Would be fun to do this more.
    • It was 2 or 3 weeks after.
  • Devastating idea: In project 3, I write code. Partner writes code. Having to explain code to each other. Encouraging more of this might be good.
  • (chat I’ll get to you in a sec)

16 of 29

List of Changes from Each Semester (in case you’re curious)

  • Sp15 reflections: Link
  • Sp16 reflections: Link
  • Sp17 reflections: Link
  • Sp18 reflections: Link
  • Sp19 reflections: Link
  • Fa20 reflections: Link
  • Sp21 reflections: Link

17 of 29

Reflections on Workload

18 of 29

Workload in Theory

Berkeley recommends that a 4 unit class takes 12 hours per week. For us, that’s:

  • 1 hour discussion.
  • 2 hours lab.
  • 3 hours lecture.
  • 6 hours everything else:
    • Check-in exercises / studying.
    • Surveys.
    • HW/projects.

Total time spent programming should be ~6 hours per week [~2 lab, ~4 everything else] on average.

19 of 29

Time Spent Per Week in IntelliJ

Statistics:

  • Mean: 4.6 hours.
  • Median: 4.3 hours.
  • 25%: 3.2 hours.
  • 75%: 6 hours.

Proj0

Proj1

Proj1

Mid

Gitlet

Seems like we’re actually doing OK? (except Gitlet)

20 of 29

Any Reflections on Workload?

This is a highly biased sample since it’s the people who showed up on the Monday of Thanksgiving, during a strike, but let’s discuss. Any particularly interesting moments you’d like to report?

  • Beginning was especially intense.
  • Whole thing was intense, but that’s OK.
    • Everytime I had a project or coding HW, spending more than 6 hours than that per week. 2 to 3 days per week on project 3. Last third of day working on project 3.
  • Like front loaded. Might be nice to have reminders that class if front loaded.
  • Like front loaded. Love to learn a lot of new stuff (data structures, algorithms).
  • Anxiety when a project drops. Have no idea how it will take me. Maybe some advance notice would be good.

21 of 29

The Role of Community

22 of 29

Formal and Informal Networks of Support

In a course, students benefit from both formal and informal networks of support.

  • Formal: Office hours, Ed, Discussion, Lab, Project 3 Partner, etc.
  • Informal: People you randomly talk to in a dorm, on the student run discord, etc.

I believe the ability to tap into these networks has a huge impact on success.

23 of 29

Reflection on the Project 3 Partnerships

What are some things you learned while working with a partner during project 3?

24 of 29

Reflection on Office Hours and Alternatives

Did anyone have the feeling of not being able to get help from staff? Did you resort to help from unofficial channels? Does this seem ok?

  • Tried to avoid having to make a gitbug or go to OH. Heard tales that it being hard to get help. Felt like I should be able to do it myself. Search / read Discord and search / read EdStem and lurk to glean details. This strategy worked.
  • Sometimes when at OH, feels like TAs are in a rush to get to next person. OK, but not ideal. Posted gitbugs on Ed, when posting local works, autograder doesn’t compile, feedback felt too coarse.
  • Office hours victim: Multiple time, put name on queue, waiting more than an hour, then OH ends. Feels bad. Gitbugs helps, generally worked. Friends were helpful.
  • Had trouble utilizing lab hours, felt like I was behind or needed time to digest spec. Able to collaborate a lot. More time talking about 2B than coding.

25 of 29

Reflection on Office Hours and Alternatives

Did anyone have the feeling of not being able to get help from staff? Did you resort to help from unofficial channels? Does this seem ok?

  • For gitbug, even though sometimes it would take 20 hours to get a reply, when it was answered, the answers were high quality. Appreciated going and digging into code rather than just some vague answer.
  • Office hours: When there and could get help, was usually super helpful. Sometimes on a queue, get lunch, come back.
  • For gitbugs, love TAs having access to repositories.

26 of 29

Anything Anyone Else Wants to Discuss?

  • Really liked midterm 2 when we had the design a data structure requisition. Super hard, would be nice to have more practice.
  • Felt midterm 1 had so little material.
  • Loved all of the discussion / lectures about design, especially for project 3. Encapsulation, hard barriers.
  • More time learning git.
  • Project specs sometimes, phrasing could be confusing. For example in Percolation saying you need a constant number of calls (i.e. could NEVER change).
  • Having discussions and labs, and you attend 1, so that you get to know the same set of people and you get to know them more than just hopping between sections. For example 61A, you were forced to know each other.

27 of 29

The GSI/GSR/Postdoc Strike

28 of 29

Disclaimer

I’m not part of the negotiations, so it is possible I might make mistakes.

29 of 29

Summary

  • Lowest paid 20-hour GSIs on campus make $2350/mo ($28k/year).
  • CS 20-hour GSR (researchers) make $40k or $48k depending if they get extra summer pay.
  • Union is (currently) asking ~$66k by 2026 for all GSIs and GSRs.

Keep in mind:

  • Many GSIs only teach 10 months (so $23k now, $55k in 2026).
  • Most GSIs also work 20+ hours doing research per week.
  • 20 hour GSRs do 40+ hours of research per week.