¿Por qué tiene sentido separar el front-end del back-end?

Lanzando mi sombrero en el ring aquí, hay algunas ventajas serias (y un par de contras) para separar su front-end de back-end:

  1. Modularidad: como lo indicó Elmer, hacer esto le permite cambiar la aplicación a diferentes ritmos.
  2. Recursos / Experiencia: elegir un lenguaje front-end y back-end puede ser en parte una elección de recursos; ¿A quién puedes contratar para trabajar en estas cosas? ¿Cómo es la experiencia en su área y en su presupuesto?
  3. Compilaciones / Implementación: no solo puede desarrollar a diferentes ritmos, ahora puede proponer estrategias de prueba, compilación e implementación que son completamente independientes, lo que le permite minimizar la interrupción de la experiencia del usuario durante las implementaciones y centrarse en las cadenas de herramientas adecuadas.
  4. Evolución: lo creas o no, un día Ruby on Rails y AngularJS no serán el chico nuevo y genial, o en general, las ofertas de tecnología cambiarán. Al separar su front-end y back-end, es más ágil en el intercambio de componentes de su infraestructura por tecnologías más nuevas y mejores.
  5. API: esta metodología lo obliga a pensar como un desarrollador de API que tiene enormes beneficios para sus usuarios y, potencialmente, para desarrolladores y negocios externos (dependiendo de su oferta de productos).

Y para equilibrar, un par de contras:

  1. Templating: no puede aprovechar el lenguaje de plantillas genial proporcionado por su marco web (ya sea que se presente como plantillas de Django, ERB, HAML, lo que sea). En cambio, su back-end será una API para cualquier front-end que elija.
  2. Compilaciones / implementaciones: ahora debe idear estrategias de prueba, compilación e implementación independientes para su aplicación, separadas por front-end y back-end, lo que requiere tiempo y recursos.

El detalle de la pregunta contiene una premisa algo defectuosa:

“Dado que puedo escribir una aplicación web completa en el servidor javascript”

… pero no puede, realmente, a menos que sus páginas no contengan ningún aspecto interactivo. Sí, técnicamente puedes hacer una aplicación web que no use JavaScript en el front-end, pero en estos días no se consideraría una muy buena experiencia de usuario. Sin AJAX, sin actualización en el lugar, nada como esto, que es casi por completo código de front-end.

“Pero lo que veo es una lógica de servicio y una base de datos. Eso es.”

Este es su problema fundamental: no está viendo las cosas desde el punto de vista del usuario. El usuario no ve bases de datos y servidores, ve lo que se muestra en el navegador. El front-end. No les importa, y no deberían tener que preocuparse, lo que sucede en su servidor, solo quieren una herramienta que les permita realizar su tarea con la mínima molestia.

Hacer un buen final de fuente centrado en el usuario es difícil , no hay dos formas de hacerlo. Necesita hacer mucho trabajo para hacer las cosas más agradables para el usuario. Además, como otros han mencionado en sus respuestas, las dos partes, anverso y reverso, están separadas. El código que se ejecuta en el navegador del usuario es independiente del código que se ejecuta en su servidor, y con cosas como Service Workers, puede funcionar incluso cuando el usuario está desconectado.

Descargo de responsabilidad: aunque la primera sección no responde a su pregunta, la dejo en mi respuesta para ilustrar un punto hecho en la segunda sección de los detalles de la pregunta.

Permítanme dar un ejemplo, que debería ser obvio.

Digamos que soy Quora, y mantengo una base de datos de todos los usuarios y sus contraseñas. Si Quora no tuviera backend, la base de datos completa debería descargarse en el navegador de cada persona, incluidas las contraseñas.

Estoy seguro de que algunos de ustedes no quieren que sepa sus contraseñas … ¿verdad?!?!?
Veamos, luego puedo publicar todo tipo de BS racistas, atacar a los administradores y todo tipo de amenazas horribles y similares que podrían, y deberían, causar problemas (al menos prohibir a Quora).

Ahora, digamos que no hubo front-end.

Entonces, no habría visto la actualización que acaba de hacer a los detalles, dejando en claro que estaba preguntando sobre más que solo las razones de seguridad. Sin la información aportada por un front end, habría escrito una respuesta sin sentido.

Y la actualización se produjo debido a que JavaScript se ejecuta en la interfaz; me hizo saber que habías hecho una actualización. Por lo tanto, los extremos frontal y posterior juegan un papel vital en el control de la información, asegurando una experiencia de calidad.

EDITAR: deja de editar los detalles, así que no necesito hacer más ediciones ;-)).

En cuanto a la especialización en programación, las habilidades necesarias en cada extremo son separadas, especializadas y únicas. Por ejemplo, soy muy hábil para escribir aplicaciones web seguras, pero pídeme que haga el diseño (arte) … ¡olvídalo! Produciré una figura de palo en un buen día.

Considere el ciclo de vida de lo que sea que esté construyendo. ¿Vas a ser el que lo maneje durante toda su vida útil? Si es así, haz lo que quieras.

Una razón para separar la parte delantera / trasera es porque a menudo utilizan diferentes conjuntos de habilidades y, hasta cierto punto, una comprensión diferente de esa tecnología. Por lo tanto, se puede suponer que diferentes personas pueden trabajar en las mismas cosas al mismo tiempo, sin chocar demasiado.

Considere también el frente y la parte posterior como modulares. En cuanto a la tecnología, no tienden a evolucionar al mismo ritmo. Por lo tanto, tenerlos separados en lugar de estar estrechamente integrados, permite que la opción futura actualice solo ALGUNOS de la solución, en lugar de destruir todo. Considérelo en un caso de negocios … es mucho más costoso construir desde cero que simplemente actualizar partes de él. Ser modular también permite flexibilidad para cosas como, digamos, que su front-end es básicamente el mismo, pero tiene datos de clientes diferentes … puede arrancar una parte, darle una versión ligeramente personalizada de la otra parte, y puede tener 2 soluciones , rápido y fácil, para 2 conjuntos de usuarios diferentes.

Solo un par de pensamientos que me vienen a la mente.