Skip to content
Mason F. Matthews edited this page Jul 17, 2015 · 9 revisions

Week 1 - Ruby

The first three days of this week cover the basics of procedural programming and data structures in Ruby, and are more in-depth discussions of what the students practiced in the prework. It always appears in the first day that they're bored and you're going to slowly, but stay strong. As long as students proceed to Hard and Nightmare modes when they finish Normal mode of the first assignment, they'll have plenty to do, and reality sets in in day 2 and they realize that they don't just GET everything. Day 4 starts Classes, which they didn't cover in prework.

Day 1: Control Flow and Variables

Day 2: Methods and Arrays

Day 3: Hashes and Nested Data Structures

Day 4: Classes (and the Object Reveal)

Weekend Assignment: Currency Converter

Week 2 - OOP and Testing

In week 2 I have one extended assignment (Battleship) for the first three nights. It has enough complexity that it can keep them busy, and the OO concepts escalate the further they go. This leads to a natural discussion of composition after night 1, enumerable after night 2, and bigger-picture design principles after night 3.

I've also written the entire test suite in advance, and this is their first exposure to testing. The assignment is "complete" when they make all the tests pass; at that point, they have a working Battleship game. They start to get an appreciation for what tests accomplish, and then we're ready to jump into TDD on the last day of the week.

Day 1: Inheritance and Testing

Day 2: Composition and Modules

Day 3: Regex, Enumerable, and Blocks

Day 4: Test Driven Development

Weekend Assignment: Employee Reviews

Week 3 - Databases and Rails Models

The title of this week is a bit of a misnomer. We never talk about the word "Rails" the whole time. We do, however, start working with ActiveRecord as a solo gem, both for migrations and for models. We also spend a whole day on pure SQL, just running through a few series of increasingly complex queries.

My first time teaching Rails, I introduced Rails through views, then controllers. This curriculum is the opposite approach (models, then controllers, then views), and I think it's much better this way. Testing momentum also keeps up because it's easier to grok unit tests in isolation than it is to get controller tests as part of the Rails "labyrinth."

Day 1: Databases and Migrations

Day 2: SQL

Day 3: ActiveRecord and Unit Testing

Day 4: Associations and Validations

Weekend Assignment: Legacy Associations and Validations

Week 4 - APIs and Rails Controllers

Still no HTML! Week 4 introduces controllers strictly through APIs. We do type the command rails new this week, but it's only for serving up and consuming APIs. Don't get twitchy; stay the course. HTML next week.

The early focus on APIs has been a big hit with students and our Employer Advisory Board. It's the way the world is going, so I'm quite happy to make a fuss about them before we even get to the true front end.

It's also worth noting that this weekend assignment is the first truly open-ended assignment. They are asked to consume two public APIs, merge the data together in a novel way, and serve up their own API. I don't like to do open-ended assignments before this point, but this one has been really well received, so it seems like the right time.

Day 1: The Web and APIs

Day 2: HTML Verbs and rails new

Day 3: The Router and Controllers

Day 4: JBuilder and Seeds/Fixtures

Weekend Assignment: Build-your-own API

Week 5 - HTML and Rails Views

This week, the major pieces of Rails all fall into place. The problems-of-the-day are really useful this week, and the students get into them. They also make the "reveals" afterwards really big deals.

Scaffold is introduced... and I know that's contentious. I find that it's good to know about as a reference point, and I make a fuss about students not using it after the first one or two assignments. In good news, the weekend project asks them to make four scaffold-like controllers, but they're only allowed to generate two scaffolds. They have to do the other two by hand, and that's been a good exercise to walk them through what's necessary.

Day 1: HTML and CSS

Day 2: HTML Forms and ERB

Day 3: REST and Scaffold

Day 4: Helpers/Partials and Heroku

Weekend Assignment: Health Tracker

Week 6 - Rails Features

Side note: Week 6 always seems to be the tired week. Students are exhausted. If I were to design a program like this from scratch, I'd probably do five weeks of lecture, then take a week off, then come back for 4 weeks of lecture. Pushing through it works, but I suspect that recharging batteries would make weeks 6-9 more productive.

The unique part of this week is the weekend project. This is our first cross-class project, and a pair of Rails students will build an app with a pair of front end students. We ask them to work together in one codebase (not on two apps connected to an API), which forces more collaboration. We figure that they have a 50/50 chance of working this way once they're out in the wild.

We also do NOT lecture the following Monday. The students have to turn in the weekend assignment before class on Tuesday. More on that below.

Day 1: The Asset Pipeline, SCSS, and Bootstrap

Day 2: Session and Authentication

Day 3: Authorization and Integration Tests

Day 4: Handling Nested Attributes

Weekend Assignment: Survey Opossum

Week 7 - JavaScript

As mentioned above, I do NOT lecture the first day of this week. When working on the cross-class project, there are tons of things that can go wrong and cause strife. Knowing that they have a day to regroup after a weekend without instructors keeps the in-group tensions down over the weekend. Monday is also a good opportunity for us as instructors to do a scrum-style retrospective for them to see how it can work.

This week's weekend project is different; there is a Thursday assignment (make AJAX work in legacy code) AND a short weekend assignment. We get together on Friday morning to review the legacy assignment and kick off the project.

Day 1: (Continuation of Weekend Project)

Day 2: JavaScript

Day 3: jQuery and Unobtrusive JavaScript

Day 4: AJAX

Weekend Assignment: Todo App

Week 8 - Web App Patterns

At this point, I try to introduce students to common web app patterns or problems that they'll experience over and over again. We work more significantly with legacy code (also a hit with the Employer Advisory Board), and the evening assignment builds on the prior night again and again.

The weekend assignment is their large-team project. I take the best of the student submissions from the Gradebook assignment (week 6), fork it, add all the students to the repository, and create about 10 GitHub issues on various topics from class. They are assigned to pairs, then take turns claiming issues. Pull requests, code review, and merging cascades based on pair completion time. Check out the weekend assignment link below for more details.

I think this one's very similar to the real world, and the students say they get a lot out of it.

Day 1: Indices, Complexity

Day 2: Background Processing

Day 3: Mailers

Day 4: File Storage and S3

Week 9 - Web App Patterns

Similar to week 7, I do not lecture on Monday, but use the time to evaluate the weekend project as an entire class. They've built an app as a large team, and they think they're done. However, as we review the app in class, there are inevitably many bugs. We list them out together, then brainstorm how it happened and what we should do, then we set them loose (in whatever team structure they've invented) to complete it Monday afternoon and evening.

I do not treat this week as a review week; we continue to cover new topics. However, I lighten up the evening assignments and ask them to work through the Ruby Koans over two nights. I know that some instructors give them out earlier, but there's so much nuance in them that I feel like you need more experience to appreciate them. They're also a nice breather prior to final projects (and they're fun).

Day 1: (Continuation of Weekend Project)

Day 2: oAuth and DevOps

Day 3: d3.js

Day 4: Ruby on Not Rails

  • Challenge: Discuss: Development
  • Problem-of-the-Day: None.
  • Assignment: Students prepare final project pitches. Instructor sleeps.