Otras respuestas se han centrado en lo que es la programación del lado del cliente y del lado del servidor: qué lenguajes se utilizan principalmente, qué tareas deben realizarse, etc.
Esto es absolutamente correcto, pero extraño un poco el enfoque en cuáles son las diferencias entre ambos tipos de programación, en el contexto de la programación web. Déjame intentar abordar eso.
Seguridad y permisos
En la programación del lado del cliente, no tiene acceso al sistema completo debido a problemas de seguridad. El usuario no necesariamente confía en todos y cada uno de los códigos que se descargan de la web y se ejecutan en su máquina, y este es el objetivo principal del diseño del entorno del lado del cliente (el navegador y el motor de JavaScript): proporcionar un entorno aislado donde el código del cliente puede ejecutarse pero no puede acceder a nada fuera del alcance permitido.
En la programación del lado del servidor, es una buena práctica limitar también el acceso de cada aplicación al sistema subyacente, pero esto es mucho menos obligatorio para usted, ya que al final, usted o su empresa tienen el control de ese sistema. Este diseño de 'jaula aislada' no está integrado en las herramientas y lenguajes de programación del lado del servidor, sino que se logra a través de la configuración de la instalación (utilizando usuarios dedicados con permisos restringidos, eligiendo puertos que requieren o no requieren permisos de root, etc.).
Despliegue y plataforma
En la programación del lado del servidor, la implementación debe realizarse desde fuera de su código, utilizando algún tipo de herramienta (incluso si es make install
o una git clone
), y esta implementación generalmente es manual, o al menos, se espera que ocurra en un sistema semi-supervisado camino. El sistema (es decir, el sistema operativo) en el que se implementa generalmente es uniforme en varias máquinas, pero se puede personalizar en gran medida según sus necesidades.
En la programación del lado del cliente, la implementación se realiza desde el código del lado del servidor, que sirve a los clientes automáticamente y sin supervisión. El sistema subyacente (es decir, principalmente el navegador) puede ser muy diferente en un número mucho mayor de máquinas. Para que la implementación sea factible, se deben mantener los estándares y existe una tendencia mucho más fuerte hacia un solo idioma y entorno.
Es por eso que copiar el código del lado del servidor de una máquina a otra puede llevar semanas, mientras que el código del lado del cliente generalmente es trivial para ejecutarse en diferentes máquinas.
Estado y efectos secundarios
(Descargo de responsabilidad: este es, con mucho, el punto más subjetivo de todos. Probablemente hay muchos aspectos erróneos en mi argumentación. En mi opinión, es solo una hipótesis interesante).
En la programación del lado del servidor, el estado es una preocupación mucho mayor, es decir, cómo recuperar y actualizar datos a solicitud del usuario con la posibilidad de conflictos debido a la concurrencia. Incluso si la mayor parte de esta complejidad se descarga a un servidor de base de datos, es responsabilidad del código del lado del servidor permitir que la base de datos mantenga sus garantías sobre la integridad de los datos mediante el uso correcto de su interfaz (por ejemplo, no use un caché para actualizaciones que nunca son vistas por DB), mientras que también es un objetivo del código del lado del servidor no sobrecargar la base de datos con trabajo y mantener al usuario esperando respuesta.
En la programación del lado del cliente, presentar los resultados al usuario es una preocupación mucho mayor, y esto implica efectos secundarios (principalmente imprimir en la pantalla). Esto no quiere decir que no haya un estado involucrado (por ejemplo, cookies), solo que el objetivo principal del código es realmente interactuar con el usuario, y esto no puede suceder sin efectos secundarios.
Esta es la razón por la cual la programación del lado del cliente generalmente requiere (en algún momento) mirar la pantalla con una demostración, para verificar que todos los colores y el diseño sean correctos, mientras que la programación del lado del servidor puede ocurrir casi exclusivamente en un entorno orientado a texto, donde automatizado Las pruebas verifican que la lógica sigue haciendo lo que se supone que debe hacer.