Altre risposte si sono concentrate su ciò che è la programmazione lato client e lato server: quali lingue sono maggiormente utilizzate, quali attività devono essere eseguite, ecc.
Questo è assolutamente giusto, ma mi manca un po 'di attenzione su quali sono le differenze tra i due tipi di programmazione, nel contesto della programmazione web. Vorrei provare a risolverlo.
Sicurezza e autorizzazioni
Nella programmazione lato client, non si ha accesso al sistema completo a causa di problemi di sicurezza. L'utente non si fida necessariamente di ogni singolo pezzo di codice che viene scaricato dal Web ed eseguito sulla sua macchina, e questo è l'obiettivo principale di progettazione dell'ambiente lato client (browser e motore JavaScript): fornire un ambiente isolato dove il codice client può essere eseguito ma non può accedere a nulla al di fuori dell'ambito consentito.
Nella programmazione lato server, è buona norma limitare anche l'accesso di ciascuna applicazione al sistema sottostante, ma ciò è molto meno imposto per te, poiché alla fine tu o la tua azienda avete il controllo di quel sistema. Questo design di "gabbia isolata" non è integrato negli strumenti e nei linguaggi di programmazione lato server, ma è realizzato attraverso l'installazione dell'installazione (utilizzando utenti dedicati con autorizzazioni limitate, scegliendo porte che richiedono o non richiedono autorizzazioni di root, ecc.).
Distribuzione e piattaforma
Nella programmazione lato server, la distribuzione deve avvenire al di fuori del tuo codice, usando un qualche tipo di strumento (anche se lo è make install
o a git clone
), e questa distribuzione è di solito manuale - o almeno, dovrebbe avvenire in un semi supervisionato modo. Il sistema (ovvero il sistema operativo) su cui viene distribuito è generalmente uniforme su più macchine, ma può essere fortemente 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ù ampio di macchine. Al fine di rendere fattibile l'implementazione, è necessario mantenere gli standard e vi è una tendenza molto più forte in una singola lingua e ambiente.
Questo è il motivo per cui la copia del codice lato server da una macchina all'altra può richiedere settimane, mentre il codice lato client è di solito banale da eseguire su macchine diverse.
Effetti secondari e di stato
(Disclaimer: questo è di gran lunga il punto più soggettivo di tutti. Probabilmente ci sono molti aspetti sbagliati nella mia argomentazione. È solo un'ipotesi interessante, a mio avviso.)
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 proprie garanzie sull'integrità dei dati utilizzando la sua interfaccia correttamente (ad esempio, non utilizzare una cache per gli aggiornamenti che non sono mai stati 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 stampa sullo schermo). Questo non vuol dire che non esiste uno stato coinvolto (ad esempio i cookie), ma solo che l'obiettivo principale del codice è di interfacciarsi effettivamente con l'utente e ciò non può avvenire senza effetti secondari.
Questo è il motivo per cui la programmazione lato client di solito richiede (ad un certo punto) di guardare 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 l'automazione i test controllano che la logica stia ancora facendo ciò che dovrebbe fare.