Roadmap for Learning Rails

Accelerating Your Learning

bloodhoundIf you have no prior development experience, one of the worst things you can do when learning Rails is to just dive in. Some of the concepts build on each other, so jumping in would be like signing up for a calculus class before you’ve learned algebra. Sure, you could muddle through it, but most of your time would be spent trying to figure out why things aren’t working.

Another difficulty for a beginner is figuring out what to learn. SQL, XHTML, CSS, XSS, RDF, RDBMS–what should you drink from the fire hose of acronyms? Which topics are worthwhile for a beginner to learn and which are better left for later?

Another mistake is spending too much time mastering a concept when you only need a basic understanding.

Therefore, to accelerate your learning, learn the right things in the right order at the right depth.

The following roadmap will help you do exactly that.

But First Some Ground Rules…

It takes a significant investment of time to learn Rails. It will be months or even years before you are a productive Rails programmer. So don’t make the mistake of choosing Rails when you should be learning something else! Before committing to Rails, you should:

  • know the difference between a web site and a web application
  • know the difference between a CMS and a web application
  • know the difference between a programming language and a web framework
  • know that Rails is a web framework (not a CMS, not a programming language) that helps you create web applications

Otherwise, you will waste your time learning Rails when all you really needed was WordPress.

Update: In addition to this roadmap, you should also check out the very nice screencast Getting Started with Rails.

Roadmap for Learning Rails

Here is a roadmap specially designed for a beginner to navigate their way to Rails mastery. Blue boxes represent technologies and green boxes represent intermediate goals. Arrows represent learning dependencies. Below the roadmap I’ve listed more information about learning each technology.

I’ve intentionally structured this roadmap so that you can learn one thing at a time. That way, you’ll spend more time creating and less time confused.

Learning Rails Roadmap

Ruby HTML CSS JavaScript DNS and Hosting nanoc Rack Heroku Sinatra Rails Git SQL

Ruby

Ruby is the most important technology to know when learning Rails. Take the time to get comfortable with Ruby. If you have never programmed before, this will take a while. Avoid the temptation to skip ahead without Ruby competence. You will pay for it in the purgatory of awful debugging sessions.

Make sure you fully understand object-oriented programming and that the language constructs are second nature to you. Given a programming problem, you should be able to generate several different solutions and explain the strengths and weaknesses of each. You should know how DSLs work. You don’t need to be an expert in Ruby, but you shouldn’t be struggling with basic concepts like each, modules and symbols.

There is no such thing as a good Rails programmer who is not a good Ruby programmer. Your Rails skills can only be as good as your Ruby skills.

Key Concepts
The concepts you will be learning are too numerous to list. Suffice to say that you could make an entire roadmap dedicated to learning Ruby.
Tools
You need a text editor with syntax highlighting; TextMate is a good choice for beginners. If this is your first text editor, don’t let some evangelist talk you into using vim. You can always learn that later.
References
Learn to Program by Chris Pine is an excellent Ruby book for beginners.
try ruby! is a fun way to jump right into Ruby right now.
The Ruby Programming Language is a great in-depth guide. (By the way, the best programming books are from O’Reilly and The Pragmatic Programmers.)

HTML

HTML is a text markup language, not a programming language, which makes it much easier to learn than Ruby. Start by learning HTML 4 and save HTML 5 for later.

Key Concepts
markup, tags, attributes
Tools
The W3C validator can check your HTML for errors.
References
W3Schools has an HTML tutorial as well as an HTML reference.

CSS

Now that you know HTML, use CSS to give it some style. Your goal should be to understand the basics. You should know how to add styles to your web page and understand the box model. After you understand the basics, move on. Lack of CSS knowledge won’t get in the way of learning other concepts.

Key Concepts
box model, selectors, stylesheets
Tools
There is a W3C validator for CSS.
Use Firefox as your development browser and install Firebug, which is a great tool for debugging HTML and CSS in the browser.
Web Developer is another great Firefox add-on that you should install.
References
W3Schools has a CSS tutorial and reference.

