Descargo de responsabilidad: De ninguna manera soy un experto en Ruby and Rails.
Como alguien que ha estado en la industria por casi 15 años, veo varias señales de advertencia que me ponen nervioso sobre Ruby on Rails específicamente. Voy a ignorar el idioma aquí porque un idioma es un idioma. Ruby es un lenguaje moderno con cierres, excepciones, OO, etc. Algunos lo critican con respecto al rendimiento. Estos problemas son en gran medida irrelevantes ya que no afectan el rendimiento en el mundo real (si se tardan 300ms en descargar y mostrar una página web, ¿a quién le importa que los códigos del servidor tarden 10, 20 o incluso 30ms en ejecutarse?) Y transitorios. se arreglan en versiones posteriores (como parece ser el caso con Ruby 1.9).
Ruby on Rails es una pila cerrada y pesada. Quiero decir esto como una observación, no como una acusación. Está estrechamente integrado (incluso con Prototype) al igual que JBoss Seam en el mundo de Java (se integra estrechamente con JBoss/Hibernate y sí sé que las últimas publicaciones y artículos han abordado el tema de usarlo con, digamos, Glassfish y otro proveedor de JPA)
Esto puede ser algo bueno y algo malo. J2EE, por ejemplo, al ser una pila bastante abierta fue la causa de mucha innovación en la industria del software en la última década, ya que casi todas las piezas (notablemente EJB) fueron reemplazadas por diferentes proyectos que podían ser ranurados juntos. Y, por supuesto, si no fue el lugar de nacimiento de Spring, sin duda fue la incubadora.
Por otro lado, tiene más pilas cerradas como .Net, donde su naturaleza cerrada permite una rápida innovación, un modelo que Microsoft (en general) ha destacado. En unos pocos años, DirextX pasó de ser una broma a derrotar por completo a OpenGL como una plataforma de desarrollo de juegos porque cualquier sistema cerrado puede evolucionar mucho más rápido que un sistema de estándares abiertos. Así es como funciona.
El otro punto relevante que mencionaré es que en los últimos años ha habido un movimiento hacia los ORM ("mapeo relacional de objetos") en Java, .Net y en otros lugares, y esto es parte del ímpetu detrás de Rails. He comentado esto anteriormente, por ejemplo, "Using an ORM or plain SQL?" y no voy a reiterar esos puntos en su totalidad.
Como la mayoría de ustedes sabría que hay un desajuste entre el objeto y los mundos relacionales que los ORM han tratado de salvar. En el último año o dos he tratado esto principalmente a través de Java (JPA específicamente).
Ahora cuando puente entre dos cosas que no coinciden se termina con "leaky abstractions" (como Joel lo puso):
Todas las abstracciones no triviales, hasta cierto grado , son fugas.
Ahora lo que añadiré es esto: existe una relación inversa entre la complejidad de la abstracción y cuán permeable es la abstracción. Caso en cuestión: ibatis. Ibatis es un framework de persistencia extremadamente ligero pero potente para Java y del que soy un gran admirador. Se envuelve SQL en archivos externos y por encima de eso pone muchos comportamientos ORM moderna, tales como:
- Lazy-carga de las relaciones;
- Correlación de resultados;
- Agrupación de resultados en varios niveles (algo JPA no puede hacer); y
- Tipos discriminados (es decir, el tipo se determina con los datos).
yo estimaría que ibatis tiene 90-95% de la funcionalidad de hibernación con la única complejidad estar por encima de tiempo de ejecución de mejora de código de bytes para la carga lenta a través de cglib (APP hace de la misma manera) con el único inconveniente que se tiene que escribir sus propias consultas (y no lo considero una desventaja seria pero las opiniones variarán).
Compárelo con un proveedor de JPA que confíe en la instrumentación, el entrelazado en tiempo de carga y los cargadores de clase no estándar para implementar esa funcionalidad extra del 5-10% (y la abstracción sigue teniendo fugas).
Así que no es una ley de los rendimientos decrecientes cuando se trata de hacer las cosas menos permeable. En algún momento es mejor que invierta en una bomba de achique que en la reparación de cada fuga en el barco.
Llevando esto a rieles: el argumento de la abstracción con fugas es mi mayor problema con la filosofía de los carriles.
Lo que también hace sonar alarmas para mí es los comentarios que recibe en los mensajes como On Derek Siver’s Return to PHP… es: "Derek escogió la tecnología por las razones equivocadas"
- : espera ... no es RoR o bien una marco de aplicación web de propósito general o un facsímil bastante cercano? Siendo ese el caso, ¿por qué no puedes hacer un sitio como CDbaby en él?
- "Los rieles no se ajustaban al modelo de aplicación de Derek para CD Baby": ¿Cómo es eso?
- "Él ignoró sus expertos existentes para la nueva tecnología.": Espere ... ¿no contratar a un experto?
- "lo siento Derek, se le podría ensuciarse las manos con el código, pero todavía estás gestión": Estoy de acuerdo con el comentario de que esta cita es "estúpida" y añade que su engañosa, irrelevante y podría decirse que un hombre de paja ;
- "Derek se acercó al proyecto en su conjunto y el medio ambiente de la planta hasta volver a escribir con un despliegue Un gran día": podría decirse que no es recomendable, pero si usted está dispuesto a gastar tiempo y dinero en él, no lo veo como una razón por la cual no puedes hacer el sitio en RoR.
Ahora hace 5-7 años, cuando EJB fue exagerada que tiene críticas de la misma sobre la base de un montón de cosas y se obtendría defensores incondicionales argumentando:
- "Aplicación X no encajaba en el Modelo EJB ";
- "No entendieron cómo funciona EJB";
- "EJB no es para todas las aplicaciones" (que prefieren aceptar la derrota en este caso de enfrentar el problema más evidente de que en realidad no es apropiada ni mucho menos una buena idea para, así, casi cualquier cosa);
- etc.
Así los mensajes anti-Ruby (y especialmente sus réplicas) todas suena muy familiar para mí.
Vale la pena mencionar el viejo rant "Rails is a Ghetto" de Zed Shaw, que es una palabra extraña de 6000 ("conflagración" es probablemente una mejor palabra) en contra de Rails. Algunas citas notables:
Esto es exactamente lo que hace que Rails sea un ghetto.Un grupo de medio entrenados ex idiotas PHP que nunca se molestan en sentarse y realmente aprenden la ciencia de la computadora que eran demasiado buenos para estudiar en la universidad .
y
Observe cómo me tomó unos segundos para respuesta. Esta única declaración significa básicamente que todos nos engañamos. La aplicación principal de Rails que DHH creó requirió reiniciar _400 veces/día. Esa es una aplicación de producción que no puede permanecer activa durante más de 4 minutos en promedio.
y (en pérdidas de memoria):
Esa es una razón más Carriles es gueto como el demonio. Parches importantes como el de arriba son ignorados por los desarrolladores japoneses , y aunque son muy buenos chicos, el anterior solo huele a hora amateur.
y
La mejor parte de todo el asunto es que hay potencialmente 10 nuevas web marcos que pueden tener sobre rieles. Infierno, Mongrel generó o ayudó a 5 de esos. Mi favorito de esos frameworks es Merb que es literalmente "Mongrel plus Erb" pero ahora usa principalmente Erubis . Lo que me encanta de Merb es que demostró que se podía hacer un veloz hilo web marco de trabajo de Ruby seguro con todas las mismas ideas que Rails y usar la mayor parte de el equipo de Rails al mismo tiempo. Sin embargo, la broma es que antes de Merb los idiotas de Rails Core gritarían y no se puede hacer que Rails thread sea seguro. Ezra sin embargo los probó a todos mal escribiendo simplemente un mejor Rails que Rails y todo gracias a Mongrel por ser tan fácil de hackear y trabajar.
y:
Ruby on Rails se ha llenado de gente como Koz, con Koz el más antiguo de los sabelotodos aspirantes. Koz tuvo suerte en el mejor de los casos e inyectó su código de mierda en un buen proyecto, lo jodió, y luego se adhirió a la seguridad como la forma de obtener más control . Por supuesto que en realidad no sabe acerca de la codificación segura por lo que su código parece tener muchos de los errores (ver el fecha analizando mierda. Pista: los meses no siempre tienen 30 días).
Y, bueno, continúa.
Así que supongo que puedo resumirlo así: Rails smells bad.
Esto es claramente subjetivo y argumentativo. No hay una respuesta real aquí y todo lo que puede venir de ella es que alguien diga "¡Estoy de acuerdo porque X!" y alguien más diciendo "No" –
Aún así estoy definitivamente interesado en este tema. Estoy tratando de decidir si construir en PHP, y luego reconstruirlo más tarde o elegir uno ahora. Las respuestas hasta ahora se ven bien para mí. – Ross
Quizás debería reformular la pregunta como "¿Qué ventajas tiene Rails sobre PHP? (Y viceversa)", ya que algunas de las diferencias pueden ser mucho más importantes para usted que otras. – Artelius