Altre risposte si sono concentrate su che è la programmazione lato client e lato server: quali sono le lingue maggiormente utilizzate, quali attività devono essere eseguite, ecc.
Questo è assolutamente giusto, ma mi manca un po 'di attenzione su quali sono le differenze tra entrambi i tipi di programmazione, nel contesto della programmazione web. Lasciatemi provare ad affrontarlo.
Sicurezza e permessi
Nella programmazione lato client, non hai accesso al sistema completo, a causa di problemi di sicurezza. L'utente non si fida necessariamente di ogni singolo codice scaricato dal Web ed eseguito sulla sua macchina, e questo è l'obiettivo principale della progettazione dell'ambiente client-side (il motore del browser e JavaScript): fornire un ambiente isolato dove il codice client può essere eseguito ma non può accedere a qualcosa al di fuori dell'ambito consentito.
Nella programmazione lato server, è buona norma limitare anche l'accesso di ogni applicazione al sistema sottostante, ma questo è molto meno applicato a te, dato che alla fine tu o la tua azienda avete il controllo di quel sistema . Questo design "a gabbia isolata" è non integrato negli strumenti e nei linguaggi di programmazione lato server, ma viene eseguito attraverso l'installazione (utilizzando utenti dedicati con autorizzazioni limitate, scegliendo le porte che richiedono o non richiedono permessi di root, ecc.)
Distribuzione e piattaforma
Nella programmazione lato server, la distribuzione deve avvenire dall'esterno del codice, utilizzando un qualche tipo di strumento (anche se è make install
o git clone
), e questa distribuzione è di solito manuale - o almeno, è previsto che accada in un modo semi-supervisionato. Il sistema (ovvero il sistema operativo) sul quale viene distribuito è generalmente uniforme su un certo numero di macchine, ma può essere strongmente personalizzato in base alle proprie esigenze.
Nella programmazione lato client, la distribuzione avviene dal codice lato server, che serve i client automaticamente e senza supervisione. Il sistema sottostante (che significa principalmente il browser) può essere molto diverso su un numero molto più grande di macchine. Per rendere fattibile l'implementazione, è necessario mantenere gli standard, e c'è una tendenza molto più strong verso una singola lingua e ambiente.
Ecco perché copiare codice lato server da un computer a un altro può richiedere settimane, mentre il codice lato client è di solito banale da eseguire su macchine diverse.
Effetti di stato e secondari
(Disclaimer: questo è di gran lunga il punto più soggettivo di tutti. Probabilmente ci sono molti aspetti sbagliati nella mia argomentazione, è solo un'ipotesi interessante, secondo me.)
Nella programmazione lato server, lo stato è una preoccupazione molto più grande, che significa come recuperare e aggiornare i dati su richiesta dell'utente con la possibilità di conflitti dovuti alla concorrenza. Anche se la maggior parte di questa complessità viene scaricata su un server di database, è responsabilità del codice lato server consentire al database di mantenere le sue garanzie sull'integrità dei dati utilizzando la sua interfaccia correttamente (ad esempio non utilizzare una cache per gli aggiornamenti che non sono mai visti da il DB), mentre è anche un obiettivo del codice lato server non sovraccaricare il database con il lavoro e mantenere l'utente in attesa di risposta.
Nella programmazione lato client, presentare i risultati all'utente è una preoccupazione molto più grande, e questo implica effetti secondari (principalmente la stampa sullo schermo). Questo non vuol dire che non vi siano stati coinvolti (ad esempio i cookie), solo che l'obiettivo principale del codice è di interfacciarsi effettivamente con l'utente, e questo non può accadere senza effetti secondari.
Questo è il motivo per cui la programmazione lato client di solito richiede (ad un certo punto) guardando lo schermo con una demo, per verificare che tutti i colori e il layout siano corretti, mentre la programmazione lato server può avvenire quasi esclusivamente in un ambiente orientato al testo , dove i test automatici verificano che la logica stia ancora facendo quello che dovrebbe fare.