-
Notifications
You must be signed in to change notification settings - Fork 16
Curriculum
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
- Challenge: None.
- Problem-of-the-Day: None.
- Assignment: Input Statistics
Day 2: Methods and Arrays
- Challenge: None.
- Problem-of-the-Day: 12 Days of Christmas
- Assignment: Number Guessing Game
Day 3: Hashes and Nested Data Structures
- Challenge: None.
- Problem-of-the-Day: Phone Numbers
- Assignment: Blackjack Advisor
Day 4: Classes (and the Object Reveal)
- Challenge: None.
- Problem-of-the-Day: Albums and Artists
Weekend Assignment: Currency Converter
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
- Challenge: None.
- Problem-of-the-Day: Vehicle Inheritance
- Assignment: Battleship
Day 2: Composition and Modules
- Challenge: None.
- Problem-of-the-Day: Vehicle Modules and Vehicle Composition - MULTI-PART
- Assignment: Battleship
Day 3: Regex, Enumerable, and Blocks
- Challenge: None.
- Problem-of-the-Day: Find Names
- Assignment: Battleship
Day 4: Test Driven Development
- Challenge: None.
- Problem-of-the-Day: Odd Array with TDD
Weekend Assignment: Employee Reviews
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
- Challenge: if (Fizzbuzz)
- Problem-of-the-Day: Phone Numbers Data Structure
- Assignment: Time Entry Data Structure
Day 2: SQL
- Challenge: String Split
- Problem-of-the-Day: Phone Numbers SQL - MULTI-PART
- Assignment: Time Entry SQL Practice
Day 3: ActiveRecord and Unit Testing
- Challenge: Arrays and Hashes
- Problem-of-the-Day: Phone Numbers Active Record
- Assignment: Employee Reviews with Database
Day 4: Associations and Validations
- Challenge: Classes
- Problem-of-the-Day: Phone Numbers Validations
Weekend Assignment: Legacy Associations and Validations
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
- Challenge: Inheritance
- Problem-of-the-Day: Employees and Departments API
- Assignment: Weather Report
Day 2: HTML Verbs and rails new
- Challenge: Composition
- Problem-of-the-Day: Invent a Folder Structure
- Assignment: Create a Voting API
Day 3: The Router and Controllers
- Challenge: Enumerable
- Problem-of-the-Day: Model to JSON
- Assignment: Create a Voting API
Day 4: JBuilder and Seeds/Fixtures
- Challenge: Include
- Problem-of-the-Day: Assorted JSON
Weekend Assignment: Build-your-own API
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
- Challenge: Discuss: Ruby
- Problem-of-the-Day: My First Website
- Assignment: CSS Reverse Engineering
Day 2: HTML Forms and ERB
- Challenge: Discuss: HTTP
- Problem-of-the-Day: My First ERB
- Assignment: Recreate GitHub Profile
Day 3: REST and Scaffold
- Challenge: Rails: Router
- Problem-of-the-Day: Albums Resource
- Assignment: Wallet
Day 4: Helpers/Partials and Heroku
- Challenge: Rails: Environments
- Problem-of-the-Day: None.
Weekend Assignment: Health Tracker
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
- Challenge: Rails: ActiveRecord
- Problem-of-the-Day: None.
- Assignment: Restaurant Menu
Day 2: Session and Authentication
- Challenge: Rails:
form_for
- Problem-of-the-Day: Menu Authentication
- Assignment: Gradebook
Day 3: Authorization and Integration Tests
- Challenge: Rails: REST
- Problem-of-the-Day: None.
- Assignment: Gradebook
Day 4: Handling Nested Attributes
- Challenge: Rails: Partials
- Problem-of-the-Day: Mass Grade Assignment
Weekend Assignment: Survey Opossum
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)
- Assignment: (Complete Survey Opossum)
Day 2: JavaScript
- Challenge: Rails: Helpers
- Problem-of-the-Day: None.
- Assignment: Add JavaScript
Day 3: jQuery and Unobtrusive JavaScript
- Challenge: Rails: Session
- Problem-of-the-Day: None.
- Assignment: Add jQuery
Day 4: AJAX
- Challenge: Discuss: Git Messes
- Problem-of-the-Day: None.
- Assignment: Auction AJAX
Weekend Assignment: Todo App
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
- Challenge: Primes
- Problem-of-the-Day: None.
- Assignment: Database Optimizations
Day 2: Background Processing
- Challenge: Double Loop
- Problem-of-the-Day: None.
- Assignment: Data File Import
Day 3: Mailers
- Challenge: Rails: JavaScript
- Problem-of-the-Day: None.
- Assignment: Delayed Mailer
Day 4: File Storage and S3
- Challenge: Rails: jQuery
- Problem-of-the-Day: None.
- Assignment: Take-a-Ticket: Gradebook
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)
- Assignment: (Complete Take-a-Ticket: Gradebook)
Day 2: oAuth and DevOps
- Challenge: Discuss: Rails
- Problem-of-the-Day: None.
- Assignment: Ruby Koans
Day 3: d3.js
- Challenge: Discuss: Supporting Tech
- Problem-of-the-Day: d3 Lesson App - MULTI-PART
- Assignment: Ruby Koans
Day 4: Ruby on Not Rails
- Challenge: Discuss: Development
- Problem-of-the-Day: None.
- Assignment: Students prepare final project pitches. Instructor sleeps.