Originalmente publiquei como resposta no Quora nesse link -> aqu <-.
Um professor meu de C dizia em aula “Todo problema se torna simples depois de se entender o escopo do mesmo”.
Na época não entendi isso muito bem, tirei o mínimo para passar e segui a vida.
Hoje em dia eu diria que a aula mais importante que tive foi ele ter dito aquela frase por seis meses seguidos. Não é que o filho da mãe está certo!?
A sequência da solução é mais ou menos o infográfico abaixo:
Quando eu não consigo resolver o problema, eu pego o requisito, se não existe eu crio um e fico conversando com ele.
Faço diagramas de sequência, de estado, mapas mentais e ao mesmo tempo vou organizando as ideias até conseguir explicar textualmente e de forma concisa como o programa deve operar e utilizando qual conceito e quebro o problema em problemas menores.
Feita a segmentação do desafio eu consigo ter um panorama do que aplicar de estrutura de dados, árvores binárias, listas ligadas, recursão, equações matemáticas e etc e tenho uma ideia de como interligar os módulos.
Entendido o método, vem a codificação comendo solto nos Stack Overflow da vida e vai ajustando a teoria com o que a codificação permite de fato fazer.
Então é isso: Entende primeiro o escopo do problema (entende o que precisa ser feito), quebra em problemas menores e depois sai codificando e vai ajustando até entregar o pedido.