DNS and Hosting

Since your goal is to become a web programmer, you should put something on the web. First, you need to know HTML (and optionally CSS to make it pretty). Then you need to find a web host to host your web page. You can usually find one for free or a few bucks a month. Then you need to buy a domain name from a registrar such as Namecheap. Finally, you need to understand just enough about the Domain Name System (DNS) to point your domain name at your web host. (By the way, registrars often provide hosting as well.)

You really don’t need to put something on the web to learn Rails. However, I think it’s a great idea to get something on the web as soon as you can so that you gain the experience that can only come from managing real web sites. You can start small. For example, I launched the world’s smallest web site at instantzendo.com. Publishing something on the web is a great morale booster, too, so do it as soon as you can.

Key Concepts
DNS, registrars, web hosts

JavaScript

You may notice that JavaScript is shown as a learning dependency for nanoc. This is not quite accurate; you don’t need to know JavaScript to learn nanoc. The reason that JavaScript is shown here in the roadmap is that after you’ve gotten comfortable with HTML and CSS, that’s a good time to explore JavaScript.

Your goal should be to learn just the basics. Learn how to load JavaScript files into your web page and how to insert JavaScript directly into your HTML. Learn how you can manipulate the DOM with JavaScript. Learn just enough about JavaScript so that you know what it is and how to use JavaScript that other people have written. That’s all you need to know for now. Later, when you are learning Rails, JavaScript will come up now and then but you won’t need to write any yourself to learn the basics of Rails.

Key Concepts
functions, scripts, DOM
References
W3Schools has a JavaScript tutorial and reference.

nanoc

By now you should be competent in Ruby as well as HTML. nanoc combines these by using Ruby as a tool to help you write static web pages.

nanoc is in no way related to Rails, so you can get away with not knowing it. However, it’s a great next step in the roadmap since it combines Ruby and HTML without adding a lot of additional concepts. It’s also a great tool to have in your toolbox. I use it myself.

The main Rails-related concept you’ll learn here is how to embed Ruby inside of HTML.

Key Concepts
layouts, templates

Rack

With Rack, you are officially leaving the world of web sites and entering the world of web apps. No longer are you sending static HTML files to the browser; you are programmatically building HTML on-the-fly to send to the browser.

Rack is a great foundational concept. It forces you to understand HTTP, which is required if you are going to be a good Rails developer. Rack is also the technology that every modern Ruby web framework and web server uses, so time spent learning Rack is time well-spent.

Note that you don’t need to know nanoc to learn Rack; Rack is simply a good next step after you know nanoc.

Key Concepts
HTTP, dynamically-generated web pages
Tools
Firebug allows you to see the HTTP conversation between your browser and the web server.
References
I learned Rack from remi’s screencasts and would wholeheartedly recommend you do the same.

Git

Git has no learning dependencies, so you can learn it whenever you want. But you need to know it before you use Heroku.

Git is a version control system so it basically helps you keep track of changes to your files. Don’t underestimate the learning curve of Git. There are a lot of concepts to learn and some of the commands are counter-intuitive. Take the time to understand Git well; it will pay off later. But don’t bother learning everything about Git. Learn what you need to know to manage a typical Git workflow. Note that if you are working by yourself, your workflow will be different than those working in teams.

Key Concepts
version control systems
Tools
If you are on a Mac, GitX is a nice visual interface. But don’t use this instead of Git’s command line interface; use this to augment the command line interface.
GitHub is the home for the Ruby community’s open-source projects.
References
The Git Community Book

Heroku

Heroku is your friend. They are saving you the trouble of learning how to administer a Linux web server. And they are helping you for free. You should give them a hug.

Now that you know Rack and Git, you are dangerous. Write a Rack app, put it in a Git repository, then push this Git repo to Heroku and they will put it on the web for you. You will have published your first web app. Welcome to the club, fellow web programmer!

