Lógica de Programação "ruim"

Atualmente estou revisando/estudando lógica de programação, até ai tudo bem, sigo compreendendo bem os assuntos e fortificando a base (Teórica). Consigo resolver algumas questões de lógica mas quando é algo mais "denso" eu acabo travando na hora de tentar pensar em alguma solução, sinceramente gostaria de saber se é "normal" ou se estou estudando de forma "errada".

Como consigo melhorar a minha lógica, ou qual a melhor forma de desenvolver a lógica de programação?

Olha eu diria que geralmente quando damos de cara com um problema mais denso como você comentou é normal (talvez até fundamental) pensar um pouco antes de começar escrever o código.

Com a prática o que provavelmente vai mudar é o tempo que você precisa de parar para pensar em como resolver o problema.

Mas talvez estudar um pouco de lógica matemática possa ajudar.

Ótimo ponto! Eu adicionaria que isso é uma coisa que se consegue com a experiência, então: tenha experiências (pratique). Um site que me ajuda muito quando eu tô me sentindo meio ruim de lógica é o [Hackerrank](https://www.hackerrank.com/).

Mesmo problema aqui. Me perdi estudando libs e frameworks acabei relaxando na parte da lógica e estrutura de dados. Agora é tentar praticar e estudando aos poucos cada tópico. Paciência e foco é o conselho que eu dou.

Acho que eu acabei caindo na mesma situação, por conta do serviço trabalhar 100% com o React.js acabei esquencendo de estudar algumas coisas básicas do Javascript. Preciso ir recuperando aos poucos agora... Força!!

Prática é fundamental, mas também existe o lado teórico que muitos pulamos e nos ajuda a resolver mais rapido determinados problemas.

Organização também é fundamental. escreva o problema como se estivesse perguntando pra alguém, explique os passos que você tomou. as vezes nesse processo você tem um insight e resolve sozinho. se não der certo, publica a pergunta um stackoverflow da vida (ou tabnews)

Eu comecei a praticar no Code Wars e no Leet Code e senti uma boa melhora na minha lógica.

O ideal é ir praticando com problemas que você consegue resolver e ir aumentando a dificuldade aos poucos para não ficar se frustrando com um problema difíceis demais.

O que me ajuda bastante é pensar no problema em termos concretos o fluxo do programa, a partir do momento que ele recebe um input até ele retornar o resultado, e como ele vai sendo transformado. Ajuda bastante usar papel e caneta ao invés de só ficar na sua cabeça.

Para problemas difíceis, ajuda a estratégia do "dividir para conquistar". Dividir o problema em diversas partes e resolver cada parte de uma vez, mesmo que você ainda não saiba o que fazer com as partes restantes. Isso evita que você trave, tentando lidar com mais informação do que você consegue processar.

Pra complementar a sua dica, recomendo também o beecrowd (antigo URI Online Judge), ele tem vários exercícios de cada linguagem e tem opção em PORTUGUêS!

Acredito que chega um momento que não tem como fugir da matemática.

eu havia tentado escreve um texto explicando mais desisti, então fica ai o video do Mayk Brito onde ele fala sobre isso com uma dinâmica muito boa

Mesma dificuldade aqui! Não trabalho na área, então faço/ refaço muitos exercícios porque pretendo migrar, mas tenho momentos que simplesmente não consigo desenrolar ... loops aninhados, me dá pesadelos...