CompSci 308
Spring 2024
Advanced Software Design and Implementation

Controlling complexity is the essence of computer programming. — Brian Kernighan

The exact order and details of topics is subject to change during the semester based on the pace needed, but we will try to set them at least two weeks in advance.


Date Topics Examples/Videos Lab Readings Due
Basic Design Principles
1 - Jan 11 Course Overview
GIT in Practice
OpenJFX Animation
Example: Conditionals
Example: Bounce
Video: Class Introduction
GITing Started
Bouncing Balls
Clean Code
OO in One Sentence
JavaFX Basics (sections 1-3)
GIT Basics
ChatGPT
CompSci Autobiography, Sat 1/13
2 - Jan 16/18 Refactoring and Code Smells
Finding Objects
Importance of Ethics
Example: Bins
Video: Objects
Hangman Single Responsibility Principle
Code Smells
Everything is an Object
Refactoring: Extract Class
Pragmatic Debugging
Breakout - Plan and Basic Start, Tue 1/16
Journal - Thinking about Ethics, Fri 1/19
Design Using Abstractions
3 - Jan 23/25
Abstraction: Inheritance and Polymorphism
Intergrity and Equity
Teamwork
Example: Roulette
Video: Abstractions
Team Meeting Access Control (Encapsulation)
Inheritance and Polymorphism
Refactoring: Replace Conditional
Effective Teamwork
Breakout - Complete, Tue 1/23
Journal - Project Analysis, Sat 1/27
4 - Jan 30/Feb 1
GUIs
Example: Browser GIT for Teams
Browser
Open Closed Principle
Model-View Separation Principle
JavaFX GUIs (sections 4-5)
GIT Branching and Merging
Cell Society - Plan, Mon 1/29
JournalStarting and Learning, Fri 2/2
5 - Feb 6/8 Exceptions
Encapsulation and Interfaces
Example: Browser (continued)
Example: Encapsulation
Video: Exceptions
Video: Encapsulation
Code Review Liskov Substitution Principle
Exceptions: Throwing and Designing
Java Interfaces Are So Very Cool
Better Code With OOP Concepts
Cell Society - Basic, Mon 2/5
Journal - Teamwork Reflection, Fri 2/9
Design Using APIs and Testing
6 - Feb 13/15
Designing APIs Java Time and Dates
Java Collections
Video: APIs
Video: API design
Team Meeting Josh Bloch on API Design
Model-View-Controller (MVC)
Designing with Interfaces
Managing Conflict in Teams
Cell Society - Change, Mon 2/12
Journal - Project Analysis, Fri 2/16
7 - Feb 20/22
Unit Testing and TDD
"Advanced" Java: Reflection
Example: Testing
Example: Reflection
Video: Unit Testing
Video: TDD and Reflection
Testing
(and Reflection)
JUnit Test Infected
User Interface Testing with TestFX
Dependency Inversion Principle
Design by Contract
SLogo - Plan, Mon 2/19
Journal - Ethics in the News, Fri 2/23
SLogo - Test, Sun 2/25
8 - Feb 27/29
Design Patterns
"Advanced" Java: Lambda Expressions
Example: Encapsulation (continued)
Example: Observer
Video: More on Testing and Lambdas
Video: Design Patterns
GIT Undo
Patterns
Introduction to Design Patterns
Interface Separation Principle
Why Lamba Expressions
Refactoring to Patterns
Journal - Testing, Fri 3/1
SLogo - Basic, Sun 3/3
9 - Mar 5/7 Design Smells Example: Roulette (continuted)
Video: Design Pattern Examples
Video: Design Goals and ChatGPT
Code Review Design Smells
From STUPID to SOLID
Foundation Patterns
Using ChatGPT Prompts for Coding
SLogo - Change, Fri 3/8
10 - Mar 12/14
SPRING BREAK        
Putting it All Together
11 - Mar 19/21
Agile Project Management Video: Agile Planning Team Meeting
DUI Team Exercises!
Designing a Document Editor
Introducing OO Frameworks
The Structure of Games
Teamwork is an Individual Skill
OOGASalad - Team Choice, Wed 3/20
Journal - Teamwork Reflection, Wed 3/20
Journal - Project Analysis, Sun 3/24
12 - Mar 26/28 Agile Project Design
"Advanced" Design
Video: Design Techniques Gitlab Project Management
Team Planning
Magic of Data Driven Design
Dependency Injection Pattern
Prefer Composition over Inheritance
UI Software Architecture
OOGASalad - Plan, Thu 3/28
Journal - Ethics (Professional), Sun 3/31
13 - Apr 2/4
Logging
Streams
Giving Demos
Example: Bins (with Logging)
Example: WordCloud (no loops)
Video: Demos, Logging, Streams
Video: Ethics for Developers
Ethics: Log4j Exploit
Sprint Management:
Retrospective,
Demo,
Planning
Java Logging Best Practices
Functional Programming in Java
Refactoring Loops with Pipelines
Towards Ethics by Default
OOGASalad - Sprint 1, Wed 4/3
Journal - Ethics (Personal), Fri 4/5
14 - Apr 9/11
Day in the Life of a Developer Video: Real-World Development
Video: Ethics Discussion
Ethics: Google v. Oracle
Sprint Management:
Retrospective,
Demo,
Planning
Software Engineering at Google
Programmers Never Stop Learning
Dark Side of Software Development
Do Programmers Need a Code of Conduct
OOGASalad - Sprint 2, Wed 4/10
Journal - Midpoint Reflection, Fri 4/12
15 - Apr 16/18
DevOps
Command Line Principles
Example: Maven Project
Video: Using Maven
Sprint Management:
Demo,
Retrospective,
Planning
Unix Philosophy
What Should Be Configurable?
Ultimate Guide on DevOps
Pragmatic Moral Compass
OOGASalad - Sprint 3, Wed 4/17
Journal - Improvement Reflection, Fri 4/19
16 - Apr 23
ChatGPT
Future of Programming
General Software Design
  NO LAB Four Pillars of OO Programming
Extreme (Programming) Thoughts
API-First World (comic book!)
Defending Democracy from Big Tech
Journal - Teamwork Reflection, Fri 4/26
OOGASalad - Complete, Sun 4/28
Wed, May 1 Final Project Demos, in person, 7-10pm       OOGASalad - Demo, Wed 5/1 (in class)
Journal - Project Analysis, Sun 5/5