Frontend se refiere a la parte de la aplicacion con la que el usuario interactua.
Backend se refiere a lo que hace el programa sin una interaccion directa con el usuario.
Esta división no necesariamente existe en todas las aplicacion. Es una estrategia que se usa para dividir el codigo fuente por varios motivos. Si se divide de esta forma , se puede llamar frontend y backend.
Hay varias ventajas de tener separado estos “layers” o modulos.
Por ejemplo si haces una aplicacion web y divides el codigo fuente en frontend y backend, tendras una parte de la aplicacion que enviara al browser codigo html y recibira del browser por medio de la red solicitudes para hacer cosas.
Una vez recibida la solicitud, la parte del backend es la que se encarga de ejecutarla en el servidor… Si necesita como respuesta mostrarle al usuario algo, se encargara de eso la parte “frontend” de la aplicacion, que basicamente armará el html que será enviado al browser.
Con esto tenemos la aplicacion web andando.
Si ahora quisieramos que esta aplicacion tambien pueda ser usada desde mobile con una aplicacion nativa (no desde el browser)… seria suficiente armar la parte del frontend, y el backend quedaria sin alterarse. (no es tan asi porque siempre en mobile no se replica la aplicacion sino que se cambia la forma de interactuar en algunos casos… pero igual los cambios en el backend serian minimos)
Tambien si queremos hacer un nuevo diseño de la aplicacion tal como la ve el usuario , tambien seria suficiente cambiar solo el frontend.
Por otra parte, los programadores backend, no necesitan involucrarse en cosas como el diseño grafico, el look and feel de la aplicaion , o una serie de conocimientos de User Interface, y los programadores frontend no necesitan involucrarse con conexion a bases de datos, comunicacion con otras aplicaciones, o tal vez la velocidad de los requests.
Tambien existen los programadores full stack que se encargan tanto del frontend como del backend.
No hay que confundir frontend y backend con “cliente” y servidor … De hecho, en la aplicacion web mucho del frontend reside y se ejecuta en el servidor, armando la vista (generalmente HTML y Javascript) que luego el browser mostrara .
Lo contrario a esto seria tener una aplicacion monolitica donde no hay una division en modulos, o layers, y todos los programas estan juntos … tanto los que arman las vistas como los que ejecutan la otra parte de la aplicacion. Por ejemplo, las aplicacion puramente mobile es mas comun que las hagan mas del estilo monolitico.
Cuando se divide en frontend y backend generalmente hay unidades de ejecucion que se instalan (deployan) por separado o independientemente (o no)