I've got substantial J2EE experience, have worked with Grails, and am comfortable with several languages (Perl, PHP, Smalltalk). I've decided to try a new project using Ruby on Rails. For those who've decided to migrate to a new technology stack, how do you make the transition? Do you learn the details of Ruby first (I've done a few tutorials, and feel like I've got a decent enough grasp of the language to start doing some basic work) or do you do a full Ruby on Rails tutorial, and expand your knowledge from there. I'm leaning towards the latter approach because I feel like I can delve into details of the language as I encounter them. For those who work in Ruby on Rails, how did you learn, and which resources do you recommend?

5 Answers
5

The best way to learn a new language is simply to use it (reading tutorials won't make it 'click') and one way that I've been assured is fantastic is through writing tests. I'm yet to try this myself (and will do so this weekend) but give Ruby Koans a go and let me know how you get on :)

I learned Rails by going through the Agile Web Development with Rails book and immediately applied everything that I learned to a real web project. I ended up with a rather substantial application (mykidslibrary.com) and a deep understanding of the framework.

There's that saying that if you spend 10,000 hours at a task you'll become an expert. So I'd say "get coding!" If you've done the tutorial then write some code to scratch an itch or join an open source ruby on rails project.

If your employer is brave/trusts you - perhaps you can build a small but useful real world project as well.

A crucial part of any project is the purpose it is aimed to satisfy. If you are just reading about a language or copying some program, the purpose isn't there, and it's just like painting by numbers.

Choose a project of your own initiative (though you can get ideas from others), not a big one, and tackle that. That way all parts of your brain will be engaged, you'll have fun, and everything you learn will be grounded in a purpose.