Slashdot Mirror


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?"

2 of 348 comments (clear)

  1. Re:Bad OO Substitute? by droleary · · Score: 1, Flamebait

    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.

  2. Re:Static vs Dynamically Typed maintainability by TummyX · · Score: 0, Flamebait

    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.