Ruby is a dynamic reflective high-level interpreted language for fast and comfortable object-oriented programming.
Ruby on Rails is a full-scale multilevel web application framework utilizing MVC architecture pattern. It’s targeted on building advanced database-intensive web apps.
What it takes from a developer?
To put it short, Ruby isn’t a newbie’s choice. It has quite a steep learning curve so usually programmers adopt it after some years of experience in some other languages. The average rubyist’s age is 25–28. The average Ruby on Rails developer is usually already an experienced professional with big knowledge in both web development and general software engineering skills.
What it gives to a developer?
One of greatest Ruby/RoR advantages is pretty high development speed. Our practice shows that average RoR projects are being developed 30–40% faster than their analogs in other languages/frameworks. This speed increase is based upon a wide choice of RoR’s building development tools, a huge number of production-ready solutions from Ruby community and Ruby’s elegance as a programming language.
One of RoR’s most important «cultural features» is its sociality. You’ve found a solution to a challenge? Help the others. You’ve implemented a really cool module? Share it with the community. This way there are thousands of complex problems solutions available in the public domain. There are AAA solutions, comment systems, financial transaction libraries, communication solutions and much more. You can always find a ready, working, tested and well-documented instrument to solve your problem rather than reinvent the numerous bicycles all by yourself.
Culture and The Standards
Ruby on Rails is a framework. Sometimes it may seem to constrain your creativity. Of course you can reinvent your own bicycle and program without being bound to any standard. This just isn’t needed. Some constraints such as files placement, coding style and design patterns make your project well-structured. Code becomes readable. You can introduce new programmers to a project quickly. Our experience shows that the project’s newcomer submits his first code in his first workday. This means there’s no problem if you pass a project from one developers team to another: RoR project is easily understandable by any RoR programmer.
Some nice development tools
The question of who and how will test this complex code is always among the hardest. You can’t always allow your company to hire a whole QC department but you always want the tests to be run accurately and automatically. Unlike many others, Rails has a powerful built-in test subsystem. In PHP world, well, you can find some 3rd party automated testing tools but they aren’t available just “out of box” and PHP programmers rarely use them. In Ruby on Rails style the code doesn’t really exist without the tests being written for it first. RoR encourages TDD and BDD (test-driven and behavior-driven development).
Cache engineering is something every serious web project must have. PHP has different data caching solutions. These tools are 3rd parties and should be carefully embedded into your code. In PHP community it’s still an open question: what and how to cache.
Ruby on Rails has out-of-the-box caching solution. You can cache the whole pages or individual objects, requests or ActiveRecord models. Besides the built-in you can use 3rd party tools such as Memcached or Redis. With RoR in 95% of all cases you won’t have to reinvent a wheel: all caching solutions are there production-ready and easy to use.
Quite often you may face a situation when your project must suddenly be translated into a different language. PHP developers in these cases would argue that the translation wasn’t the initial task and is too complex to implement. The simplest way there is just to copy the whole project over translating all needed messages.
Ruby on Rails contains the standard localization tools. You can use them both initially and lately in your project lifecycle. RoR can use different templates for different languages, hold dictionaries and do much other useful stuff.
Routing (Nice URLs)
In many PHP projects we see a picture: the page’s URI is long and cryptic. Ruby on Rails has a standard ability to fine-tune your routes, URLs and site sections. You can flexibly change an address of an arbitrary page without messing up the whole project. In Ruby on Rails community REST is considered a good manner. RoR app’s URIs are always simple, elegant and well understood by search engines.
Ruby on Rails implements all input data validation. Once you need to validate your customer’s Email, login/password validity or such, Rails’ there at your service!
Migrations and Persistence
Well-known PHP headache is impossibility to use any kind of comfortable toolkit to easily control your DB layer. DB structure is usually altered directly by hand. Because of this, a lot of surprising fields or even tables appear in the project when almost nobody can say why it’s there. Ruby on Rails provides a toolkit called “Migrations”. DB schema is stored as a part of app code and are configurable just as any normal code. Your schemas are thus versioned and well documented.
Ruby on Rails is positioned as an out-of-box secure platform. Standard RoR installation saves you from SQL injections and XSS attacks. All form parameters are safely escaped by default. All output is safely escaped as well unless you program the opposite. You can’t compromise your app’s security. Well, unless you really want to do that.
There area bunch of tools to do that in Rails ecosystem. For instance when you use Capistrano you issue one command, `cap deploy` — and your whole app is being safely deployed on whatever you use, either single server or a cluster-in-a-cloud.
Also popular in Ruby world
Version Control Systems
Ruby on Rails development implies using some version control system (VCS). Deployment tools require al least one of them. Git is the usual “best choice” . Git is also a VCS of choice if you start learning Ruby because nearly all code you’ll have to fetch as examples/libraries will be available via hosted Git repositories. Lots of unexperienced developers prefer rather to skip learning VCS and keep working with PHP until they reach better understanding of web development high-tech.
Project Management and Task Control
Ruby on Rails itself was developed as a part of Basecamp, the popular online project management solution. Redmine, the other popular task manager, was also implemented in Ruby. When you manage a team of Rails developers such tools are must-have by default. All project/task managers include VCS integration which provides with the best development workflow.
Myths and prejudices
1. There aren’t Ruby on Rails developers out there!
They really exist out there. Less multiple than PHP-sts but present. It may be because of a steep learning curve: usually programmers enter Ruby after some years of PHP. This only speaks of a developer’s quality: really good are pretty rare in any field of technology.
2. They are too expensive!
Good programmers cost you money, that’s true. But they are costly regardless of a language or a platform. Cheap developers are rare in RoR community because “bad Ruby programmer” is a nonsense.
3. Rails aren’t scalable!
This prejudice is the most popular among those who never did a really big project in Rails. RoR scales and it does it well. See GitHub, Groupon, Basecamp: all these Rails apps my have some problems but none of them suffers from being unscalable.
4. Ruby is slower than PHP!
These days Ruby isn’t slower than PHP in most general cases. The question is, is language performance lag that important? Page rendering time depends mostly on DB query time. Taking this into account, the language’s “speed” doesn’t play a big role.
Meanwhile, you can embrace the main advantage of Ruby, its high overall development rate and low cost of support. The programmers these days are orders more expensive than a couple of extra RAM modules. Finally, a project’s performance problems aren’t a result of a “slow language” or “slow platform” but actually a consequence of a poor application design.
What the famous people say
«Does the world need another language? In theory, no. We just need the Turing machine to solve all of our problems, in theory. Humans require more sophisticated tools to program. It’s a matter of human need. As long as some people feel happy using Ruby, that’s enough of a reason for another language for me. In addition, Ruby is designed to be human-oriented. It reduces the burden of programming. It tries to push jobs back to machines. You can accomplish more tasks with less work, in smaller yet readable code.» — Yukihiro “Matz” Matsumoto, creator of Ruby
«Lines of code by itself doesn’t really mean that much to me. What you’re able to express in those lines mean a lot, though. So if you’re able to write the same piece of functionality in 10 lines instead of 100 lines you’ve made huge strides in simplicity. That’s part of the argument for why Ruby is a more pleasant language to work with than say Java or C#.» — David Heinemeier Hansson, creator of Ruby on Rails framework
« Rails is the most well thought-out web development framework I’ve ever used. And that’s in a decade of doing web applications for a living. I’ve built my own frameworks, helped develop the Servlet API, and have created more than a few web servers from scratch. Nobody has done it like this before.» –James Duncan Davidson, creator of the Tomcat webserver
« Ruby on Rails is a breakthrough in lowering the barriers of entry to programming. Powerful web applications that formerly might have taken weeks or months to develop can be produced in a matter of days.» — Tim O’Reilly, of O’Reilly Media