Friday, December 9, 2022

What we learned in CS222 (Fall 2022 edition)

Regular readers will know what time it is: it's time for the next installment of What We Learned in CS222. As has been my recent custom, I moved this exercise from the final exam timeslot into the penultimate day of class, the final day of class being reserved for students' final presentations. We only had seven students in class this morning, which is less than half the enrollment but not far from what I've been getting the last several weeks.

I had them start by quickly making mind maps on the theme of programming. I only gave them three minutes to sketch them out, telling them afterward that it would be a great study exercise to compare your current map to the one made on the first day of class. The exercise was really to just prime the pump for them to answer the question, "What did you learn this semester?"

Here are the 71 responses, sorted by the number of votes earned at the end of the process. Each student had four votes, but either someone misunderstood the instruction or I lost a sticker in transit.

  • Clean Code (7)
  • TDD (6)
  • GitHub (3)
  • Code Review (3)
  • Agile fundamentals (1)
  • Version control (1)
  • User stories (1)
  • Model-View Separation (1)
  • Flutter + Dart (1)
  • Naming (1)
  • Requirements analysis (1)
  • Software architecture (1)
  • SRP
  • Acceptance testing
  • CRC cards
  • CI/CD
  • Pair programming
  • Mob programming
  • Using APIs
  • Using Android Studio / IDEs
  • Forking repositories
  • Feature branching
  • Committing in git
  • Commit messages
  • Pushing in git
  • Pulling in git
  • Licensing
  • API keys
  • Defensive programming
  • README.md
  • Pubspec.yaml
  • Achievements system
  • Pitching project ideas
  • Incremental development
  • Sprint
  • Project demos
  • Iterations
  • Breaking down epic stories
  • Emulators
  • Red-Green-Refactor
  • Comments
  • Test data files
  • Functions (especially parameters, in a Clean way)
  • Null safety
  • Async/Await
  • Stateful & Stateless widgets
  • DRY
  • gitignore
  • Reading package documentation
  • Using outside resources
  • Local saves
  • Save/Load features
  • Export/Import features
  • git commands
  • Dependencies
  • Project time management
  • File names
  • Simple, clear class names
  • Encapsulation
  • Software craftsmanship
  • Making UI buttons
  • Code side-effects
  • Delegating (in Software)
  • Delegating tasks
  • Wrappers
  • Polymorphism
  • Defensive copies
  • Text wrapping in a UI
  • Text wrapping in code
  • Test coverage
  • Non-programming skills

There are a few interesting things in this list. I was surprised that there was relatively little about Flutter and Dart in particular. I was glad to see it show up as a concept itself but more excited to see that a student recognized how very cool async and await are. Breaking down epic stories is important since just yesterday we did an in-class exercise where no one remembered that conditions of satisfaction are part of user stories, despite this being a recurring topic of the semester. Specific Clean Code ideas seem to be less represented here than in past years, more emphasis here being placed on technological issues of version control. Unfortunately, there is nothing funny in the list.

We found it easy to draw a line in the list and see that the top four items were selected by the community as the most important. I explained to them that these four will feature on the final exam, and it's up to them whether they want to share this information with their missing teammates or not. This elicited the expected nervous laughter.

No comments:

Post a Comment