Friday, December 17, 2021

What we learned in CS222, Fall 2021 edition

Welcome back to the "What we learned in CS222" series. As part of the final exam in this course, students participate in a divergent thinking exercise in which we list off what we learned during the semester. Then, in a convergent exercise, each student gets a number of stickers with which to vote for the ones most important to them.

One thing that was a bit different this semester was that, in a fit of distraction, I forgot to set the timer. We came up with this list of 129 items in roughly half an hour, but it was only roughly timeboxed. Another first was that one student misunderstood the instructions, marking the sheets that were most important to him rather than the items. We all had a good laugh about this, but it does mean that his votes may not have actually ended up where he wanted them; some were off on the side clearly not marking a specific item, but others were near enough to text that they were indistinguishable from legitimate votes.

The other unique element this semester is the answer to the question you might have from looking at the list below: Who is Jack? Jack is a Computer Science student who was not in my class but had better attendance than several students who were. Jack was enrolled in a separate section of CS222, taught by one of my colleagues, so he was studying similar material. He had a class in the room immediately before my class, so he regularly would just stay sitting with his friends who stuck around for my class. It was the strangest thing: I've had plenty of students sign up for a class and not show up, but I've never had someone not sign up but come. Maybe someday he'll shed some more light on his experience attending both classes. The only time I asked him about it specifically was on the last day of class, after my students had presented their final projects. I asked him which section of the class had better projects. He thought a moment and told us about some of the visually compelling projects in the other section, which he thought were more impressive, but added that my students probably had better code. I'll take what I can get.

Without further ado, here is what the students said they learned.

Refactoring6
Team Coordination5
OO Design4
User stories4
OO Decomposition3
Clean Code Formatting3
TDD3
SRP3
Readability3
Git2
Code Review2
GUIs2
Whiteboard programming2
Jack2
Kembel's design thinking2
Software craftsmanship2
Testing with coverage1
Version control1
Pair programming1
Naming conventions1
APIs1
HTTP requests1
Debugging1
SMART goals1
Branching and merging1
CRC Cards1
IntelliJ IDEA1
Functional Decomposition1
Accessors & Mutators1
User experience (UX)1
Backlog1
ImageView1
Iterations1
View and model layer
JavaFX
Flutter
Web queries
Parsing
JSON Data
Waterfall
Methods & objects
Short methods
FIRST testing
Aliasing
Defensive copies
Deep copies
Scrum
Event-driven programming
Multithreading
Encapsulation
Dreyfus Model of Skill Acquisition
Copyright laws
Licensing
Human Success & Failure Modes
Rubber duck debugging
Pragmatic Programmer
RCM "Uncle Bob"
Retrospectives
Conditions of Satisfaction
Red-Green-Refactor
Acceptance testing
UI templating
Binding (UI)
"God" classes
Packages within project
Dependencies
Gradle
Java 16
Documentation
Environment replication (machine independence)
IDE
Principle of Least Astonishment
Comments
Commit messages
README files
Polymorphism
INheritance
Elegant code
Abstraction
High-level languages
Exposure of sensitive data
Leaky abstraction
API etiquette (user agents, frequency of use)
Testing protocols
Task Lists
Butter dish
Hyperlinks
GridPane
ScrollPane
HBoxes and VBoxes
ChoiceBox
Buttons
Desktop (class in Java)
Inner classes
Holub on Patterns
OO Road simulation
OO Bank example
Risk matrix
History of computing
When is a feature complete?
Machine Learning
Mearns Bux
Assignability of tasks
Try-catch (error handling)
IOExceptions
Stack traces
Stack overflow
Weak warnings
Compiler errors and warnings
Runtime errors
Edge cases
Test before commit
Interfaces
Engines
Run configurations
Class implementations
Abstract classes
Making stuff static
Equals and hashcode
Hashmaps
Depend on interfaces, not implementations
Don't program your own time API
DRY
Import optimization
IDE tools (e.g. format, extract method)
Functional programming
Presentations
Slides
power points

After we closed the discussion, a student pointed out that Clean Code itself was not listed. I had noticed that but didn't say anything. I suppose it's another indication that this was a semester unlike any other, which point foreshadows my upcoming reflection post.

No comments:

Post a Comment