Roadmap for Learning Rails
techiferous.com
techiferous.com
The first question I think is: Who wants to master Ruby/Rails and related technologies? Very few who aren't already developers - at least not at first. We're all cognitive misers. Most people want to learn the minimum to get the job done. Also, for a complete newbie, learning is usually optional. People need to be encouraged to learn a little and then keep building.
For example, when I've taught others CSS/HTML, I used to start with big overviews and then moved forward. Now, I found it's much more successful to give people the tiniest bits of information they need to do something and then building from there. People learn better when they are eager to learn.
Once they start investing some time learning or trying to build their own application, they'll do what they need to do to keep up. Figuring out how to deploy to Heroku is a minor step once you're already on the path, but as yet another whole additional thing to learn, it's intimidating to non-programmers. In my case, it wasn't until I was knee deep that I started pushing myself toward any level of mastery. When I got going, I learned Rails as I needed it when I needed it.
Ruby/Rails can be learned concurrently. While I knew CSS/HTML and basic JS, I started with the framework not understanding the difference between ruby and rails. At first, I struggled with some ruby syntax, but after I spent a day focused on Ruby basics, I stopped having that problem. I built my knowledge incrementally. This approach may not be for everyone, but I believe it is more likely to encourage continued learning.
It wasn't until after I learned Ruby/Rails, that I needed and started using GIT, picked up JS and over the past three-four years grew to be a decent all around rails developer. My best learning has come from working with other developers on larger projects. As I've learned these things, it's made picking up related technologies nearly trivial. Sinatra and mongoDB were a sneeze to pick up.
If you really want to encourage total newbies to learn Ruby on Rails or any language, you need to provide them with as many tangible benefits along the way. If they take baby steps and can see their success, they will constantly be motivated to continue and (hopefully) to improve.
For me, it feel like I am learning somebody's workflow. However, the workflow is rather efficient. It just take me a long time get through all the subtle details.
Just because you learn Rails first doesn't make you not a developer, though I would agree that if you're still dependent on copy and pasting then you're really not a developer.
That said, the point of my post is to accelerate the learning process. If you have a handle on Ruby first then when you are learning Rails you'll spend more time creating and less time debugging.
But your point is well-taken and no one should look at this roadmap as the best or only way to learn Rails.
Of course, do tryruby.org first.
My roadmap would be:
1) sinatra hello world
2) sinatra hello world w/ erb template
3) deploy it to heroku
4) do something with a form (without form helpers)
5) do something with sessions
6) do something with datamapper
7) who needs rails?
It will to a developer. This is aimed at newbies. When you've been a developer for a while, so many skills become automatic to the point that they are invisible to you and you forget that newbies have to learn them.
Beginning programmers still struggle with proper indentation, for example. That's something they have to learn.
I think the key is to quickly get to something that does something interesting and can be changed in minor ways.
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.
Any feedback is appreciated, as this is a beta class, and i'm writing the material as I go.
Taking the time to learn Ruby before diving into Rails will make a huge difference. And if Rails doesn't turn out to be your thing, you still have your knowledge of Ruby for Sinatra or scripting.
The biggest hurdle in learning Rails, IMO, is that it is such opinionated software. It does so much for you if you follow convention, and the newbie follows conventions because the tutorial says to, and has this holy pogo-sticking africanized honey bees, what the dong just happened? experience. Rails is fantastic because it does so much of the groundwork for you, but it also means that there are a lot of conventions to learn, and a lot of magic that happens that can be exceptionally confusing to the beginner.
I came from using CodeIgniter, which is a Rails-esque framework for PHP. Fortunately, the "opinonated" structure etc. made a whole lot of sense to me, and in retrospect makes me wonder why I didn't jump into Rails sooner.
I've worked in CakePHP since learning Rails, and I have to say that more than anything, it makes me really dislike PHP as a language. The framework is pretty decent, but Ruby is so flexible and malleable that it really makes working in PHP painful.
By the way, has anyone else noticed that "nanoc" is "Conan" backwards?
I think that if you have prior web development experience, you can just jump right into Rails. If you have prior programming experience but not web experience, I would visit the HTML/CSS/DNS/JavaScript section of the roadmap. If you have no programming experience, then I would recommend the full roadmap.
If I were to make a workflow, it'd be this for Django: 1) Learn python with these two resources: a.This is for absolute beginners http://ocw.mit.edu/courses/electrical-engineering-and-comput...
b.Do these exercises - http://code.google.com/edu/languages/google-python-class/exe... there are some video lectures if required
2) Understand HTTP:http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Req...
3) Now onto django, follow this book along: http://www.djangobook.com/en/2.0/ keep at it and finish the book regardless of your comfort level
4) Build an easy search app from scratch to get a better idea of API's and python's awesomeness: http://lethain.com/entry/2008/jul/10/yahoo-s-build-your-own-...
5) Just make your own app
So I'd add 2b)some sysadmin knowledge: apache, config files, ssh, ...
As about other hosting issues, I usually find django's official site to be pretty thorough: 1) http://docs.djangoproject.com/en/dev/howto/deployment/modwsg... 2) some hosts - http://code.djangoproject.com/wiki/DjangoFriendlyWebHosts 3) Amazon EC2 Django - http://blog.awarelabs.com/2008/amazon-ec2-basics-for-the-cur...
http://articles.slicehost.com/2008/11/28/ubuntu-intrepid-set...
http://articles.slicehost.com/2009/3/5/ubuntu-intrepid-nginx...
http://stackoverflow.com/questions/605173/how-to-nginx-virtu... OR http://code.djangoproject.com/wiki/DjangoAndNginx
http://docs.djangoproject.com/en/dev/howto/deployment/fastcg...
Doesn't that fly in the face of the definition of Rails?
But a person who has done Rails development for 6-9 months, ad has used Git, and knows how to deploy an application to Heroku... they will really be able to do a lot of cool things very quickly. Just watch what happens in October during the Rails Rumble.