Outras respostas se concentraram no que é programação do lado do cliente e do servidor: quais idiomas são mais usados, quais tarefas precisam ser realizadas etc.
Isso está absolutamente certo, mas não entendo quais são as diferenças entre os dois tipos de programação no contexto da programação na web. Deixe-me tentar resolver isso.
Segurança e permissões
Na programação do lado do cliente, você não tem acesso ao sistema completo devido a questões de segurança. O usuário não confia necessariamente em todo e qualquer código baixado da Web e executado em sua máquina, e esse é o principal objetivo de design do ambiente do lado do cliente (o navegador e o mecanismo JavaScript): fornecer um ambiente isolado onde o código do cliente pode ser executado, mas não pode acessar nada fora do escopo permitido.
Na programação do servidor, é uma boa prática também limitar o acesso de cada aplicativo ao sistema subjacente, mas isso é muito menos imposto a você, pois no final, você ou sua empresa estão no controle desse sistema. Esse design de 'compartimento isolado' não é incorporado nas ferramentas e linguagens de programação do servidor, mas é realizado através da instalação (usando usuários dedicados com permissões restritas, escolhendo portas que requerem ou não permissões de raiz, etc.).
Implantação e plataforma
Na programação do servidor, a implantação precisa acontecer de fora do seu código, usando algum tipo de ferramenta (mesmo que seja make install
ou a git clone
), e essa implantação geralmente é manual - ou pelo menos, espera-se que ocorra em um ambiente semi-supervisionado. maneira. O sistema (ou seja, o SO) no qual você implanta geralmente é uniforme em várias máquinas, mas pode ser altamente personalizado para suas necessidades.
Na programação do lado do cliente, a implantação acontece a partir do código do lado do servidor, que atende os clientes automaticamente e sem supervisão. O sistema subjacente (significando principalmente o navegador) pode ser muito diferente em um número muito maior de máquinas. Para viabilizar a implantação, é necessário manter os padrões e há uma tendência muito mais forte para um único idioma e ambiente.
É por isso que copiar o código do servidor de uma máquina para outra pode levar semanas, enquanto o código do cliente geralmente é trivial para ser executado em máquinas diferentes.
Efeitos estatais e secundários
(Isenção de responsabilidade: este é de longe o ponto mais subjetivo de todos. Provavelmente, existem muitos aspectos errados na minha argumentação. É apenas uma hipótese interessante, na minha opinião.)
Na programação do servidor, o estado é uma preocupação muito maior, significando como recuperar e atualizar dados a pedido do usuário, com a possibilidade de conflitos devido à simultaneidade. Mesmo que grande parte dessa complexidade seja transferida para um servidor de banco de dados, é de responsabilidade do código do servidor permitir que o banco de dados mantenha suas garantias de integridade de dados usando sua interface corretamente (por exemplo, não use um cache para atualizações que nunca são vistas pelo o DB), embora também seja um objetivo do código do servidor não sobrecarregar o banco de dados com trabalho e manter o usuário aguardando resposta.
Na programação do lado do cliente, apresentar os resultados ao usuário é uma preocupação muito maior, e isso implica efeitos secundários (principalmente na impressão na tela). Isso não quer dizer que não haja um estado envolvido (por exemplo, cookies), apenas que o principal objetivo do código é realmente interagir com o usuário, e isso não pode acontecer sem efeitos secundários.
É por isso que a programação do lado do cliente geralmente exige (em algum momento) olhar para a tela com uma demonstração, para verificar se todas as cores e o layout estão corretos, enquanto a programação do lado do servidor pode ocorrer quase que exclusivamente em um ambiente orientado a texto, onde automatizado Os testes verificam se a lógica ainda está fazendo o que deveria.