Yes, learning Rails is only a small part of learning Rails. That’s because… Learning Rails is not about learning Rails!
There are some mind-maps scattered across the Internet that try to explain why learning Ruby on Rails is hard. The main reason? It requires you to know a lot of different domains from databases, to design patterns, to…well, Rails itself.
Yes, learning Rails is only a small part of learning Rails. That’s because…
There are two important books for newbie Ruby on Rails developers: “Agile Web Development in Rails” and “Rails Tutorial”. In each one, it's clear from the beginning: Thou shalt use Git. Thou shalt write tests. Thou shalt refactor. Thou shalt be agile.
Wait a minute... That's not Rails. That’s software engineering! And it can’t be taught this easily. Yet somehow it’s the only approach that works well.
Before I discovered Rails, I was torn between a few different languages and contributing to various open-source projects. Armed with only some Python and PHP (yeah, I said it), I encountered my first major barrier—all projects use this thing called a version control system. And every single project uses a different one! I choose one and learn it. Then, I have to learn how to write code again, because now I have to think about what and where I’m committing. It took weeks before using a VCS became part of my flow, because of previous habits. This is a much larger topic to learn, and one that isn’t part of “learning Rails,” but rather learning how to be a software developer.
There’s a good reason why you should learn all concepts of software engineering at once. You will know how all the pieces fit together. Yes, this means that your billion-dollar side-project will be delivered later, because you have to learn the simple stuff: like how to take care of test coverage and DRYing stuff out. And with increased code quality, you’ll spend less time debugging and finally deliver it like a boss.
Getting rid of bad habits is even harder than cache invalidation and naming things. Luckily there are some mantras that you’ll see over and over again: red-green-refactor, TATFT, etc.
As Kent Beck says:
“I’m not a great programmer; I’m just a good programmer with great habits.”
And by learning Rails, you can become one too! Use Test-Driven Development and Git from the start, and you’ll have these habits ingrained into you. Your learning process will take more time, but you’ll win in the long run.
I’ve tried to read “Design Patterns”. Three times. It’s a great book and it saved my life on multiple occasions, but only after I had read “Design Patterns in Ruby”. I finished the latter in three days. That’s when I understood why Ruby and Rails communities do not value academic backgrounds as much as other communities do. They value pragmatism over pure academic knowledge. My job is to do my job and know how to do it well—my job is NOT to have encyclopedic knowledge of every computer science book.
To work well, we have to understand real problems and their possible solutions. An analytic mind is a great asset in software business, but top-level developers use their intuition. Understanding and communication are invaluable when it comes to problem-solving in a collaborative environment. Most authors in Rails community make a great use of those skills when they are writing a book for noobs like us.
There’s a finite amount of books to read, but knowledge and experience of the community seems to be infinite. There are people always waiting to help you with your issue. Just check out Stack Overflow or visit IRC channels like #ruby-lang or #rubyonrails. Sometimes they’ll help you right away, sometimes they’ll recommend you a good read, but no one will ever be rude—that is, unless you refuse to do your homework.
There are other advantages to open-source software beside it’s price. You can learn from it. Contributing to your favourite project will not only make it better, it will make you better by getting you to use your programming and communication skills. There are many active Ruby on Rails projects and there’s never enough developers. Teamwork experience can be more valuable for your employers than anything, even the fanciest hacks collecting dust on your hard-drive.
Go read a book, start a project, get in trouble and then ask a friendly hacker for help. Rinse, repeat, then write a blog post about what you’ve learned and help someone else along the way. Learnings Rails takes time; you’re learning to be a good software engineer, not just a Rails developer. With the right direction, learning Rails certainly will be less hard than it is rewarding.