Hartl's Ruby on Rails Tutorial


Tell anyone you’re learning Ruby on Rails and you’ll soon get a recommendation for Ruby on Rails Tutorial by Michael Hartl. After spending 6 weeks working with Treehouse‘s programing content and building a basic web app, I decided to jump into Hartl’s tutorial.

Michael is a former Y Combinator alumni and his tutorial (from now on RoRT) takes you through building a Twitter clone in Rails. It took me around two months to finish 10 of the 11 chapters, and I thought I’d share some thoughts and lessons learned.

Even simple programs require a ton of work
Hartl has us build a Twitter clone in RoRT, without using any gems for user authentication. This ends up being a surprisingly large amount of programming. I was intimidated by all the steps involved in adding validation, building different models (user, micropost and session), creating partials, passing information between different classses and handling errors.

Super thorough and complete
I’ve never met Hartl but he seems like he’d have his sh*t together in every way. The tutorial almost like an elegantly written program in of itself: it’s complete, bug-free, modular and self-referencing. Hartl specifies the exact version of every gem, database and Rails/Ruby on Rails to use. The book had absolutely zero errors from what I could tell – every time something messed up or seemed wrong, it ultimately was an issue on my end. That gave me tremendous faith in the course.

One thing that immediately strikes you about RoRT is that Hartl has you using git, GitHub, Heroku, branching and testing right away. It feels very professional, like I was doing things the way a “real programmer” would. We used a fair number of gems, but it seemed like we used the most common/established ones. We also did a lot of things by hand, which was educational and felt very hands on.

Typos = Death
At least 50% of the total time I spent doing RoRT was dealing with errors, most of them in writing test code. I retyped all the code by hand and would misspell a function name or miss a period, comma, bracket or colon, and my test would fail. It usually wasn’t clear what went wrong, and so I’d consult Google and review the last few pieces of code I wrote, but at least I always knew it was me, and never RoRT. It was tough, but I slowly got better at checking my typing the first time around, because I knew it’d save me a lot of time in the long run.

Don’t interrupt me!
Unlike Treehouse, RoRT’s chapters got considerably long. Chapter 10 took me a few weeks to finish (though this was due in part because I got rather busy) and it required a huge amount of concentration to work through the exercises. I tend to leave Gmail open and getting my concentration broken by a gChat meant a huge loss in productivity. My best work was when I set 30 minute timers for myself to power through, then switching to social media. I bet crappy managers would probably interrupt programmers way less if they experienced this for themselves.

Reloading the context
Because RoRT’s chapters are so long, I would leave my browser tab, text editor and terminal window open between sessions (often a day or more apart). However, it often took up to 10 minutes just to figure out where I was in the chapter and what I was doing. Reloading all the context was tough. I really liked Treehouse’s module’s where they would remind me: “In our last section we did X, now we’re going to add Y.” [1]

Test-Driven Development is a bitch is tedious
When I was in middle school and high school, my biggest challenge was having the self-discipline to double check my homework answers, especially in math. It was so boring and annoying, even though I’d often find mistakes in my calculations. TDD is like creating a framework to make sure you get the right answer the first time, but it’s not as fun as just coding the functionality you want to build. And yet, like double checking your answers, TDD is necessary if you really care about getting things 100% right (or having a bug-free app).

Terminal is cool
One of the great things about RoRT is that it teaches you cool tricks in Terminal. I set up a sublime text shortcut, made “b” equal to “branch”, learned how to navigate file structures, create files and other neat shortcuts that made me feel like a real pro when it came using Terminal, a program I have come to associate with programming and technical expertise.

Final Thoughts
If programming is like driving a car, then Treehouse is your buddy spending a few hours with you in a parking lot while driving 2010 Honda Civic in automatic. And RoRT is like a 3 day intensive training course on driving a formula one race car taught by exacting German instructors.

RoRT is a lot of work but if you’re careful and patient, you’ll learn a lot. I may revisit it in the future but for now, I’m off to start working on my first app on my own.

What’s your experience with learning Rails? Do you have anything to add to my thoughts on RoRT? Would love to hear it in the comments.

FOOTNOTES[1] This is possibly an unfair comparison because Treehouse is a paid product but RoRT is free. There is a screencast version you can pay $125 for which might provide more of that context, but I was just using the online version. On the other hand, most people who recommend RoRT are recommending the free online version, not the screencasts.