Because you haven’t learned about databases yet, you will be limited in the kinds of Rack apps you can create. However, you can still write a useful Rack app without a database. My 2rgb.com Rack app (which is hosted on Heroku) is simply a Ruby method wrapped up as a web app. If you’re curious, here’s the source code.

Heroku is not just good for learning and for Rack apps, it’s also good for production Rails apps.

Key Concepts
awesomeness

SQL

Almost all web apps are backed by a database and most of these databases are RDBMSs that understand SQL. Take the time to learn the basics of SQL: what a relation is, SELECT statements, etc. But don’t get too deep–Rails hides the SQL from you so you don’t need to know much in order to learn Rails. However, you should become more familiar with SQL later in order to write professional web apps.

You may hear a lot of discussion about NoSQL. Save that for later after you’re comfortable with Rails, since most Rails apps still use RDBMSs.

Key Concepts
RDBMS, SQL

Sinatra

Sinatra is a simple Ruby web framework that is much easier to learn than Rails. The first thing to do is convert a Rack app you wrote into a Sinatra app. Then create a database and use ActiveRecord to interact with your database from within Sinatra.

You don’t need to know Sinatra to know Rails. However, it makes it easier to learn Rails since it introduces you to web frameworks without the complexity of Rails. Sinatra is also a nice web framework to know and later on you may prefer Sinatra to Rails for some projects.

Key Concepts
web frameworks, ORM

Rails

It is common to feel disoriented when learning Rails. The framework does so much for you and there is so much magic that it’s hard to understand the flow of control and how the different parts of the framework relate. However, if you’ve followed this roadmap, this shouldn’t happen to you.

Key Concepts
Ruby on Rails, MVC
References
Check out the comprehensive Ruby on Rails Tutorial: Learn Rails by Example by Michael Hartl.
Agile Web Development with Rails is a popular Rails tutorial book.
RailsCasts are an excellent way to learn about various Rails topics.

Five More Tips to Accelerate Your Rails Education

...but don't go too fast.

...but don't go too fast.

Always Be Producing
When you are learning a new technology, always create something with that technology. Are you learning HTML? Make a web page. Learning Rack? Launch a tiny web app. Producing something real keeps you focused on learning the right things. Learn by doing.
Don’t Learn Alone
Watch experts as they work. Notice what tools and technologies they use. Pair program.
Know Why It Exists
Every technology was invented to solve a problem. When you learn a new technology, learn who invented it and what problem they were solving. Things will make a lot more sense when you do this.
Follow the Crowd
When you’re first starting out, don’t make unusual choices, such as learning to program Rails on Windows. One of the strengths of Rails is the community, but if you’ve made unusual choices, you’ll quickly find yourself without much help.
Organize Your Knowledge
As you are learning Rails, you’ll encounter an enormous amount of information. Create a system to organize this information so that you can quickly find it later. The act of classifying this information aids your learning.
You can skip to the end and leave a response. Pinging is currently not allowed.

