Not everyone is working on a startup trying to peddle their stuff to a zillion users and getting hammered in the process. If you ever get to Twitter/Facebook/whatever size no out-of-box solution is going to work. You'll end up doing what Twitter did which is re-architect all their infrastructure/code and tune all their stuff as much has possible.
Ruby's issue IMHO is that it has always been a Rails-centric community/ecosystem and never had the change to grow beyond that. It's still largely used to write web stuff and nothing else. Python, which is a "similar" language, has a much healthier and more diverse ecosystem being used in things like scientific computing or computer vision.
If you want to make Ruby better, grow beyond the web application ecosystem and make it more diverse.
I disagree with the assumption that Ruby is web only. E.g. Chef and Puppet are huge efforts that have no direct connection to frontend web, both written in Ruby. Vagrant as well. Ruby is big in the infrastructure world.
"Sure thing."
"Damn it feels good to be a banker."
My point was that your personal sample is most probably irrelevant.
Vagrant? Homebrew? Jekyll?
However, the author does point to problems in Ruby's performance and maturity that are problems and issues -- if not immediately, then down the road. Your point about how people are leaving Ruby in favor of people, tools, and performance in the Java world is a good one. I would like to think that JRuby is a good option for such people, but maybe not.
I found the author's ideas for modernizing Ruby to be interesting. I didn't agree with all of them, but at least he's trying to hash out some possible ways in which Ruby could improve. This sounds like a wish list for Ruby 3.0, though -- interesting ideas that would break compatibility, and that will take a while to implement. Perhaps his work, and that of Rubinius, could show us the way forward to such a new version.
In my opinion, performance is by a huge margin the chief reason I do not begin new projects on Ruby. I would rather defer performance tuning efforts and scale complexity until much later in projects' life, rather than immediately following launch when I have 100 concurrent users hitting the application.
> IMHO, Node.js is the new Ruby. It has the benefit of
> having the same language on the client and the server,
> but once again, it's going to run into similar
> scalability issues when large organizations try to use
> it. I think we're going to run into the same issues,
> of it becoming a cool bandwagon, the platform being
> stretched to its breaking point, followed by the
> realization that there are serious problems.
I think Elixir[0] may be the new hyped language. PragProg seems to be positioning[1] themselves[2] for a hype cycle on it, at the very least. [0]: http://elixir-lang.org
[1]: http://pragprog.com/magazines/2013-06/programming-elixir
[2]: http://pragprog.com/book/elixir/programming-elixirFrankly, JVM hasn't really sucked since it got a JIT compiler (J2SE 1.2, 1998) or if you prefer the switch to HotSpot as the default VM (J2SE 1.3, 2000).
Also, this is a question of resources. Once your first version succeeds, you suddenly have the funds to build a complex version where you care about all the small details.
Ruby is a _very good_ language as long as you are in the "I don't need to tune all the details phase".
Even writing you frontend in Java first would (most likely) not have helped you coping with the new-found challenges in that heights.
And not every low-traffic site is simple CRUD. If you do image processing, applying machine learning, natural language processing (or a thousand other things that are CPU intensive), it's nice that you can directly use one of the many high-performance libraries available in the Central Repository in your webservice.
Also, the example was the Twitter frontend. So I respond to Twitter frontend. Don't derail.
I'm sure they could get a speedup by rewriting the front-end, but the fact that they kept trying and fail to scale stuff that with anything remotely like a sensible architecture is network IO bound rather than CPU bound even with MRI on the hardware available when they launched was a good sign that their main problem had nothing to do with language.
Their "simple" case of updating n followers for every status update when n is small is trivially distributable with a relatively simple message bus routing fabric; their "hard" case of updating when n is excessively large is simple-ish by simply structuring the follower lists as a tree of "virtual" follower lists that acts as forwarders; you can do that with off the shelf components.
To illustrate just how basic this problem is: I've built message buses for scenarios like that using mail servers even - though if you do that, at least with a standard mail server, you will be limited by disk IO on forwarding nodes unless you spend too much money (you don't need message updates to be durable "in transit", as if the system is suitably.
Another simple approach to the large follower problem is to pull from "expensive" publishers and push from cheap ones. You can do that too with 25-30 year old software and some scripts to maintain the lists: Push via SMTP, pull via NNTP and make the "mailbox" you post status updates to for people with large follower lists a SMTP->NNTP gateway.
No, I'm not suggesting they should actually do that, just pointing out that it is viable, and it was viable with the kind of data volumes they are dealing with well over a decade ago. Yet they had problems handling it years later with a much smaller data volume than they have now.
When you get to the size Twitter is now, it makes sense to sacrifice developer effort for saving some percents here and there on servers, but their complaints about language when they started their rewrites was distractions from the real issues, whether they realised it themselves or not - it's not like they were handling data volumes at the time that lots of people haven't managed to handle with much more modest resources.
You know, one of these days this argument might catch on in other industries. For instance you go to the doctor and say "Doctor, I have a sore throat" and the doctor replies "Well, you might need your tonsils removed, but in order to do that we'd need to hire competent surgeons - how about we just punch you in the face until you forget about your throat"
Also you're flat out wrong about solving the same problems in different languages. It may be possible to solve all problems in Java or Ruby, but it is not possible to solve them in the same way - or more specifically the best, most economical or most maintainable way.
To bring skill into the equation means no one should ever have written anything in Erlang because few people could write Erlang - but people do, because competent software engineers can learn Erlang.
Also there are modern strongly typed languages which compile into JS and run just fine on Node.JS. This solves code-base scalability for large teams..
To be clear: the web would not be what it is without JS, and Node is a fascinating and innovative thing. I disagree that there are loads of people who are experienced in C/C++ are champing at the bit to go write Node. The Java/C# talent pool is massively larger than the non-frontend JS talent pool at this time, and the C/C++ talent pool is largely otherwise occupied. That could change... but it hasn't changed yet. The HN/startup scene is not representative of the software industry at large, and a lot of people writing these "languages that can compile to JS" are part of the industry at large.
That seems a bit apples-to-oranges to me. The degree of hype is similar, yes, but other than that they seem like different animals. Ruby started slow (performance-wise), with memory leaks (that were denied at first), and was predominantly a community development. Node.js is running on top of V8, which is mature, performant, and backed by Google.
Also, node.js with browserify & grunt makes for a great front end packaging & dependency tool.
This reminds me of "homebrew is a great packaging/dependency tool, it's basically as good as apt/yum/pacman"
When developers are more expensive than servers, rails makes sense.
When servers are more expensive than developers (because of scale), Java/c# start to make sense.
A few of the worlds most trafficked websites use PHP is production: wikipedia, facebook, wordpress, and hundreds of other bb forums.
1) Performance. The JVM simply scales better, it is more cost effective in the datacenter. Without mentioning names, I know of significant Silicon Valley darlings that spent huge sums trying to scale Ruby, got crushed, and eventually ripped-and-replaced the backends with Java.
2) Skill Availability. There are 7+ million Java programmers, it is easier to hire Java programmers.
3) Tool Availability and Maturity.
I think Ruby is a fine language, but I see it like PHP, great for rapid prototyping and productivity in the small, but it's version 1 for the lean startup or for the corporate departmental app. Version 2 is Java, C#, etc using the UX and product feature lessons learned from the Ruby prototype.
IMHO, Node.js is the new Ruby. It has the benefit of having the same language on the client and the server, but once again, it's going to run into similar scalability issues when large organizations try to use it. I think we're going to run into the same issues, of it becoming a cool bandwagon, the platform being stretched to its breaking point, followed by the realization that there are serious problems.