CompSci 308
Spring 2023
Advanced Software Design and Implementation

Simple is better than complex. Complex is better than complicated. — by Tim Peters from The Zen of Python

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 12 Course Overview
OpenJFX Animation
Habits and Ownership Mindset
Example: Conditionals
Example: Bounce
Video: Class Introduction
GITing Started
Bouncing Balls
Clean Code
OO in One Sentence
JavaFX Basics (sections 1-3)
GIT Basics and Best Practices
ChatGPT
CompSci Autobiography, Sat 1/14
2 - Jan 17/19 Refactoring and Code Smells
Finding Objects
Intergrity and Equity
Importance of Ethics
Example: Bins
Video: Refactoring
Video: Objects
Hangman Single Responsibility Principle
Code Smells
Everything is an Object
Refactoring: Extract Class
Pragmatic Debugging
Breakout - Plan and Basic Start, Tue 1/17
Journal - Thinking about Ethics, Fri 1/20
Design Using Abstractions
3 - Jan 24/26
Abstraction: Inheritance and Polymorphism
Teamwork
Example: Roulette
Video: Abstractions
Video: Teamwork
Team Meeting Access Control (Encapsulation)
Inheritance and Polymorphism
Refactoring: Replace Conditional
Effective Teamwork
Breakout - Complete, Tue 1/24
Journal - Project Analysis, Fri 1/27
4 - Jan 31/Feb 2
GUIs
Example: Browser
Video: Class Variations
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/30
JournalStarting and Learning, Fri 2/3
5 - Feb 7/9 Encapsulation and Interfaces
Exceptions
Example: Encapsulation
Example: Browser (continued)
Video: Encapsulation
Video: Exceptions
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/6
Journal - Teamwork Reflection, Fri 2/10
Design Using APIs and Testing
6 - Feb 14/16
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/13
Journal - Project Analysis, Fri 2/17
7 - Feb 21/23
Unit Testing and TDD
"Advanced" Java: Reflection
Example: Testing
Video: Reflection
GIT Mistakes
Testing
Reflection
JUnit Test Infected
User Interface Testing with TestFX
Dependency Inversion Principle
Design by Contract
SLogo - Plan, Mon 2/20
Journal - Ethics in the News, Fri 2/24
SLogo - Test, Sun 2/26
8 - Feb 28/Mar 2
Design Patterns
"Advanced" Java: Lambda Expressions
Example: Encapsulation (continued)
Video: More on Lambdas
Video: Design Patterns
Patterns Introduction to Design Patterns
Interface Separation Principle
Why Lamba Expressions
Refactoring to Patterns
Journal - Testing, Fri 3/3
SLogo - Basic, Sun 3/5
9 - Mar 7/9 Design Smells Example: Roulette (continuted)
Video: Applying Design Patterns
Video: More on Design Patterns
Code Review Design Smells
From STUPID to SOLID
Big Ball of Mud
Foundation Patterns
SLogo - Change, Fri 3/10
10 - Mar 14/16
SPRING BREAK        
Putting it All Together
11 - Mar 21/23
Agile Project Management
Agile Project Design
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/22
Journal - Teamwork Reflection, Fri 3/24
Journal - Project Analysis, Sun 3/26
12 - Mar 28/30 "Advanced" Design
Prefer Composition over Inheritance
Video: Agile Discussion
Team Contract Worksheet
Team Planning
Magic of Data Driven Design
Dependency Injection Pattern
UI Software Architecture
ACM Code of Ethics
OOGASalad - Plan, Fri 3/31
Journal - Ethics (Professional), Sun 4/2
13 - Apr 4/6
Logging
Open Source Software
Bins (with Logging)
Example: Twitter Algorithm
Ethics: Log4j Exploit
Ethics: Lawsuits against AI
Video: Logging and Ethics
Video: Open Source
StandUp/Retrospective
Team Planning
Java Logging Best Practices
What is Free Software?
Cathedral and Bazaar
Towards Ethics by Default
OOGASalad - Sprint 1, Fri 4/7
Journal - Ethics (Personal), Sun 4/9
14 - Apr 11/13
Giving Demos
DevOps
Day in the Life of Development
Ethics: CMU Mites and Privacy
World: Uber CEO Tried Driving
Video: DevOps and Real-World
Midpoint Presentation
StandUp/Retrospective
Team Planning
Software Engineering at Google
Ultimate Guide on DevOps
True Programmers Never Stop Learning
Dark Side of Software Development
Do Programmers Need a Code of Conduct
OOGASalad - Sprint 2, Wed 4/12
Journal - Midpoint Teamwork Reflection, Fri 4/14
15 - Apr 18/20
Streams
Command Line Principles
Example: WordCloud
Video: Streams, Command Line
StandUp/Retrospective
Team Planning
Functional Programming in Java
Refactoring Loops with Pipelines
Unix Philosophy
Pragmatic Moral Compass
Journal - Improvement Reflection, Fri 4/21
OOGASalad - Sprint 3, Sun 4/23
16 - Apr 25
ChatGPT
General Software Design
  NO LAB Four Pillars of OO Programming
Extreme (Programming) Thoughts
Defending Democracy from Big Tech
API-First World (comic book!)
Journal - Teamwork Reflection, Fri 4/28
OOGASalad - Complete, Sun 4/30
Wed, May 3 Final Project Demos, in person, 2-5pm       OOGASalad - Demo, Wed 5/3 (in class)
Journal - Project Analysis, Sun 5/7