CompSci 308
Spring 2018
Software Design and Implementation

The exact order and details of these 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. As much as possible, materials discussed in class will be posted here in case you miss class. Note, assignments should be submitted on the master branch of the repository by 3:08am the day after the given due date.

Readings should be completed early in the week on which they are listed. If you miss a Recitation class activity or need extra time, you can get credit for it by turning it in by the end of the day it is given.

Date Topic Recitation Readings Due (by 3am)
Game - Introduction and Basic Design Principles
Jan 11
Week 1
Course Introduction
Video (from last semester)
GITing Started Code Smells
Be a Better Programmer
JavaFX Architecture
Guide to Versioning Systems
Plan, Sun
Jan 16
Week 2
Refactoring and Code Smells
Example: Bins
Video
NO RECITATION: SNOW OO in One Sentence
Decomposition
Refactoring: Extract Class
 
CellSociety - Basic Teamwork and Recognizing Good Design
Jan 23
Week 3
Inheritance
Example: Roulette
Video
RPS
Team Meeting
Open Closed Principle
Inheritance
Replace Conditional with Polymorphism
Complete, Mon
Analysis, Thu
Team Contract, Thu
Jan 30
Week 4
GUIs
Exceptions
Example: Browser
Video
Team GIT
Inheritance Review
Designing with Exceptions
JavaFX GUI Resources
Isolating Locale-Specific Data
GIT ready: Branching and Merging
Plan, Mon
Feb 6
Week 5
Interfaces
Example: Encapsulation
Video
Static Code Review Why Java Interfaces Are So Very Cool
Designing with Interfaces
Commonality Analysis
Why Getters and Setters are Evil
Basic, Mon
Team Sprint Report, Tue
Complete, Sun
SLogo - Advanced Teamwork and Design Strategies
Feb 13
Week 6
Design Patterns
Designing APIs
Video
Team Meeting
Josh Bloch on API Design
Introduction to Design Patterns
Refactoring to Patterns
JavaFX Properties and Bindings
Analysis, Wed
Team Contract, Thu
Feb 20
Week 7
"Advanced" Java
Example: "Advanced"
Video
Git: Undoing Changes
Peer API Review
Team Meeting
Reflection
Regular Expressions
Enumerated Types
Generics
Plan, Mon
Feb 27
Week 8
Functional Programming
Example: Encapsulation
Example: WordCloud
Video
"Advanced" Refactoring Functional Programming in Java
Lambda Expression Tutorial
Why Lamba Expressions
Refactoring Loops to Pipelines
Basic, Wed
Team Report, Thu
Mar 6
Week 9
SOLID Design
No Video
Static Code Review From STUPID to SOLID
Foundation Patterns
Big Ball of Mud
Complete, Fri
Mar 13 SPRING BREAK      
VOOGASalad - Final Project: Putting it All Together
Mar 20
Week 11
What is a Framework?
What is a Game?
(and as a picture)
Team Meeting Designing a Document Editor
Introducing OO Frameworks
The Structure of Games
Team Choice, Thu
Analysis, Fri
Team Contract, Fri
Mar 27
Week 12
"Advanced" Design
Video
Team Meeting Composition vs. Inheritance
Design to Accommodate Change
The Magic of Data Driven Design
Dependency Injection Pattern
Plan, Thu
Apr 3
Week 13
Agile Project Management
Agile Project Design
TDD Experiment
API Review
Scrum Guide
Extreme Programming Practices
JUnit Test Infected
 
Apr 10
Week 14
Programming Paradigms
Future of Programming
Video
Mid-Point Demo Don't Make Me Think
Why Software Sucks
Choosing your Next JVM Language
Basic, Tue
Team Report, Wed
Demo, Thu (in class)
Apr 17
Week 15
Open Source Software
Command Line Principles
Video
GIT Shell Scripts
User Testing
Static Code Review
Small Pieces, Loosely Coupled
Cathedral and Bazaar
Free Software Definition
 
Apr 24
Week 16
Professionalism
Video
NO Recitation ACM Code of Ethics
Do Programmers Need a Code of Conduct
True Programmers Never Stop Learning
Complete, Sun
Friday
May 4
9am-12pm
Final Project Demo     Final Demo, Fri (9am)
Analysis, Sun