Is Ruby on Rails Maintainable?
kale77in asks: "I've become a big fan of Ruby over the past few months, but I'm not at all sure about Ruby On Rails. Automatic code generation sets of alarm bells in my mind; so that, to RoR's promise of 'Web Development that Doesn't Hurt', I automatically add '...until you have to maintain it'. On the other hand, some writers and coders I respect (like the Pragmatic Programming mob) seem to be fans. I've mainly written generators in Python, to produce PHP/SQL/Java from SQL files, but I've always gone back to well-constructed objects, where extension and overloading offers more precise and maintainable customization than auto-generation allows. So is Rails just a nice RAD tool for disposable, cookie-cutter apps (which have a place, of course)? Is high-level generation just a bad OO substitute? And what has your experience of Rails' maintainability been?"
I've been doing almost pure OO programming for the past 8 years (using mostly C++ and Java)
Honestly, anyone using the phrase "pure OO programming" and referencing C++ should probably be shot in the head. All your "bold counter-claim" amounts to is that you had bad teachers and you believed what they told you.
Static typing makes it impossible to change the types (not the interfaces) of public apis of libraries and utilities. You can't change everyone's code because it is everywhere. In a dynamically typed language, so long as the interface is the same, the third party code works as expected. In Java or C++, one has to change the version (or work *very* hard to maintain both the old and new interfaces using a variety of tricks).
You may have a small point for some C++ apps but you're completely wrong WRT C# and Java. Both C# and Java do code binding late when a program is loaded rather than when a program is compiled. You can change a type or extend an interface as long as you don't break the existing interface and your program will continue to function fine. C# and Java preserve metadata, binding is based on "string" names not based on old techniqnues like method offsets.