This tongue in cheek post by Dion about Ruby not scaling made me chuckle but also got me thinking!
The whole question of whether a modern language scales or not is really the wrong question to ask. Almost any language will scale horizontally. Here’s one anecdote as an example: when we were going through the language selection process at GreatSchools several years back we rewrote some key pages in PHP, Java, and Perl (mod_perl) to try them out. Not surprisingly we found that under load test all of the solutions scaled within 5 percent of each other after some tweaking.
Over the years I’ve faced scalability issues with Perl, PHP, and Java in companies getting close to outgrowing their data centers and regardless of language we’ve always attacked the problem successfully from the same 3 points: database optimization, session handling approach, and page/fragment/dbresult caching. The bottom line of scalability is that it’s all in how you write and architect your application and not which language you use! Will Java/Ruby/C#/Perl/Python/etc scale? Of course they will and when they don’t it’s usually the application that’s the problem and not the language.
Given that salaries are MUCH more expensive than hardware I no longer worry about whether a language will scale. The real question is how productive people will be in the language and even that is really a question of available higher level frameworks than of language.
Todd,
Hear, hear. I totally agree with you. My scaling skills all revolve around how to Give the DB a Break via caching at all levels.
This is pretty darn easy for web applications. There are some large enterprise applications that do need different thinking, and for those I won’t use certain tech stacks. But, this has been 1 or 2 projects in my lifetime 😉
Cheers,
Dion
Any computationally-intensive project requires a fast language. Many projects have nothing to do with databases or frameworks.
Slava, I agree that there are some cases where a lower level language like C or even Assembly makes sense but I’m talking about the general question everyone keeps asking when they say “Will language X scale” where X is a high level modern language used for solving general business problems.
I will grant you that if you’re asking it in the context of writing a global weather simulator then it might be a worthwhile question, but for writing a website, webservices, database driven application, batch processing job, etc… it’s a silly question because 99.9% of the time you can scale the application horizontally via hardware less expensively than you can scale developer productivity.
>The real question is how productive people will be in the language…
Since GreatSchools is a Java shop, does this mean that you’ve found Java to be the most productive language?
We made the decision as group but I was definitely leaning towards Java and lobbying for it! At the time (late 2003 – early 2004) I felt that Java had the best offering for productive web development with a good choice of MVC frameworks, OR Mapping, IoC, testing frameworks, etc…
If we were going through the same selection process now I might lean more towards using Ruby on Rails as I find it a little more productive personally because you don’t need to spend as much time integrating frameworks, dealing with deployment, recompiling and generally dealing with the issues that go along with all of that.
That said, I’m really pleased with our Java setup at GreatSchools and I think it’s proven to be a great fit for us. Now that we’re past the framework integration issues and running smoothly on it I find it to be very productive and to be honest, I still slightly prefer Java as a language over Ruby. I just think Rails is a stronger and more comprehensive web framework.