Skip to main content
CS 3100: Program Design and Implementation II - Software That Lasts Cover Image shows a technological landscape

Most software outlives the assumptions it was built on. Requirements evolve, teams change, and the world around your code shifts in ways you didn't anticipate. This course teaches you to write software that can adapt—code that remains understandable, modifiable, and valuable over its entire lifecycle. You'll learn to think beyond immediate correctness to consider sustainability in multiple dimensions: technical longevity, economic viability, and the broader impacts your software has on its users and society.

The assignments in this course center on CookYourBooks, a desktop application you'll build from domain model to polished GUI. It's real software—with messy requirements, design tradeoffs, and the need to coordinate with teammates. Midway through, you'll learn to leverage AI coding assistants while maintaining the judgment to know when they help and when they mislead. The work surfaces questions that matter beyond any single assignment:

  1. Why do some codebases become unmaintainable within months, while others remain flexible for decades?
  2. What does it mean for code to be "readable"—and why do experienced developers often disagree?
  3. How do you build software when the people paying for it want different things than the people using it?
  4. When does using an AI coding assistant make you more productive, and when does it waste your time or lead you astray?
  5. What separates high-functioning teams from groups where one person does all the work?
  6. How do you design software that works for users whose abilities and contexts differ from your own?
  7. When should you invest in more design upfront, and when should you just start coding?

Our Approach to AI

AI coding assistants can generate code quickly, but they cannot judge whether that code solves the right problem, integrates cleanly, or will be maintainable. We restrict AI tools early while you build foundational competence, then explicitly teach effective human-AI collaboration once you can critically evaluate generated code. Read our full AI policy →

This Week

View full schedule →

Monday, Jan 12

8:00 AM - 9:40 AM

Lab Section 05: Lab 2: Java Abstraction and Data Types

📍 WVH 210A

9:50 AM - 11:30 AM

Lab Section 06: Lab 2: Java Abstraction and Data Types

📍 WVH 210A

9:50 AM - 11:30 AM

Lab Section 07: Lab 2: Java Abstraction and Data Types

📍 WVH 210B

10:35 AM - 11:40 AM

11:45 AM - 1:25 PM

Lab Section 08: Lab 2: Java Abstraction and Data Types

📍 WVH 210A

11:45 AM - 1:25 PM

Lab Section 09: Lab 2: Java Abstraction and Data Types

📍 WVH 210B

11:45 AM - 1:25 PM

Lab Section 10: Lab 2: Java Abstraction and Data Types

📍 WVH 212

1:35 PM - 2:40 PM

3:25 PM - 5:05 PM

Lab Section 11: Lab 2: Java Abstraction and Data Types

📍 WVH 210A

3:25 PM - 5:05 PM

Lab Section 12: Lab 2: Java Abstraction and Data Types

📍 WVH 210B

3:25 PM - 5:05 PM

Lab Section 13: Lab 2: Java Abstraction and Data Types

📍 WVH 212

5:00 PM - 7:00 PM

Afrah OH

Office Hours

5:15 PM - 6:55 PM

Lab Section 14: Lab 2: Java Abstraction and Data Types

📍 WVH 210A

7:00 PM - 9:00 PM

Abhishek Tuteja ( Virtual)

Office Hours

8:00 PM - 10:00 PM

Pratham OH (Virtual)

Office Hours

9:00 PM - 11:00 PM

Avery Neuner

📍 Virtual

Office Hours

9:00 PM - 11:00 PM

Avery Neuner (Virtual)

Office Hours

10:00 PM - 12:00 AM

Ran Fukazawa (Virtual)

Office Hours

Tuesday, Jan 13

12:00 AM - 3:00 AM

Edward Chan (In-Person)

📍 Snell Library Group Study 130T

Office Hours

10:35 AM - 12:15 PM

Lab Section 04: Lab 2: Java Abstraction and Data Types

📍 M41 212

12:25 PM - 2:05 PM

Lab Section 01: Lab 2: Java Abstraction and Data Types

📍 M48 102

3:00 PM - 4:40 PM

Lab Section 02: Lab 2: Java Abstraction and Data Types

📍 M48 102

3:00 PM - 5:00 PM

Shivang Patel OH (Virtual)

Office Hours

3:30 PM - 5:30 PM

Manav Dhamani OH (virtual)

Office Hours

3:30 PM - 5:30 PM

Rohan Kumar OH (Virtual)

Office Hours

7:30 PM - 10:30 PM

Edward Chan (In-Person)

📍 Snell Library Group Study 130U

Office Hours

9:30 PM - 11:30 PM

Sam Schumacher OH (virtual)

Office Hours

10:00 PM - 12:00 AM

Zainab Imadulla OH (virtual)

Office Hours

11:00 PM - 1:00 AM

Prakriti Timalsina OH (Virtual)

📍 Virtual

Office Hours

11:30 PM - 12:30 AM

Carmen OH

📍 Virtual

Office Hours

Wednesday, Jan 14

12:30 AM - 2:00 AM

Vivaan Lunkad

Office Hours

10:35 AM - 11:40 AM

1:35 PM - 2:40 PM

2:00 PM - 4:00 PM

Lauren OH (Virtual)

📍 Virtual

Office Hours

3:00 PM - 5:00 PM

Pratham OH (Virtual)

Office Hours

3:30 PM - 5:00 PM

Prof Shesh (Prof Shesh queue)

Office Hours

6:00 PM - 8:00 PM

Jessica Teurn (Virtual)

Office Hours

7:00 PM - 9:00 PM

Prakriti Timalsina OH (Virtual)

📍 Virtual

Office Hours

7:30 PM - 9:30 PM

Sam Schumacher OH (virtual)

Office Hours

9:00 PM - 11:00 PM

Avery Neuner

📍 BK 750

Office Hours

9:00 PM - 11:00 PM

Avery Neuner

📍 BK 750

Office Hours

10:00 PM - 12:00 AM

Ran Fukazawa (Virtual)

Office Hours

10:00 PM - 12:00 AM

Ran Fukazawa (In-person)

📍 CPM 200

Office Hours

11:00 PM - 1:00 AM

Sahil Chute

📍 Hastings 111

Office Hours

11:00 PM - 1:00 AM

Amber Friar

📍 Cahners 008

Office Hours

Thursday, Jan 15

1:00 AM - 2:00 AM

Vivaan Lunkad

Office Hours

10:35 AM - 11:40 AM

1:35 PM - 2:40 PM

2:00 PM - 4:00 PM

Edgar Castaneda OH (virtual)

Office Hours

9:00 PM - 12:00 AM

Sean Snaider In Person OH

📍 Snell Library Group Study 130R

Office Hours

10:45 PM - 12:45 AM

Aditya Vij (virtual)

Office Hours

10:59 PM - 11:59 PM

Due: Assignment 1: Recipe Domain Model

Due

11:00 PM - 12:00 AM

Amber Friar

📍 Virtual

Office Hours

Friday, Jan 16

6:00 PM - 7:00 PM

Jessica Teurn (Virtual)

Office Hours

6:30 PM - 7:30 PM

Carmen OH (Virtual)

Office Hours

8:00 PM - 10:00 PM

Afrah OH

Office Hours

10:30 PM - 12:30 AM

Sahil Chute(Virtual)

Office Hours

10:45 PM - 12:45 AM

Aditya Vij (virtual)

Office Hours