course schedule: lectures
Toggle SectionsLecture Schedule |
Week 1[ 01/05 - 01/11 ]
[Fri 01/10] Lecture 1: Course overview; use cases, refactoring, version control
In-class exercises
Use-case quiz Submit See
Refactoring example Submit See
Git commands Submit See
Non-conflicting and conflicting changes Submit See
Week 2[ 01/12 - 01/18 ]
[Thu 01/16] Lecture 2: (online) Introduction to Ruby
Online videos
2.1 How to Learn a new Language or Framework: Ruby [7:41] Video
2.3 Ruby Basics part 1/3 - Types, Variables, and Primitives [12:32] Video
2.3 Ruby Basics part 2/3 - Types, Variables, and Primitives [9:48] Video
2.3 Ruby Basics part 3/3 - Types, Variables, and Primitives [8:25] Video
2.4 Ruby Idioms part 1/2 Blocks [13:28] Video
2.4 Ruby Idioms part 2/2 Duck Typing and Mix-Ins [13:15] Video
[Fri 01/17] Lecture 3: Modules & mixins, reflection
In-class exercises
PingPong TA chatbot survey Submit
Your github.com account Submit
Web-based Ruby console Submit
Inheritance and modules Submit See
Comparable: Battle of Minions Submit See
Factorial using inject Submit See
Yield Submit See
Reflection methods Submit See
Collection operators Submit See
Week 3[ 01/19 - 01/25 ]
[Thu 01/23] Lecture 4: (online) Mixins, yield, intro to Rails
Online videos
4.1: Part 3 - Rails as an MVC Framework [13:34] Video
4.2: Active Record (The Glue) Part 1 - Find [20:14] Video
4.2: Active Record Part 2 - Create [8:23] Video
4.2: Active Record Part 3 - Update and Destroy [9:45] Video
4.2: Databases and Migrations [14:51] Video
[Fri 01/24] Lecture 5: Rails and the Cookbook app
In-class exercises
Cookbook installation instructions See
Assign me to a team for Program 2? Submit
Arrange statements in the index method of recipe.rb Submit See
What happens when a category that has a recipe is deleted? Submit See
Questions on menu at the bottom of all screens Submit See
Confirming an action Submit See
Review questions Submit See
Routes Submit See
Adding validations Submit See
Relationship between recipes and categories Submit See
Fixing the deletion glitch Submit See
Steps in showing a recipe Submit See
Questions about new.html.erb Submit See
Program 2 requirements inspection Submit
Week 4[ 01/26 - 02/01 ]
[Thu 01/30] Lecture 6: (online) Rails controllers, routing, and debugging
Online videos
4.4 Part 1 Controllers and views [2:09] Video
4.4 Part 2 Redirection, the flash, and the session [6:00] Video
4.6 Part 1 Creating forms [16:48] Video
4.6 Part 2 Strong params for forms [9:23] Video
4.6 Part 3 Forms summary [2:45] Video
5.4 Associations Part 1: Foreign keys [6:02] Video
5.4 Associations Part 2: Active-record associations [6:15] Video
Typing form events (React + TypeScript) [10:33] Video
[Fri 01/31] Lecture 7: Practice Developing a Rails App
Week 5[ 02/02 - 02/08 ]
[Thu 02/06] Lecture 8: (online) Behavior-driven design, Cucumber & Capybara
Online videos
7.1 Behavior-Driven Design and User Stories [6:59] Video
7.2 SMART user stories [12:10] Video
7.3 Lo-Fi UI sketches and storyboards [5:35] Video
7.4 Points and Velocity [6:34] Video
7.6 Part 1 - From Stories to Acceptance Tests: Introducing Cucumber [9:50] Video
7.6 Part 2 - Introducing Capybara [6:56] Video Examples
7.6 Part 3 - Basic Cucumber & Capybara demo [18:14] Video
7.6 Part 4 - More advanced Cucumber & Capybara demo [13:28] Video
[Fri 02/07] Test 1
Study Materials
Week 6[ 02/09 - 02/15 ]
[Thu 02/13] Lecture 9: (online) Testing & design patterns
Online videos
8.1: Part 1 - The big picture: FIRST, TDD, and red-green-refactor [8:10] Video
8.1: Part 2 - Testing today: FIRST [6:26] Video
8.2: Anatomy of a Test Case - Arrange, Act, Assert [10:45] Video
8.6: Part 1 - Fixtures & factories [10:16] Video
8.6: Part 2 - When fixtures vs. when factories? [6:59] Video
Introduction to design patterns and singleton pattern [19:43] Video
[Fri 02/14] Lecture 10: Testing in Rails/Agile exercise
In-class exercises
Consent for TDD research study Submit
Assign me to a Typescript project, if possible Submit
What kinds of tests are these? Submit See
Fixtures: what is automatically generated? Submit See
Databases in Rails projects Submit See
What else could you test about recipes? Submit See
Functional tests Submit See
Team for White Elephant Sizing Submit See
Week 7[ 02/16 - 02/22 ]
[Thu 02/20] Lecture 11: (online) Behavior-driven design & refactoring
Online videos
9.1: What Makes Code "Legacy" and How Can Agile Help? [8:14] Video
9.2: Approaching a Legacy Codebase [7:38] Video
9.3: Establishing Ground Truth With Characterization Tests [5:27] Video
9.4: Comments & Commits - Tell Me a Story [8:24] Video
9.5: Beyond Correctness - Smells, Metrics, and SOFA [15:10] Video
9.6: Part 1 - Intro to Method Level Refactoring [14:44] Video
9.6: Part 2 - Reflections on Refactoring [4:37] Video
[Fri 02/21] Lecture 12: O-o intro & CRC-card design
In-class exercises
Evaluate your Program 2 mentor Submit
Tagging exercise Submit
Nouns that represent classes Submit See
Nouns that do not represent classes Submit See
Responsibilities/collaborators of Customer Submit See
CRC cards for Flight Reservation system Submit See
Another responsibility of Invitation Submit See
What to do when accepting an Invitation Submit See
What else to do when accepting an Invitation Submit See
Responsibilities of ProjectTopic Submit See
Week 8[ 02/23 - 03/01 ]
[Thu 02/27] Lecture 13: (online) Design patterns
Online videos
Adapter Pattern [7:29] Video Examples
Observer Pattern [22:26] Video Examples
Builder pattern [13:04] Video Examples
Agile Methodology [13:20] Video
Scrum [7:06] Video
Introduction to Agile Scrum [8:52] Video
[Fri 02/28] Lecture 14: SOLID principles
In-class exercises
Consent for TDD research study Submit
PingPong TA chatbot survey Submit
Single Responsibility principle Submit See
Single Responsibility: separating classes Submit See
Single Responsibility principle (Ruby) Submit See
Single Responsibility principle (Java) Submit See
Open/Closed principle Submit See
Open/Closed principle (Ruby) Submit See
Open/Closed principle (Java) Submit See
Liskov Substitution principle (Ruby) Submit See
Liskov Substitution principle (Java) Submit See
Interface Segregation principle (Ruby) Submit See
Interface Segregation principle (Java) Submit See
Dependency Inversion principle (Java only) Submit See
SOLID Principles review Submit See
Week 9[ 03/02 - 03/08 ]
[Thu 03/06] Lecture 15: (online) Writing meaningful tests
Online videos
Using SimpleCov to check C0 Coverage [3:26] Video
The Magic Tricks of Testing [32:22] Video
Where to Test Functionality [9:23] Video
Design patterns video tutorial: Basic OOP Concepts [15:02] Video
[Fri 03/07] Lecture 16: O-o fundamentals
In-class exercises
Consent for TDD research study Submit
PingPong TA chatbot survey Submit
Interest in independent study/thesis topics Submit See
Example of a bad name Submit See
Why create your own Stack class? Submit See
Delegation: fill in the blanks Submit See
Subtype polymorphism example Submit See
Which method is called -- Take 1 Submit See
Which method is called -- Take 2 Submit See
Which method is called -- Take 3 Submit See
Singleton exercise Submit See
Adapter exercise Submit See
Week 10[ 03/16 - 03/22 ]
[Thu 03/20] Lecture 17: (online) Patterns: Decorator, Proxy, Façade; Elegance & inheritance
Lecture notes, etc.
Online videos
Decorator pattern [12:57] Video Examples
Proxy Pattern [8:12] Video Examples
Façade pattern [11:31] Video
Elegance and Inheritance [16:35] Video
[Fri 03/21] Test 2
Week 11[ 03/23 - 03/29 ]
[Thu 03/27] Lecture 18: (online) Patterns: Chain of Responsibility, Prototype, Flyweight
Online videos
Chain of Responsibility pattern [8:42] Video Examples
Prototype pattern [7:58] Video Examples
Flyweight pattern [13:17] Video Examples
[Fri 03/28] Lecture 19: Elegance and classes, Factory Method, Abstract Factory
In-class exercises
Consent for TDD research study Submit
compareTo vs. Comparator Submit See
Keeping track of a traversal Submit See
High and low coupling Submit See
Uses of class variables and methods Submit See
Law of Demeter exercise Submit See
Factory Method exercise (streaming) Submit See
Factory Method exercise (postcodes) Submit See
Abstract Factory furniture example Submit See
Abstract Factory exercise (frameworks) Submit See
Abstract Factory exercise (postcodes) Submit See
Design-pattern identification Submit See
Week 12[ 03/30 - 04/05 ]
[Thu 04/03] Lecture 20: (online) Patterns: Composite, Iterator, Visitor
Online videos
Composite pattern [16:46] Video Examples
Iterator pattern [19:57] Video Examples
Visitor pattern [13:30] Video Examples
[Fri 04/04] Lecture 21: State, Strategy, Visitor
In-class exercises
Design-pattern identification 1 Submit
A State interface Submit See
How should States be defined? Submit See
Methods for State pattern for floating-point FSM Submit See
Strategy pattern: fill in the blanks Submit See
Double-dispatch arithmetic Submit See
Visitor pattern: Fill in the blanks Submit See
Design-pattern identification 2 Submit
Week 13[ 04/06 - 04/12 ]
[Thu 04/10] Lecture 22: (online) Patterns: Mediator, Bridge, Memento
Online videos
Mediator pattern [18:30] Video Examples
Bridge pattern [14:51] Video Examples
Memento pattern [20:29] Video Examples
[Fri 04/11] Lecture 23: Review
In-class exercises
Sign up for a demo time
Permission to use software developed in this course Submit
Design-pattern identification Submit
Week 14[ 04/13 - 04/19 ]
[Thu 04/17] Lecture 24: (online) Patterns: Command, Interpreter, Template Method
Online videos
Command pattern [23:40] Video Examples
Interpreter pattern [22:22] Video Examples
Template Method pattern [14:04] Video Examples
Week 15[ 04/20 - 04/26 ]
[Fri 04/25] Final Exam, 7:00-9:30 PM
Study Materials