CS 3100: Program Design and Implementation II
Lecture 39: Final Review
©2026 Jonathan Bell, CC-BY-SA
This deck reflects one section’s final
Final exam structure and topics can differ by instructor. What follows is specific to Prof. Bell’s section—other sections should follow their instructor’s guidance.
Before We Start: Assignment Reminders
GA2: Feature Buffet — due TONIGHT at 23:59. Process over product. A well-documented partial feature with meaningful PRs, design evolution, and thoughtful reflection scores higher than a complete feature with no documentation. Submit what you have.
GA3: Final Report — due Monday April 20 at 23:59. This is your team's final submission: demo video, final reflection, sustainability assessment, and individual reflections. The reflection questions must be in your own words (not AI-generated). Start the video and reflections this weekend — don't leave it to Monday.
Final Exam: What to Expect
| Details | |
|---|---|
| When | April 22, 1:00–3:00 PM |
| Where | West Village F 020 |
| Format | 25 multiple choice + 3 open-ended case studies |
| Coverage | Cumulative (L1–L36), emphasis on material since Exam 2 (L23–L36) |
| What to bring | Just a pen or pencil. No notes, no devices. |
Multiple choice: Same style as Exam 1 and Exam 2. One best answer. Designed to test understanding, not memorization — you won't need to know exact API signatures.
Case studies: Extended scenarios (like the practice exam). You read code, analyze designs, propose improvements. Partial credit for reasoning — show your thinking.
Parsons problems: Some questions give you scrambled lines of code and ask you to put them in the correct order. You don't need to write code from scratch.
Warm-Up: Where Do You Need Help?
Open Poll Everywhere.
Practice Exam Walkthrough
Let's work through a few problems together. These are representative of the kinds of reasoning the exam tests.
Strategy: For multiple choice, eliminate wrong answers first. For case studies, name the concept before applying it — "this is a coupling problem" or "this violates LSP" — then explain why.
Example: The Race Condition (Practice Q15)
private int deviceCount = 0;
public void registerDevice() { deviceCount++; }
// 10 threads each call registerDevice() once
deviceCount++ is three operations: read → increment → write.
| Step | Thread A | Thread B | deviceCount |
|---|---|---|---|
| 1 | reads 3 | 3 | |
| 2 | reads 3 | 3 | |
| 3 | writes 4 | 4 | |
| 4 | writes 4 | 4 (not 5!) |
Answer: D. Two threads read the same stale value → one increment is lost. Fix: AtomicInteger or synchronized.
Example: The Latency Budget (Practice Q22)
A profile shows: hub computation 5ms, 15 sequential Zigbee commands 3000ms, state update 2ms, network round-trip 50ms. A developer proposes optimizing hub computation from O(n) to O(log n).
| Component | Time | % of total |
|---|---|---|
| Hub computation | 5ms | 0.16% |
| Zigbee commands | 3000ms | 98.1% |
| State update | 2ms | 0.07% |
| Network round-trip | 50ms | 1.64% |
Answer: D. Zigbee commands dominate at 98%. Optimizing 5ms → 2ms saves 3ms out of 3057ms. The developer is optimizing the wrong thing. Profile before you optimize (L34).
Example: Case Study Approach (Practice CS1, Part D)
"Explain why the MVVM ViewModel is more testable than the MVC Controller, using the terms observability and controllability."
Template for answering case study questions:
- Name the concept: "Testability requires observability and controllability (L16)."
- Define it briefly: "Observability = can I see the output? Controllability = can I set the inputs?"
- Apply it: "The ViewModel exposes
servingsProperty()(controllable — set it to any value) andgetFormattedIngredients()(observable — read the result). No JavaFX needed." - Contrast: "The MVC Controller requires a running JavaFX Application Thread to access
@FXMLfields — low controllability, low observability."
On the exam: Name the concept → define it → apply it → contrast if asked. Partial credit comes from the first two even if you get the application wrong.
Your Questions
What do you want to go over?
Ask about specific practice problems, concepts, or exam strategy.
Course Retrospective: Help Us Build Next Year's Version
This was the first semester of CS 3100. Nearly everything was new — lectures, labs, assignments, tools. We want to tell you what we're considering changing, and hear what you think.
This is not hypothetical. We will use your input to decide what changes for next year. The end-of-semester survey gives us data. This conversation gives us context.
Ideas We're Considering — React to These
| What we might change | Why we're considering it | What we'd lose |
|---|---|---|
| Make A2–A5 pair-optional (work alone or with a partner) | Solo assignments are isolating; pair work builds collaboration skills earlier | Individual accountability — harder to ensure both partners learn |
| Start the group project 2 weeks earlier | Teams felt rushed; more time for design sprint and iteration | Something else gets cut or compressed — what? |
| Rework Labs 1–3 to better prepare for assignments | Too many students hit avoidable issues (.Java vs .java, project structure, tooling) | Current lab content (polymorphism exploration, dev toolkit) |
| Add a "checkpoint" system for individual assignments | Catch struggling students earlier; provide feedback before final submission | Grading load increases; may feel like micromanagement |
| Reduce the number of individual assignments from 5 to 4 | Free up a week for the group project or for a deeper architecture exercise | Less individual practice before team work |
What Else Should Change?
Open floor: what worked, what didn't, what should we add, what should we cut?
Some prompts if you're not sure where to start:
- What was the most useful lab? The least useful?
- Was there a lecture that clicked — or one that felt like wasted time?
- How did the AI policy progression (restricted → structured → encouraged) work for you?
- Was the CookYourBooks domain interesting enough to sustain 5 assignments?
- What do you wish we'd told you in Week 1?
Final Poll: The Semester in Review
Open Poll Everywhere. Last time this semester.
Q1: What was the single most valuable thing you learned in CS 3100? (Word cloud — type one thing)
Q2: If you could go back to Week 1, what advice would you give yourself? (Open response)
Q3: Would you recommend CS 3100 to a friend?
- Absolutely — one of the best CS courses I've taken
- Yes, with caveats — good content but [something] needs work
- Neutral — it was fine
- Probably not — I didn't get much out of it
Thank you.
You built software that works. You learned to think about software that lasts.
That's software engineering.
Good luck on the final. You're ready.
End-of-semester survey: please complete it — your feedback builds next year's course. Please consider completing TRACE, too.