O que você está falando é mais engenharia de software do que programação. É um pouco de arquitetura, um pouco de "melhores práticas" e "padrões de design", um pouco de trabalho com outras pessoas. Embora existam livros que podem ajudar, a maior parte vem da experiência. Ninguém começa a escrever, digamos, o Microsoft Word.
Pense em um programa grande e "real" que você gostaria de escrever. Agora pense nas várias peças que você precisa construir para que funcione da maneira que você deseja. Por exemplo, em um jogo moderno em primeira pessoa, você precisará de um mecanismo de gráficos 3D, IA sem personagem, um módulo de música / som, um mecanismo de física e um módulo de nível superior que aplique as regras do jogo (sabe o "mapa", como os vários personagens interagem etc.). E há a arte e o design de personagens e a música, nenhuma das quais é código, mas é necessária para a conclusão do jogo.
Agora: Qual desses você vai construir e quais vai conseguir em outro lugar? A maioria dos grandes projetos de software não é programada do zero. Talvez você use um mecanismo 3D já disponível e um módulo de música / som e programa apenas as coisas que tornam seu jogo único. OK, então você precisa descobrir quais módulos de terceiros você usará, o que envolverá fatores como custo, quais idiomas eles trabalham, quais recursos eles têm, como a API é projetada (ou seja, quão completa é a API) é, quão bem ele se ajusta ao seu estilo de programação pessoal, etc.). Talvez você escreva "provas de conceito" ou programas de teste usando um ou dois candidatos para os vários módulos de terceiros para garantir que eles façam tudo o que você precisa e sejam fáceis de usar.
Além disso, mesmo o código que você deseja escrever pode ser um trabalho muito grande para você concluir sozinho dentro do prazo que você tem em mente. Quantos outros programadores você precisa para trabalhar no projeto? Como você vai dividir o trabalho? Como os vários módulos serão projetados para que todos se encaixem, mesmo que tenham sido escritos por pessoas diferentes? Como vocês trabalharão no mesmo código-fonte sem eliminar as alterações uns dos outros (resposta: controle de versão, que é extremamente útil quando você está trabalhando sozinho, mas indispensável ao trabalhar com outros).
Depois de descobrir quais módulos você deseja escrever internamente, você executa o mesmo processo. Descobrir as partes de cada módulo, como elas devem se encaixar, e quais você escreverá e quais receberá em outro lugar. Continue quebrando as coisas até que cada peça seja pequena o suficiente para você se lembrar, para dizer: "Sim, eu poderia escrever isso!" E então faça isso. Ao fazer isso, você encontrará obstáculos imprevistos na forma como as várias partes do seu programa se encaixam. Isso será frustrante, mas são oportunidades para você aprender mais sobre o seu ofício e deve ser visto dessa maneira.
Inicialmente, você será capaz de manter apenas pequenas partes do seu programa - digamos, funções individuais - em sua mente e, portanto, terá que dividir bastante as coisas antes de começar a codificar. À medida que ganha experiência, você pensa em funções, em vez de precisar pensar em funções e começar a pensar em objetos. E então você estará pensando em objetos e pensando em módulos maiores. Finalmente, você estará pensando em módulos e pensando em programas inteiros, grandes e reais.
E então você descobrirá que ainda tem muito a aprender ... mas é assim. Se, como programador, você parar de aprender, ficará obsoleto e será substituído por um modelo mais novo.
De qualquer forma, não tenha medo, e não se preocupe se isso soa horrível ou impossível e você realmente não quer ser um programador, afinal. Não é para todos. Adoro música e sobremesas, posso tocar um pouco as teclas e cozinhar alguns pratos, mas não estou disposto a dedicar o tempo necessário para me tornar um ótimo músico ou um chef de cozinha.
Se você não quiser ser um programador escrevendo aplicativos grandes e reais para desktop, existem outros tipos de trabalhos de programação. Você pode se tornar um programador incorporado, por exemplo. Existem desafios definidos e interessantes envolvidos na criação de programas incorporados, e você está fazendo um trabalho útil, mas geralmente os programas são bem menores que os aplicativos de desktop. Ou você pode escrever aplicativos da web. Na Web, é fácil colar pequenos pedaços de funcionalidade, para que você possa escrever (por exemplo) um sistema de comentários na Web e seria útil mesmo que não seja um aplicativo Web inteiro. Também é fácil melhorar gradualmente as coisas na Web, para que você possa começar com (digamos) um cliente básico de email na Web e, com o tempo, evoluir para algo como o Gmail. (Mas não faça isso, porque você estará competindo com o Gmail.)
Se você não deseja ser um programador, mas ainda deseja trabalhar com computadores, possivelmente poderá entrar na área de TI ou em algum outro campo técnico. Nesses casos, conhecer o máximo de programação que você já faz é muito útil, porque seus colegas talvez nem tenham muito. Ou, você sabe, torne-se um músico se isso agrada, porque (como a maioria dos campos) hoje envolve computadores. Escreva pequenos programas que manipulam arquivos de áudio ou MIDI de várias maneiras inteligentes, tornando-o um músico melhor. Você descobrirá que quaisquer habilidades de programação que você tiver podem ser aplicadas em vários campos para melhorar seu trabalho.