Lets face it - Ruby is a great language and wrapped with Rails it allows to craft napkin idea to working, real-world prototype in record short amount of time.
These capabilities prove to be golden for Silicon Valley startups where speed of execution means difference between life and death (VC or nothing).
Once done - startups are praying for a quick exit until the issues of gems mess, scaling, performance and deployment nightmares start raising their ugly heads and requires ample continuous investments in administration and management talents to keep things afloat.
Serious multi-billion enterprises need performance, guarantees of commercial support from big vendor, speed of compiled languages and cannot afford to use interpreted languages and have their feet stuck in all that swamp.
Hence they use Java and dot NET. That's a fact of life.
Given that you will have to figure out scaling issues eventually anyway, the speed of compiled languages should NOT be weighed heavier than programming ease in your decisionmaking. Programmer time is FAR more expensive than hardware these days.
Actually it matters a lot. Since when the programmers manage servers? More servers = more people managing them. And if for a compiled language you need 2 data centers for Ruby you need 20... And level 4 data centers are expensive.
Ruby is great at what it does. I don't see Node.js replacing it anytime soon. But Ruby won't be in enterprise anytime soon also.
I've toed this line for a long time, but concern about performance is really starting to be an issue for me when I make a decision about what language/framework to use. Here's my line of thinking:
"
If another language can provide 10x more performance in 2x the code of Ruby, that's a tradeoff I'd seriously consider.
If I do ever have a hit on my hands, and it starts scaling quickly, there's a cost, management, and maintenance issue to bottlenecking myself with Ruby.
"
I realize that there are many parts to a system and that other parts encounter scaling considerations before the programming language does - ie database.
However, it seems there are known, quick to implement solutions that can solve the data scaling problem in a cost effective manner. Reimplementing my application logic with another language seems to be a very cost-ineffective and time consuming task.
I'd rather head that concern off at the pass by picking that language with 10x the performance and 2x the amount of code.
What if there are languages that offer 10x performance with the same amount of code? And what if there are other languages that have not only faster runtimes, but are also much faster to code in?
Correlation is not causation. A 600x performance difference doesn't suggest a language-level performance issue. Quite the opposite, in fact! Multiple orders of magnitude performance problems are usually algorithmic in nature, or a really hard physical bottleneck.
Point taken; thinking about it more, AIUI they had a 1 request - 1 thread model, whereas our architecture was (despite the old tech) more event-driven.
Still, what do you think is a typical ratio? I've read pieces suggesting language-level overhead of 60x-70x is normal.
For the exact same algorithm of moderate complexity, there should be less than an order of magnitude of performance difference between any languages, from a high-level language like Ruby to hand-coded assembly.
Performance issues come from blocking and bottlenecks, not programming language choice. Waiting on database queries, waiting on networks, waiting on disk - those hurt. Using O(n^2) algorithms when O(n log n) or O(1) could be used hurts. Bad indexing on data sources hurts. Handling excessive or redundant data hurts. Threads that could be doing work getting blocked (or deadlocked) by other threads that could get out of the way in a better architecture - that hurts.
Programming languages, that's nothing. And in Ruby's case, even that limit can be addressed. Ditch the perceived inefficiencies of the Ruby interpreter in favor of JRuby running on the highly tuned JVM, and see if things are faster.
The type of performance, guarantees of commercial support, and quality of product that only serious multi-billion enterprises like CGI federal can provide!
There are no silver bullets in software development; all projects can fail. The only difference is that with ruby or other dynamic languages, it'll fail faster and cheaper.
These capabilities prove to be golden for Silicon Valley startups where speed of execution means difference between life and death (VC or nothing).
Once done - startups are praying for a quick exit until the issues of gems mess, scaling, performance and deployment nightmares start raising their ugly heads and requires ample continuous investments in administration and management talents to keep things afloat.
Serious multi-billion enterprises need performance, guarantees of commercial support from big vendor, speed of compiled languages and cannot afford to use interpreted languages and have their feet stuck in all that swamp.
Hence they use Java and dot NET. That's a fact of life.