Lo sviluppo web e lo sviluppo di applicazioni client tradizionali (che è quello che presumo tu intenda per "programmazione software") sono cose molto diverse.
Quando scrivi un'app Web, prendi input da un client e produci HTML come output, da rendere nel browser del client. La programmazione Web è fondamentalmente stateless . Ciò significa che poiché il browser non mantiene una connessione aperta con il tuo server, non puoi assumere nulla sulle interazioni passate quando arriva una nuova richiesta. Tutto ciò che crei deve essere basato sui dati che il browser ti invia e sui dati hai memorizzato nel database. (È possibile salvare alcuni dati in memoria sul server, quindi non è sempre necessario leggere il database per tutto se hai lo stesso utente che fa un sacco di richieste in un breve lasso di tempo, ma dal momento che la connessione Web è stateless e non rimane aperto, non hai modo di sapere quando sono finiti, quindi devi assicurarti che tutti i dati vengano memorizzati nel database.)
D'altra parte, quando si scrive un'app tradizionale, generalmente si controllano direttamente non solo i dati ma anche il codice che disegna ciò che l'utente vede. E sapere quando il programma è in uso e quando viene spento è una parte intrinseca del programma, quindi puoi fare molto più affidamento sui dati in memoria e preoccuparti solo di salvare i dati quando è opportuno farlo all'interno del contesto del tuo programma. Inoltre, un'app tradizionale viene eseguita direttamente sul computer dell'utente e viene utilizzata da una sola persona alla volta, mentre un server web può dover gestire centinaia o persino migliaia di connessioni da persone diverse contemporaneamente.
Per fare un esempio semplice, supponiamo di avere un gioco in cui un personaggio può camminare su una mappa. In un programma tradizionale, il tuo codice disegna la scena, l'utente usa la tastiera o il mouse per dire al personaggio di spostarsi in un'altra posizione, e il tuo programma disegna il movimento sullo schermo. Probabilmente è animato, perché non è difficile da fare se sai qualcosa sugli sprite.
L'operazione su un'app Web sarebbe molto diversa. L'utente ha una pagina web aperta nel proprio browser che visualizza la mappa e il carattere. Selezionano una nuova posizione in cui spostarsi facendo clic su di essa. La tua pagina contiene un codice che dice al browser di inviare una richiesta per eseguire tale spostamento sul tuo server tramite HTTP. Il tuo server lo riceve. Prima deve convalidarlo, (devi assicurarti che sia una mossa legale, dal momento che il comando move è solo una richiesta Web, è molto facile per qualcuno provare a imbrogliare semplicemente inviando al server quello che vogliono, che sia o meno in realtà ha senso secondo le regole,) osservando la posizione corrente del personaggio nel database e assicurandosi che sia possibile eseguire quella mossa. Quindi (assumendo che sia valido) calcola gli effetti della mossa sul gioco, salva le modifiche al database e crea una nuova pagina web contenente la mappa di gioco aggiornata da inviare al browser dell'utente.
Questo è un po 'troppo generalizzato (da entrambe le parti) ma questa è l'idea generale della differenza tra programmazione Web e programmazione app tradizionale. Qual è il modo in cui dovresti orientarti maggiormente dipende da cosa sei interessato a creare. Questa è davvero la prima domanda a cui dovresti rispondere. Se dici solo "Voglio programmare qualcosa", allora non hai un punto di partenza. Ma se dici "Voglio scrivere una XYZ", allora hai un obiettivo reale e puoi iniziare a capire come è fatto.
Un piccolo consiglio, e questa è un'altra generalizzazione, ma è utile. Quando ci si avvicina ad esso, la programmazione in realtà consiste solo in due compiti fondamentali: scomporre un problema in una serie di piccoli sotto-problemi ed esprimere piccoli problemi nella logica formale in modo che un computer possa comprenderli. Se riesci a imparare davvero a fare queste due cose, il resto sono solo tecniche specifiche e acquisisci esperienza per sapere quale usare dove.