`

Polina Soshnin

Creating a syllabus to learn Ruby on Rails

This is my syllabus for a self-taught course I created for myself to learn Ruby on Rails. Feel free to take inspiration from it and implement your own courses.

Objective | Goals | Overview | Course Materials

Week 1 | Week 2 | Week 3 | Week 4 | Week 5 | Week 6

Week 7 | Week 8 | Week 9 | Week 10 | Week 11 | Weeks 12-15

Additional Resources

##Objective Return to top

My goal is to gain competency and knowledge of best practices in web development by learning and implementing a web development framework. However, it can take hours, days, and weeks to become proficient in the best practices of a specific framework even for experienced developers. This is why I’m designing an independent study where I can devote time to doing so. Why do I want to teach myself Rails specifically? A few reasons:

  • Ruby on Rails is an open-source web framework based on the Ruby programming language.
  • Rails is a database-agnostic MVC framework that chooses convention over configuration, which means that it’s strongly opinionated when it comes to architectural decisions, naming conventions, paths and patterns.
  • Rails is a full stack web application: it includes libraries to manage frontend code, supports SASS and CoffeeScript, and does not need an external tool to manage compiling. It also includes a very opinionated workflow.
  • Rails’ structure makes it easy to accommodate change. Rails is particularly good at restructuring your application flow, reusing components in a simple way.
  • Rails can easily be extended with a wide variety of external libraries, distributed through Rubygems. It implements other best practices and methodologies in web development: TDD, REST, and DRY are among them.

To summarize, Rails is a powerful web development framework that lets you be more productive when working on complex projects.

##Course goals Return to top

By the end of the semester, through coursework and projects I aim to have a competent knowledge of:

  • Ruby, including but not limited to: Classes, methods, types, flow control, I/O, modules, Exceptions, Testing, Gems
  • Ruby on Rails, including but not limited to: MVC model, Active Record, Action Controller, Action View, Action Pack, Testing, Routes, Filters/Callbacks, Debugging, Ajax, Action Mailer, Web Services and XML, Extending Rails, Benchmarking and performance, Deployment
  • Exposure to other web technologies: HTML/CSS/Javascript etc.
  • Git and Github: Use revision control and keep all course repositories on github
  • Heroku: understand the different Rails servers (Thin vs Unicorn) for deployment
  • Test-driven-development
  • Behavior-driven-development
  • Product Planning: user stories, use cases, wireframes, and mockups
  • Exposure to web APIs: Twitter, Gmail, Google Maps, MailChimp, Stripe, etc.
  • Take steps towards learning the ropes of becoming a successful developer in the modern open source driven Rails Community.

##Course overview Return to top

Weeks 1-8: Fundamentals of Ruby and Ruby on Rails

Weeks 9-11: Build a payments site using Stripe

Weeks 12-15: Extend site and/or work on a project of choice implementing gems of choice

##Main Course materials Return to top

Learn Web Development with Rails by Michael Hartl

Learn Ruby on Rails by Daniel Kehoe

Mastering Modern Payments: Using Stripe with Rails by Pete Keen

The Ruby Toolbox

CodeQuizzes

##Week One Return to top

Setup blog and course

Set up blog using Octopress that is made with Jekyll, a static site generator made with Rails (so I can use Rails to blog about Rails!)

Host blog on github, track blogs and changes on github

Name of blog: http://polina.io/

Blog via Octopress

##Week Two Return to top

####Exercises

Work through Try Ruby Exercises

Learn Ruby the Hard Way

Rubymonk: metaprogramming and common ruby methods

Code Academy

Ruby Koans

####Quizzes

####Homework

  • RESTful micro framework in Ruby
  • Write Blog Post
  • Update Github

##Week three Return to top

#####Exercises

Chapters 1-2 Learn Web Development with Rails

  • From zero to deploy: Version Control with GIT, deploying with Heroku
  • A demo app: planning the application, the Users resource, the Microposts resource

Chapters 1-8 Learn Rails

Jeffrey’s introduction to Rails

Rails for Zombies

Rails intro screencast

Git Immersion

#####Quizzes

  • Learning Unix for OS X
  • Basic Git Commands
  • Basic Git
  • Git Rebasing
  • Git branch off a branch
  • Git interactive rebasing

####Homework

  • Implement Git in Ruby
  • App from Learn Rails: Contact form, save to Google Drive
  • Update Github
  • Write Blog Post

For fun: Basic HTML and CSS

##Week Four Return to top

####Exercises

Chapters 3-4 Learn Web Development with Rails

  • Static Pages
  • Rails Flavored Ruby

Chapters 9-28 Learn Rails

####Homework

  • Devise for authentication with ActiveRecord and SQLite for a database
  • Devise for authentication with a MongoDB datastore
  • Update Github
  • Write Blog Post

##Week Five Return to top

####Exercises

Chapters 5-6 Learn Web Development with Rails

  • Filling the Layout
  • Site navigation
  • Bootstrap, CSS
  • Partials
  • Sass and asset pipeline
  • Layout links
  • User signup: first step
  • Modeling Users
  • User model
  • User validations
  • Adding a secure password

####Homework

  • OmniAuth for authentication with a MongoDB datastore
  • Base-camp style subdomains with Devise and MongoDB
  • Update GitHub
  • Write Blog Post

[Additional Homework]

  • Make a to-do list app with Rails

##Week Six Return to top

####Exercises

Chapters 7-8 Learn Web Development with Rails

  • Sign up
  • Showing Users
  • Signup form
  • Signup failure
  • Signup success
  • Sign in, Sign out
  • Sessions and sign in failure
  • Sign in success
  • Introduction to Cucumber

####Homework

  • Devise for authentication and CanCan for authorization
  • Integrating Rails 4.0 and Twitter Bootstrap 3.0
  • Update GitHub
  • Write Blog Post

##Week Seven Return to top

####Exercises

Chapters 9-10 Learn Web Development with Rails

  • Updating, showing, and deleting users
  • Updating users
  • Authorization
  • Showing all users
  • Deleting users
  • Using Microposts
  • A micropost model
  • Showing microposts
  • Manipulating microposts

####Homework

  • Application for a startup prelaunch signup site
  • Update GitHub
  • Write BlogPost

##Week Eight Return to top

####Exercises

Chapter 11 Learn Web Development with Rails

  • The Relationship model
  • A web interface for following users
  • The status feed
  • Conclusion

####Homework

  • Site with subscription billing using Stripe
  • Site with subscription billing using Recurly
  • Update GitHub
  • Write Blog Post

[Additional Homework]

  • Create scaled down reddit clone in rails
  • Recreate Twitter in rails

##Week Nine Return to top

####Exercises

Chapters 1-3 Mastering Modern Payments: Using Stripe with Rails

  • Introduction
  • The Simplest Stripe Integration
  • Security and PCI Compliance

####Homework

  • Start payments project
  • Blog
  • Update Github

##Week Ten Return to top

####Exercises

Chapters 4-6 Mastering Modern Payments: Using Stripe with Rails

  • Custom Payment forms
  • State and History
  • Handling Webhooks

####Homework

  • Work on payments project
  • Blog
  • Update Github

##Week Eleven Return to top

####Exercises

Chapters 7-10 Mastering Modern Payments: Using Stripe with Rails

  • Processing payments with Background workers
  • Subscriptions
  • Marketplaces
  • Additional Resources

####Homework

  • Finish/continue payments project
  • Blog
  • Update Github

##Weeks 12-15 Implement popular Gems and test Rails knowledge Return to top

Quizzes to test Rails knowledge

  • MVC without generators: Create a RESTful model, view, and controller without using any rails generators.
  • Nested Resources: Create the model, view, and controller for a nested resource.
  • Database Queries: Structure database queries to get specific information from a database efficiently.
  • Polymorphism: Make a resource that belongs_to two other resources for nested comments.
  • Active Record: Associations, delegation, callbacks, etc.
  • Many to Many Relationships: Rails practice problems on has_and_belongs_to_many and has_many :through relationships

####The Ruby Toolbox

Choose several of the following areas and create apps with a focus on implementing popular gems in those areas:

  • Active Record Plugins
  • Background processing
  • Code Quality: code metrics
  • Communication
  • Content Management and Blogging
  • CSS
  • Data Persistence
  • Dev Tools
  • Documentation Tools
  • Graphics
  • HTML and Markups
  • Javascript
  • Maintenance and monitoring
  • Package and depedency management
  • Provision, deploy, host
  • Rails plugins
  • Security
  • Testing
  • Time and Space
  • Web apps, Services, and Interaction

####Homework

  • Work on project(s)
  • Update blog
  • Update Github

####Optional Quizzes

####Learn/test Javascript knowledge

##Additional Resources Return to top

Books (in no particular order)

####Podcasts

####Meetups

####Conferences * railsconf 2013 talks- Portland

####Hackathons

####Community

[Feel free to this on ]