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.
Refactoring | 6 |
Team Coordination | 5 |
OO Design | 4 |
User stories | 4 |
OO Decomposition | 3 |
Clean Code Formatting | 3 |
TDD | 3 |
SRP | 3 |
Readability | 3 |
Git | 2 |
Code Review | 2 |
GUIs | 2 |
Whiteboard programming | 2 |
Jack | 2 |
Kembel's design thinking | 2 |
Software craftsmanship | 2 |
Testing with coverage | 1 |
Version control | 1 |
Pair programming | 1 |
Naming conventions | 1 |
APIs | 1 |
HTTP requests | 1 |
Debugging | 1 |
SMART goals | 1 |
Branching and merging | 1 |
CRC Cards | 1 |
IntelliJ IDEA | 1 |
Functional Decomposition | 1 |
Accessors & Mutators | 1 |
User experience (UX) | 1 |
Backlog | 1 |
ImageView | 1 |
Iterations | 1 |
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