ruby-on-rails django black-box

ruby on rails - ¿Qué pasa con "magia"?



ruby-on-rails django (9)

Estoy tratando de decidir si usar un Rails o un gurú de Django para crear una aplicación web para mí. Me recomendaron usar Django porque usa menos "magia". Desde mi punto de vista, sin embargo, la "magia" de Rails parece ser algo bueno, ya que podría hacer que el desarrollo sea más conciso para mi contratista, lo que resulta en menos horas facturables a mi cargo. Entiendo que la ventaja de Django podría ser un control más detallado, pero ¿cómo sabré si necesito este control? ¿Hay un problema inherente con "magia"?


Al usar magia ... para garantizar la comprensión de una pieza del sistema, debe comprender todo. Dado que es difícil determinar si no hay magia afectando la pieza que estás examinando.

Es como leer una historia y dejar que el autor omita los giros relevantes de la trama, porque son repetitivos.

Shazam


Bueno, considere un par de bits de "magia" de Rails: cuando escribe una clase de controlador, sus métodos tienen acceso a ciertas variables y ciertas otras clases. Pero estas variables y clases no fueron definidas ni importadas por nada en el archivo del código de Ruby que estás viendo; Rails ha trabajado mucho entre bastidores para asegurarse de que estén allí de forma automática. Y cuando devuelve algo de un método de controlador, Rails se asegura de que el resultado se transmita a la plantilla adecuada; no tiene que escribir ningún código para decirle qué plantilla usar, dónde encontrarla, etc., etc.

En otras palabras, es como si estas cosas sucedieran por "magia"; no tienes que mover un dedo, solo pasan por ti.

Por el contrario, cuando escribe una vista de Django, tiene que importar o definir todo lo que planea usar, y debe decirle, explícitamente, qué plantilla usar ya qué valores debe poder acceder la plantilla.

Los desarrolladores de Rails son de la opinión de que este tipo de "magia" es algo bueno porque hace que sea más fácil obtener rápidamente algo que funcione, y no te aburre con muchos detalles a menos que quieras acercarte y comenzar a anular las cosas.

Los desarrolladores de Django opinan que este tipo de "magia" es algo malo porque en realidad no ahorra tanto tiempo (unas pocas declaraciones de import no son un gran problema en el gran esquema de cosas), y tiene el efecto de ocultar lo que está sucediendo realmente, lo que hace más difícil encontrar la manera de anular las cosas, o más difícil de depurar si algo sale mal.

Ambas son, por supuesto, posturas válidas para tomar, y en general parece que las personas simplemente gravitan hacia uno u otro; aquellos que les gusta la "magia" se congregan alrededor de Rails o marcos que intentan emularlo, aquellos que no se congregan alrededor de Django o marcos que intentan emularlo (y, en un sentido más amplio, estas posturas son algo estereotipadas de Ruby y Python desarrolladores: a los desarrolladores de Ruby les gusta hacer las cosas de una manera, a los desarrolladores de Python les gusta hacer las cosas de otra manera).

A largo plazo, probablemente no suponga una gran diferencia para el factor que usted dice que le preocupa, horas facturables, así que permita que su desarrollador elija lo que le resulte más cómodo, ya que es más probable que lo haga. resultados útiles para ti


El problema con la "magia" es que esconde muchas cosas de usted, y la OMI hace que sea más difícil rastrear problemas o saber qué hacer / optimizar una vez que comienza a pensar "fuera de la caja" y termina en un "muerto". zona mágica "(es decir, parte donde la magia no te ayuda).

IMO este es el principal problema con Ruby on Rails (y no me malinterpreten, realmente me gusta Ruby on Rails); es demasiado fácil comenzar con eso, y luego, una vez que te encuentras con un problema donde Rails no hace el trabajo por ti, o donde las convenciones de Rails no encajan ... estás medio jodido a menos que tú " Eres un gurú de Ruby porque ya no puedes confiar en la magia y porque abstrae todo de ti, no tienes idea de cómo hacerlo de la "manera difícil".


El problema principal ocurre cuando no entiendes la magia. Esto puede conducir a cualquier cosa, desde aplicaciones que están mal esterilizadas hasta accidentes esporádicos y fatales.


La magia a menudo significa "usar suposiciones integradas para optimizar el rendimiento o la sintaxis". Por supuesto, en un código bien documentado, esas suposiciones se mencionan como restricciones explícitas.

A veces la magia es maravillosa, ya que realmente reduce lo que tienes que escribir o mejora drásticamente la velocidad. Pero puede violar esas suposiciones de innumerables maneras y, o bien incurrir en errores inesperados o, lo que es peor, tener errores imperceptibles.


La magia es genial hasta que algo se rompe. Luego, debes descubrir cómo funcionan todos esos trucos.

Para más información, lea la Ley de Abrasivos Leaky de Joel Spolsky


Hablando de magia, creo que Rails, Django y la mayoría, si no todos los frameworks están haciendo algún tipo de magia. La forma en que abstraen las cosas, envuelven los servicios de bajo nivel en API, integran rutas y controladores, etc., son una especie de magia para las personas que conocen muy poco. Admito que Rails tiene más magia y la gente puede perderse a veces. Sin embargo, no deberíamos descartar a Rails solo por eso. Como dije, no es que la magia sea muy mala y solo Rails hace magia, la mayoría lo hace. Deberíamos ver que Rails evoluciona muy rápido y su calidad de código mejora y se ha vuelto más y más modular. Los recursos alrededor de Rails son enormes. Esos deben ser tomados en consideración también.


La magia ofusca la funcionalidad. Crea comportamientos de forma implícita en lugar de explícita, de modo que el programador no tiene necesidad de comprender cómo funciona el comportamiento y, lo que es más importante, de cómo podrían cambiarlo.

Cuando un codificador tiene una comprensión completa de la base de código con la que están trabajando, "magia" puede ser una gran ganancia de productividad. Pero cuando se trabaja con un sistema de terceros como un marco web, que tiene un alto grado de complejidad, puede tomar mucho más tiempo obtener ese nivel de experiencia.

Ahora, a la cuestión de a quién debe contratar para hacer el trabajo: si le preocupa la capacidad a largo plazo de otros programadores para comprender el código de sus contratistas, puede tener sentido ir con Django (sin duda es mi preferencia). Sin embargo, hay muchos, muchos expertos en Rails que pueden mantener su sitio web en el futuro.

La elección debe ser quién de entre los contratistas que está evaluando, a) tiene un historial comprobado, yb) confía. Un buen desarrollador tendrá éxito en Rails o Django.


Como señaló Guoliang Cao, siempre hay algún tipo de "magia" en la que confía, comenzando con el sistema operativo "mágicamente" tomando su entrada de teclado y mostrándola en la pantalla en la ubicación correcta. Cada estructura web analiza los parámetros publicados en la página web y los coloca en una estructura de datos para facilitar el acceso. Rails es mucho más agresivo con respecto a lo que se puede hacer mágicamente, ya que su creador (con quien tiendo a estar de acuerdo) tiene opiniones muy fuertes sobre cómo deberían desarrollarse las aplicaciones web. Entonces, la pregunta realmente debería ser "cuánta magia" es apropiada, no si hay un problema inherente con ella.