CS61B, 2021
Lecture 37: Software Engineering IV ¡ñ Software Engineering Engineering
datastructur.es
61B: But One of Many Possibilties
We¡¯re now mostly done with 61B!
Today, as an experiment, 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?
datastructur.es
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.
datastructur.es
Questions About Course Design?
¡ñ Example: ¡°Why 6 slip days? I heard they had 15 last semester?¡±
¡ñ Why Gitlet, not BearMaps? [coming later]
¡ñ Why Ed? The Fall 2020 course staff voted for Ed. I think also the students
did.
¡ñ Why don¡¯t we have to implement hash tables and binary search trees
totally from scratch in the same way we did deques?
¡ð This has obvious synergy with exam studying.
¡ð In Fa20 (and some other semesters), we had implement a KdTree, and
implement A*, and implement a certain kind of PQ.
¡ð Idea: Projects and HWs we want you to do something totally new.
¡ð Idea 2: It¡¯s more exciting to build a system that does something
interesting.
¡ð Idea 3: More room to run into systems design issues (e.g. Gitlet byow)
datastructur.es
Questions About Course Design?
¡ñ Data Structures: Discrete math as a prereq.
¡ð Other classes at Berkeley like 70 has graphs.
¡ð It¡¯s hard for me to prove correctness of anything inductively.
Asymptotics are weird to do fully rigorously without recurrence
relations (sometimes).
¡ð 61B lets you see all this material
datastructur.es
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 (sp19-fa20): 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.
datastructur.es
61B Versions 1.0, 2.0, 3.0
datastructur.es
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.
datastructur.es
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.
datastructur.es
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.
datastructur.es
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.¡±
datastructur.es
CS61B 3.5
CS61B Version 3.5 (Spring 2021)
¡ñ Proj 0: 2048
¡ð Harder algorithmic design challenge than old project 0.
¡ñ Proj 2: Gitlet
¡ð 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.
¡ð We¡¯ll reflect more on it shortly.
datastructur.es
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
datastructur.es
Reflection on Gitlet
datastructur.es
Gitlet: Origins
Spring/summer 2015 Gitlet was way too hard.
¡ñ No testing provided.
¡ñ No tips on persistence.
datastructur.es
The Return of Gitlet
After Summer 2015, Gitlet laid dormant.
In Fall 2017: Paul Hilfinger tried out Gitlet.
¡ñ Has been offered every Summer and almost every Hilfinger semester since.
datastructur.es
Gitlet This Semester
In response to significant TA concern that scaffolded BearMaps was too ¡°paint by numbers¡±, I started revamping the sp15 Ngordnet.
¡ñ Insufficient time to get a project we felt good about.
¡ñ Gitlet had been so heavily supported…
datastructur.es
Time Spent Programming on Gitlet
Only includes time in Intellij!
Statistics:
¡ñ Mean: 32 hours.
¡ñ Median: 31 hours.
¡ñ 25%: 20 hours.
¡ñ 75%: 42 hours.
datastructur.es
Gitlet Comments
datastructur.es
Gitlet Comments
datastructur.es
Some Gitlet Comments
¡°this project crushed my entire soul i hate it. bUT now that it is over it was such a good learning experience omg like what the heCK WAS THAT omg¡±
¡°I am sad and I have to switch majors. I was in love with cs but now I hate it. I guess everybody changes, but it was sad for me to let go. Goodbye coding :(¡°
¡°While it was a horrible overall experience, I am grateful that I did (half) of Gitlet since I am now confident that I never want to work in SWE. I can’t believe people spend more time looking up how to do/use random crap in Java than actually thinking. Wild.¡±
¡°I just have never felt so stupid, but once I got it I felt good. I don’t think that’s healthy, but that’s the truth¡±
datastructur.es
Some Gitlet Comments
¡°I think this was an amazing project. I do think that when you first start it there are many students who would be too intimidated to start or may set them up for failure because the increase in difficulty from proj1 to proj2 was insane. I hated the project at first and it was very detrimental for my mental health in some aspects but i came out of it feeling so good about my skills.¡±
¡°I think after you finish gitlet, your confidence improves a lot (I didn’t think i would ever be able to code something like this) but initially, it was a painful experience. Once you get the hang of serializing stuff the design is probably the hardest part.¡±
datastructur.es
Some Gitlet Comments
¡°a project ABOUT git seems like a really shitty project when you first read the 60 page long spec (especially from someone who didn’t know how to use git)… but the creativity and building that goes into it makes a really rewarding experience. i loved it!! ¡°
¡°I just want to say that coming into college, I had never coded before. I was super daunted by just looking at the Gitlet spec when it was assigned and kept on pushing it off, but now I am proudly able to say that I have finished the project and it truly has given me a lot of confidence in my ability to code and think through lots of things at once.¡±
datastructur.es
What Would You Cut From Gitlet?
datastructur.es
What Would You Cut From Gitlet?
datastructur.es
Workload Overall
datastructur.es
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.
datastructur.es
Time Spent Per Week in IntelliJ
Statistics:
¡ñ ¡ñ ¡ñ ¡ñ
Mean: 4.6 hours. Median: 4.3 hours. 25%: 3.2 hours. 75%: 6 hours.
Seems like we¡¯re actually doing OK? (except Gitlet)
Proj0 Proj1 Mid Proj1
datastructur.es
Gitlet
The Role of Community
datastructur.es
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.
datastructur.es
Reflection on the Project 3 Partnerships
The first time I offered partnerships on a major project was Spring 2016.
¡ñ Figured it would be strictly less stressful for every partnership.
¡ñ However 7% of students were very dissatisfied.
What are some things you learned while working with a partner during project 3?
¡ñ Had no partner.
¡ñ If youw ant something done, do it yourself (bummer).
¡ñ We have different strengths.
¡ñ Other people don¡¯t stay up until 4 AM.
¡ñ People programming differently.
¡ñ Working in groups is hard.
¡ñ It is often hard to explain waht you¡¯re trying to do.
¡ñ Sticking to a schedule is good.
¡ñ Going over design with someone is good.
¡ñ People program at different paces.
¡ñ Programming in front of someone is harder than by yourself. ¡ñ
datastructur.es
Reflection on the Project 3 Partnerships
The first time I offered partnerships on a major project was Spring 2016.
¡ñ Figured it would be strictly less stressful for every partnership.
¡ñ However 7% of students were very dissatisfied.
What are some things you learned while working with a partner during project 3?
¡ñ Arguing for 3 hoursl eads to ocean ideas
¡ñ Feel compelled to share thoughts as thinking.
¡ñ Bett3er to have one commanding, other typing.
¡ñ Commenting is necessary.
¡ñ Hard to read som,eone els¡¯e scode (also your own code one month alter)
¡ñ Neither of us know how to use uintelliJ
¡ñ My spelling is bad.
¡ñ Merge conflicts are tricky. ¡ñ
datastructur.es
What makes a good teammate? (TA Tips)
¡ñ Communication.
¡ð Be upfront about what you can and cannot do.
¡ð Don¡¯t ghost your team!
¡ñ Respecting other people¡¯s ideas/contributions.
¡ð Avoid talking over other people.
¡ð Make compromises on your implementation.
¡ñ Acknowledgment and support.
¡ð Saying ¡°thank you¡± when someone else does good work can improve
morale.
¡ñ Managing implicit bias.
¡ð We all have implicit biases. Important to be aware of them and make sure we don¡¯t let them cause harm.
¡ñ Standing up for other team members when necessary.
datastructur.es
Harmful Behavior
7.5% of students reported seeing hurtful behavior or microaggressions.
¡ñ FWIW I don¡¯t like the term ¡°microaggression¡± as it implies malice.
¡ñ An emerging term is ¡°subtle acts of exclusion.¡± (Link)
datastructur.es
Examples of Subtle Acts of Exclusion from the Survey
¡ñ ¡°One time I went to OH and the tutor told me “Oh wow, you actually understand what I’m saying.” Not too sure how to feel about that since I’m a woman.¡±
¡ñ ¡°I have not experienced anything super explicit or egregious, but it is no secret that CS classes and spaces can be a bit of a boys’ club. I have felt talked down to or underestimated as a girl in CS spaces, usually from male peers who feel they know more than me or are more qualified.¡±
¡ñ ¡°A lot of boasting… like a lot of boasting by some people (this was particularly bad last semester in 16a since there was a group of students who would finish the lab in 20 minutes and then leave)¡±
datastructur.es
Examples of Subtle Acts of Exclusion from the Survey
¡ñ
¡°There was a person in the CS61B discord making inappropriate comments and jokes about harassment in EECS after a person shared their personal story about being harassed and stalked by a CS GSI. They made jokes about how it is okay or normal for people to become GSIs to “get girls,” and said “gotta respect your GSIs.” It felt like they were making a joke out of people’s sexual harassment stories. After being called out for being insensitive, they replied that people should take be able to jokes and called the person who called them out “ignorant.”¡±
¡°In [upper Div CS class] last semester, I was in a discussion with a female TA (PhD student) and male students would continuously ask if she was sure about her answer when she answered their questions and seemed to always doubt that she was answering correctly.¡±
¡°it was weird but other people called it out so i was glad to see that¡±
¡ñ
¡ñ
datastructur.es
… BTW, Why Are We Talking About This?
You may be wondering why we¡¯re talking about this in a highly technical
advanced data structures class. Two reasons:
¡ñ We¡¯re all citizens of the university. IMO, it is incumbent on us to do our part to make our community a good place for our fellow students.
¡ð Who better to discuss with this than me, your professor?
¡ñ As my GSI Allyson puts it ¡°A good programmer is not just someone who can solve any coding problem or ace any test. A good programmer is also someone that others want to work with!
datastructur.es
Quick Thought Experiment
You¡¯re in a project group with two male students, John and Michael, and a female student, Maria. You notice throughout the conversation that John directs all of his questions to Michael. When Maria suggests an idea for how to implement some task, John cuts her off and says ¡°Eh, I don¡¯t think that would work.¡± However, a few minutes later, when Michael suggests the same thing, John says ¡°Yeah, let¡¯s try that!¡±
What are some actions you could take in this situation?
datastructur.es
… And We¡¯re Done!
Next Friday we¡¯ll do more reflecting. Hope you found that fun!
datastructur.es