3 ms·
Pretty much no Rails app at these large companies can even do something as basic as concurrent network requests. This is an area Ruby the language is weak in, a
by wonnage 8y ago
Pretty much no Rails app at these large companies can even do something as basic as concurrent network requests. This is an area Ruby the language is weak in, and it's extremely difficult to graft on something like concurrent-ruby to a large existing codebase that assumes all requests are sequential... Also, in the past the multithreading/concurrency story around ActiveRecord has been "it probably works, might leak connections", and you will probably deadlock your dev mode server as a side effect.
Ruby is slow for humans too. Code intelligence/IDEs are hamstrung, thanks to the constant possibility of run-time monkeypatching. You basically are stuck with grep. It's fine if you have 30 engineers all familiar with Ruby and the codebase, not so great with 100s of engineers trying to figure where things are. Things get worse if your engineers embrace writing DSLs in Ruby and you now have to debug a mini language-within-a-language.
The dirty secret at large companies is that the majority of the codebase sucks and is maintained by a legion of new grads who are doing their best to ship code before deadlines. Ruby is not the answer.
- joelbluminator 8y agoRuby has threads, when networking the GIL doesn't matter since the threads will context switch. For a company like Shopify paying for an extra 50 servers is like hiring one developer, I don't think it has much significance to them.
- anotheramala 8y agoJRuby can solve that problem. Threading in Ruby. Some companies do use it: https://github.com/jruby/jruby/wiki/SuccessStories https://github.com/jruby/jruby/wiki/SuccessStories
- ryanbrunner 8y ago> The dirty secret at large companies is that the majority of the codebase sucks and is maintained by a legion of new grads who are doing their best to ship code before deadlines. Probably fair, but certainly not unique to large companies using Rails.