64 Responses to “Roadmap for Learning Rails”

  1. Regarding learning Ruby: _why’s (poignant) guide is hands down the best book related to programming ever written. I think it’s especially interesting for someone without a comp. sci. background: it is incredibly engaging, fun, imaginative and easy to read, written by a legend of the Ruby community, and covers a lot of “basic” concepts (especially in OO) that might be overlooked in other books.

    Here’s a mirror of the PDF:
    http://www.ember.co.nz/resources/whys-poignant-guide-to-ruby/

    Apart from that, I think it’s an interesting roadmap (I’m learning rails too, yay!). I’m not sure I’ll try nanoc, but I’ll definitely go deeper into Rack at some point.

  2. Very complete – nice job. However, if one follows your roadmap it’ll be a long time before you get the gratification of seeing your first web app up and running. You can dive into Rails before you learn Ruby (actually, Rails is Ruby), and you can get a web app running on your local machine within a couple of days (at most) of working through the Rails tutorials. It’s fun and will surprise you at how easy it is.

    That being said I had some programming experience (albeit not OO) to begin with. But I started learning Rails before I knew html, javascript, or CSS, and I had my first Rails app hosted on a web server, with lots of Javascript and HTML within 30 days. But it was pretty intense.

    The only big item you’re missing is learning about relational databases and the basics or SQL. If you don’t understand how a relational database works, and the concept of data normalization, you’ll be in for a hard time.

    Anyway, I like your roadmap and thanks for putting it together, but don’t be afraid to dive into Rails at the same time as you learn Ruby.

  3. Absolutely fabulous! I have been jumping around on many of these components over the past couple of months in my effort to become a Rails Guru, with moderate success. This well-thought-out plan comes at the right time. Now for a more focused approach!

    Thanks a lot for this, Wyatt!

  4. rodrigo3n says:

    Define this blog post with a single word: Great!
    P.S: An awesome source for leaning Rails is the Rails Guides, it’s like a book you carry on your pocket, really useful (and updated!) :-)

  5. Spencer Carnage says:

    I’m a junior ColdFusion programmer that’s looking to expand into the world of Rails/Ruby and this post seems to be exactly what I need to get started. Thanks!

  6. Tom Morris says:

    Hey, techiferous. Fantastic post. Is there any chance that you could release this post under a copyleft licence (CC-BY-SA, CC-BY or public domain) so that others can use and extend it. It’d be useful if bits of it could be changed out or extended for other technologies: so a Python programmer could switch out the Ruby bits for Python. It is exactly the sort of thing that is useful for starting to build up a sort of learning dependency graph…

  7. techiferous says:

    Hi, Tom. I’d be flattered if people want to use this information further. People should feel free to use, copy, modify, and/or disseminate the information in this blog post for educational purposes. I just prefer that people would reference me as a source, that’s all.

  8. Chris H says:

    Techiferous, great article. Great roadmap. There are so many elements of Rails that it is easy to get lost learning some of the details.

    I think following this roadmap would have given me a better base… and I would have had more insight, once I really got into rails, to recognize when certain details were taking more time to understand than they were worth.

    So that it is not overlooked, I think your ending suggestions “Know Why It Exists” and “Organize Your Knowledge” are tremendous. I only wish it “Watch experts as they work” seemed possible — where does one find experts they can watch?

  9. Chris H says:

    I echo Luke’s question about how to gain “employability.” Just publishing an app or two is _not_ enough IMO.

    Choosing & creating _the right_ apps, that are effective portfolio builders, is key. I’ve learned the hard way.

    Room for a followup post!

    (Thanks for all the links you provided in the article — very helpful!)

  10. techiferous says:

    Thanks, Chris! By suggesting “watch experts as they work” I was envisioning going to hackfests, user groups, conferences, etc. and pair programming or shoulder surfing. If you don’t have this luxury, then you can at least peruse code on github to see how other people program.

  11. Hplogsdon says:

    Fantastic post. Regarding TDD/BDD, as a guy still getting the more advanced Rails ideas under my belt, I wouldn’t worry about them just yet. Having a simple application that works is a great start, but we all know that the first is always a great learning experience. Most people on this roadmap will still be struggling with Ruby, and the testing framework DSLs, along with the Rails DSL, is a lot to take in at once.

    My opinion is BDD/TDD is best learned when you decide to redo a simple, but functional, application. At that point you’ll know what the thing should do, so you won’t get caught up in the language of how it should do it. Then you can compare the two on how clear and concise your code is, and how much better you are as a programmer.

  12. Mike Pakhomov says:

    Thank you! Excelent post!

  13. rob says:

    Thanks, but I dont believe this. you can just have basic HTML and CSS knowledge. Learn only the core, and only what you need. dont learn too much stuff that you dont need. Eg. If you create want to write a book. just need to learn how to write and be focus on the idea of the books, you dont need to learn the publishing stuff.

  14. techiferous says:

    @rob This article is aimed at someone aspiring to master Rails. To have mastery means you need to at least dabble in peripheral technologies in order to make decisions with good context. If you don’t have the goal of becoming a professional Rails developer then yes, I agree that you can learn only what you need for whatever you are trying to accomplish.

  15. rob says:

    Yes, I agree Wyatt. depends on your intention. I found some of your articles are helpful and inspiring. thanks for sharing.

  16. Jack says:

    As a complete beginner it was difficult to find this kind of straightforward advice on how to approach learning RoR. Thank you so much for the direction.

  17. techiferous says:

    @Jack: Wonderful! I’m glad you found value in this; that’s exactly why I wrote this.

  18. Pete Dunham says:

    Wyatt,

    Ma’te, listen ! This is excellent roadmap.

    I am seasoned developer, also web developer. I coded JAVA and I used to teach JAVA.
    [ Struts, Servlets, Tomcat, some others, etc.etc.]

    So, I know how to learn from my experience. Also, I know what difficulties that people face with during their learning, especially programming.

    I started learning ruby and ruby on rails and come across your article.
    I didn’t get into rails first, since – as you say – it might be confusing.

    I definitely agree that ruby skills are very important for rails, or for being in the ruby world.
    [ web development or not ]

    I have written a Tetris game with ruby using Goshu game library. It was nice and fun experience.

    I started reading rails guides, did something very basic, like small web applications, used RVM on Ubuntu etc.etc.
    All these ruby, ruby on rails, gem and code reading stuff.

    After all these personal buzz:
    Since I am in the phase of shining my ruby skills and learning rails I will follow your roadmap.

    PS: Thanks a lot for including nanoc here, it definitely is very important, I do totally agree. Also, I was going to use Jekyll for my blog and company articles but after seeing nanoc, I have decided to use nanoc. It is really cool one.

    There is a lot to write about this learning process but I better stop now 😉

    All The Best,

  19. Shahid K says:

    Brilliant work man, I’ve been looking and searching for something like this for quite some time now. Things can get a lot confusing for the beginners, and the more they read the more muddy it seems to get. This is very helpful, Thanks!

  20. Chuck says:

    This is an excellent post. I appreciate coming across this resource. I have searched the web for similar posts on how a beginner “non-programmer” should ideally get up to speed on Rails and nothing else comes close. I am also happy to see that your recommended path is very similar to what I have been outlining for myself. Thanks.

  21. Rooby G says:

    I think the easiest way to get to Rails or Django or other similar framework is to start by learning HTML, then CSS, then Javascript, then PHP + MySQL, then Rails/Django/etc.
    HTML will teach you basic web markup. CSS will teach you basic design. Javascript, basic interactive functions in the browser. PHP, server-side knowledge and how to create dynamic pages. MySQL, for how databases work and how to use them in CRUD situations, or more elaborate ones.

  22. Jeff says:

    Your article is invaluable to me as I learn how to program. I will bookmark your site, and also reference it on my blog where I am documenting my learning process (if you don’t mine). I appreciate the effort you took writing this very informative post.

  23. Ryan says:

    Hi, really love the resource and am following it pretty closely. Two things – 1 update and 1 question:

    Update for the HTML 5 link (Dive Into HTML) is no longer a valid link.

    Question is for Nanoc. I don’t quite follow what the benefit of using it over HTML is since both are static? Why use Ruby for no reason?

  24. techiferous says:

    Ryan,

    Thanks for telling me about the dead HTML5 link. Apparently that broke when Mark Pilgrim’s online presence disappeared back in October 2011. I’ve updated it.

    Nanoc is great for drying up your static HTML files. Even though you are authoring static HTML files, they all may share the same sidebar, for instance. So to make a change in your sidebar, you’d have to manually update all of your HTML pages. Nanoc allows you to specify the sidebar HTML once and programmatically include it in all of your pages.

    The main reason I included Nanoc was to get used to HTML templates; that is, mixing code in with HTML.

  25. Eric Bouchut says:

    MozDev would be a useful addition to the Web section, as it covers HTML, CSS and Javascript:
    https://developer.mozilla.org/en-US/learn

    Thank you for this interesting post and the step by step approach.

    Eric.

Leave a Reply