… are ones made in ruby!
At my day job where I can argue is where I am moonlighting, we use Ruby. Everything in the Bay right now is Ruby this, Ruby that. Let me tell you ease of development comes with a cost and you will be in a lot of technical debt.
Issue #1 Ruby is too flexible. Yes, something can be too flexible. I am always learning a new way to do something in Ruby. Its rather annoying because I am tired of benchmarking stupid like things like making an array. That should not be a discussion in the work place when I delivering a product that is more than array so I have to profile more than I need to. I am an engineer which means by definition, I am lazy,
Issue #2 Ruby’s Garbage Collection is the worst. It is in fact, the worst one that is out there. Matz has recently addressed this and in Ruby 2.1 they should be addressing this. I will believe it when I see it. I look at the newer languages like Go, Scala and even Node.JS are killing Ruby in performance but I can’t wait for it to catch up. My products exist now.
Issue #3 Ruby is I/O Blocked. Face it, the world of programming is changing. We are moving to an event-driven programming model and if you don’t know EventMachine, you are in for a steep learning curve. This should be the way that everyone starts thinking because async a hot phrase right now. To do something in the background, you need to use Resque or SideKiq which means Redis. Another topic of how people abuse Redis.
Issue #4 Ruby is Single threaded. Normally, this is okay if you don’t need it. I love programming Node.JS apps which is a single threaded app but that is also not I/O blocked. Here is my favorite part though, I can still create threads in Ruby which are not real threads. So you still have to wait for one thread at a time because most people are probably running MRI. WTF? To actually thread you have to move to JRuby which poses the problem that not all gems are written in C.
These are my four main gripes with Ruby currently. Its hot right now to use it for everything. You should evaluate what you need before implementing it. What you gain in developer speed may end of costing your business more down the road to either redo it in another language or to implement more servers which can get expensive.