course schedule: lectures
Toggle SectionsLecture Schedule |
Week 1[ 08/18 - 08/24 ]
[Fri 08/23] Lecture 1: Course overview; use cases, refactoring, version control
In-class exercises
Your account on github.com Submit
Reminder emails survey Submit
Use-case quiz Submit See
Refactoring example Submit
Git commands Submit
Steps in version control Submit
Non-conflicting and conflicting changes Submit
Week 2[ 08/25 - 08/31 ]
[Thu 08/29] Lecture 2: (online) Introduction to Ruby
Online videos
Intro to Ruby for Java programmers [13:43] Video Examples
Everything is an object, every operation is a method call [8:28] Video Examples
Ruby OOP [4:32] Video Examples
All programming is metaprogramming [7:05] Video Examples
Blocks, iterators, functional idioms [8:45] Video Examples
[Fri 08/30] Lecture 3: Modules & mixins, reflection
In-class exercises
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
Deck and Player Submit
Week 3[ 09/01 - 09/07 ]
[Thu 09/05] Lecture 4: (online) Mixins, yield, intro to Rails
Online videos
Mixins and duck typing [7:43] Video Examples
Yield in Ruby [8:20] Video Examples
Hello Rails: from zero to CRUD [10:49] Video Examples
Active-record basics [8:55] Video Examples
Database and migrations [9:45] Video Examples
Models: Finding, Updating, Deleting [11:26] Video
[Fri 09/06] 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 See
Week 4[ 09/08 - 09/14 ]
[Thu 09/12] Lecture 6: (online) Rails controllers, routing, and debugging
Online videos
Routes, controllers and views [22:39] Video
Forms [6:00] Video Examples
Redirection, the flash, and the session [9:24] Video Examples
Finishing CRUD [6:11] Video Examples
Associations and foreign keys [13:43] Video
[Fri 09/13] Lecture 7: Practice Developing a Rails App
Week 5[ 09/15 - 09/21 ]
[Thu 09/19] Lecture 8: (online) Testing & design patterns
Online videos
Overview of testing [3:23] Video
FIRST, TDD and introduction to RSpec [10:53] Video
Anatomy of a test case - Arrange, Act, Assert [11:15] Video
Fixtures and factories [10:31] Video
Introduction to design patterns and singleton pattern [19:43] Video
[Fri 09/20] Test 1
Week 6[ 09/22 - 09/28 ]
[Thu 09/26] Lecture 9: (online) Design patterns
Online videos
Adapter Pattern [7:29] Video
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 09/27] Lecture 10: Testing in Rails/Agile exercise
In-class exercises
Reflection on Test 1 Submit
Assign me to a team for the first OSS project Submit
What kinds of tests are these? Submit See
Fixtures: what is automatically generated? Submit See
Databases in Rails projects Submit See
Scenarios for unit tests Submit See
What else could you test about recipes? Submit See
Functional tests Submit See
Unit, functional, and integration tests Submit See
Team for White Elephant Sizing Submit See
Week 7[ 09/29 - 10/05 ]
[Thu 10/03] Lecture 11: (online) Behavior-driven design, Cucumber & Capybara
Online videos
Behavior-Driven Design and User Stories [6:59] Video
SMART user stories [12:10] Video
Lo-Fi UI sketches and storyboards [5:35] Video
Points and Velocity [6:34] Video
From Stories to Acceptance Tests: Introducing Cucumber [9:50] Video
Introducing Capybara [6:56] Video Examples
Basic Cucumber & Capybara demo [18:14] Video
More advanced Cucumber & Capybara demo [13:28] Video
[Fri 10/04] 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[ 10/06 - 10/12 ]
[Thu 10/10] Lecture 13: (online) Legacy code & 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 10/11] Lecture 14: SOLID principles
In-class exercises
Single Responsibility: separating classes Submit See
Single Responsibility principle (Ruby) Submit See
Single Responsibility principle (Java) 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[ 10/13 - 10/19 ]
[Thu 10/17] 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 10/18] Lecture 16: O-o fundamentals
In-class exercises
Interest in independent study/thesis topics Submit
Example of a bad name 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
Design-pattern identification Submit See
Week 10[ 10/20 - 10/26 ]
[Thu 10/24] 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 (with slide view) [16:35] Video
Elegance and Inheritance (with captions) [16:35] Video
[Fri 10/25] Test 2
Week 11[ 10/27 - 11/02 ]
[Thu 10/31] Lecture 18: (online) Patterns: Chain of Responsibility, Prototype, Flyweight
Online videos
Chain of Responsibility pattern [8:42] Video
Prototype pattern [7:58] Video Examples
Flyweight pattern [13:17] Video Examples
Week 12[ 11/03 - 11/09 ]
[Thu 11/07] Lecture 19: (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 11/08] Lecture 20: Elegance and classes, Factory Method, Abstract Factory
In-class exercises
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 13[ 11/10 - 11/16 ]
[Thu 11/14] Lecture 21: (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 11/15] Lecture 22: Patterns: Delegation, State, Strategy, Visitor
In-class exercises
Why create your own Stack class? Submit See
Delegation: fill in the blanks Submit See
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 Submit See
Week 14[ 11/17 - 11/23 ]
[Thu 11/21] Lecture 23: (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
[Fri 11/22] Lecture 24: Review
In-class exercises
Sign up for a demo time Submit
Permission to use software developed in this course Submit
Design-pattern identification Submit
Week 15[ 12/01 - 12/07 ]
[Fri 12/06] Final Exam, 3:30-6:00 PM, EB III 2201 & 2207
Study Materials