Quello di cui stai parlando è più ingegneria del software che programmazione. È un po 'di architettura, un po' di "buone pratiche" e "modelli di progettazione", un po 'di lavoro con gli altri. Mentre ci sono libri che possono aiutare, la maggior parte proviene dall'esperienza. Nessuno inizia a scrivere, diciamo, Microsoft Word.
Pensa a un grande programma "reale" che vorresti scrivere. Ora pensa ai vari pezzi che devi costruire per farlo funzionare come desideri. Ad esempio, in un moderno gioco in prima persona avrai bisogno di un motore grafico 3D, AI non di carattere giocatore, un modulo audio / musicale, un motore fisico e un modulo di livello superiore che applica le regole del gioco (sa la "mappa", come interagiscono i vari personaggi, ecc.). E poi c'è la grafica, il design dei personaggi e la musica, nessuno dei quali è un codice ma che è necessario per completare il gioco.
Ora: quale di questi ti costruirai e quale andrai altrove? La maggior parte dei progetti software di grandi dimensioni non è programmata da zero. Forse utilizzerai un motore 3D standard e un modulo musica / suono e programmerai solo le cose che rendono unico il tuo gioco. OK, quindi devi capire quali moduli di terze parti utilizzerai, che coinvolgeranno fattori come il costo, con quali lingue lavorano, con quali caratteristiche hanno, come sono progettate le loro API (ovvero, come completarle è, come si adatta al tuo stile di programmazione personale, ecc.). Magari scriverai "prove di concetto" o testerai programmi usando uno o due candidati per i vari moduli di terze parti per assicurarti che facciano tutto ciò di cui hai bisogno e che siano facili da usare.
Inoltre, anche il codice che vuoi scrivere da solo potrebbe essere un lavoro troppo grande per te da solo da completare nell'intervallo di tempo che hai in mente. Di quanti altri programmatori hai bisogno per lavorare al progetto? Come suddividerai il lavoro? Come saranno progettati i vari moduli in modo che si adattino tutti insieme anche se sono stati scritti da persone diverse? Come lavorerete tutti sullo stesso codice sorgente senza cancellare le reciproche modifiche (risposta: controllo di versione, che è estremamente utile quando lavori da solo ma indispensabile quando lavori con altri).
Dopo aver capito quali moduli vuoi scrivere internamente, esegui lo stesso processo. Capisci i pezzi di ciascun modulo, come dovrebbero combaciare, e quale ti scriverai e quale andrai altrove. Continua a scomporre le cose fino a quando ogni pezzo non è abbastanza piccolo da tenerlo in mente, così da poter dire "sì, potrei scriverlo!" E poi fallo. Mentre lo fai, incontrerai ostacoli imprevisti nel modo in cui i vari pezzi del tuo programma si incastrano. Questi saranno frustranti, ma sono opportunità per te per saperne di più sul tuo mestiere e dovrebbero essere visti in questo modo.
Inizialmente, sarai in grado di contenere solo piccoli pezzi del tuo programma - diciamo, singole funzioni - nella tua mente, e quindi dovrai scomporre molto le cose prima di iniziare a scrivere codice. Come si acquisiscono esperienza, si pensa a funzioni piuttosto che dover pensare su funzioni e cominciare a pensare su oggetti. E poi penserai agli oggetti e penserai a moduli più grandi. Infine, penserai in moduli e penserai a programmi interi, grandi e reali.
E poi scoprirai che hai ancora molto da imparare ... ma così va. Se, come programmatore, smetti mai di imparare, sei obsoleto e verrai sostituito con un modello più recente.
Comunque, non aver paura e non preoccuparti se questo suona ... terribile o impossibile e dopo tutto non vuoi davvero essere un programmatore. Non è per tutti. Amo la musica e i dessert e so suonare un po 'le chiavi e cucinare alcuni piatti, ma non sono disposto a dedicare il tempo necessario per diventare un grande musicista o un grande chef.
Se risulta che non vuoi essere un programmatore che scrive applicazioni desktop grandi e reali, esistono altri tipi di lavori di programmazione. Ad esempio, potresti diventare un programmatore incorporato. Ci sono sfide definite e interessanti coinvolte nella scrittura di programmi integrati e stai facendo un lavoro utile, ma in genere i programmi sono piuttosto più piccoli delle applicazioni desktop. Oppure potresti scrivere applicazioni web. Sul Web, è facile incollare insieme un po 'di funzionalità, in modo da poter scrivere (ad esempio) un sistema di commenti Web e sarebbe utile anche se non è un'intera applicazione Web. È facile migliorare in modo incrementale anche le cose sul Web, quindi puoi iniziare con (diciamo) un client di posta Web di base e, nel tempo, evolverlo in qualcosa come Gmail. (Ma non farlo, perché allora competerai con Gmail.)
Se non vuoi assolutamente essere un programmatore, ma vuoi comunque lavorare con i computer, potresti andare nel settore IT o in qualche altro campo tecnico. In questi casi, conoscere tutta la programmazione che già fai è molto utile, perché i tuoi colleghi potrebbero non avere nemmeno così tanto. O, sai, diventa un musicista se questo piace, perché (come la maggior parte dei campi) coinvolge i computer oggi. Scrivi piccoli programmi che manipolano i file audio o MIDI in vari modi intelligenti, rendendoti così un musicista migliore. Scoprirai che qualsiasi abilità di programmazione possiedi può essere applicata in molti campi per renderti migliore nel tuo lavoro.