Eu tenho uma visão bem particular, e gosto de conversar com as pessoas sobre isso. Abordo melhor minha visão aqui.
Tem uma palestra interessante no Youtube que defende que lógica de programação não existe. Mesmo discordando do ponto geral e achar que há utilidade prática em dizer que há uma lógica de programação, é interessante notar que de fato, não há uma definição formal do termo. Se quisermos defini-la como tal, devemos resolver certos tópicos: o que seria lógica de programação? No que ela se diferencia da lógica matemática, lógica aristotélica e outras lógicas formais? Frequentemente se diz que a lógica de programação é independente de linguagem, mas como argumentei no texto que linkei acima, o ser humano precisa de linguagem para pensamentos complexos. Você pode tentar evitar usar linguagens formais de programação e usar linguagens mais complexas como a linguagem natural para este objetivo, mas isso não te faz independente de linguagem, te faz dependente de linguagem natural, o que na prática é pior, pois não programamos em linguagem natural. Por isso vejo que um estudo da tal lógica de programação deve vir acompanhado do estudo de uma, e se possível, várias linguagens de programação. Entender como cada uma delas apresentam recursos para expressar conceitos abstratos. Saber diferencia-las mas também compara-las para entender o que elas tem em comum, pode ser a chave para separar o conceito da linguagem.
No geral, como você mesmo disse, há diferenças entre a programação funcional, como em Haskell, e programação imperativa no geral, isso é uma distinção bem perspicaz. Compara-las talvez seja a chave para chegarmos ao tal fundamento que definiria lógica de programação como lógica formal. Acontece, que há argumentavelmente mais diferenças do que semelhanças, ao menos de forma superficial. No geral, a subtância comum dos dois casos, parece nos levar ao conceito matemático de função (mesmo a programação imperativa), a computação trabalha com o que é chamado de funções computáveis. Portanto, a lógica de programação seria o estudo do raciocínio correto que compreende, modela e resolve funções computáveis? Se for o caso, o que distingue a lógica de programação de lógica matemática? No fim, a primeira parece ser um subconjunto da segunda. Não me parece coincidência que grande parte dos nomes da computação e programação eram matemáticos, como John von Neumann, Alan Turing, Alonso Church, Donald Knuth, John Backus e a que é considerada por muitos como a primeira programadora da história (há quem discorde), Ada Lovelace. Inclusive, se for analisar o tal primeiro programa feito por Lovelace, ela não usa nada que se assemelhe a uma linguagem de programação moderna, mas sim, um diagrama com linguagem algébrica.
Um aviso é que não tenho estudo formal na área de matemática, filosofia ou lógica. Apenas expresso pensamentos que tenho usando o conhecimento limitado que tenho sobre estes. Eu gosto de compartilhar minha visão com os outros para que elas compartilhem as suas e eu possa enriquecer meu próprio pensamento. No geral, se o dono do post ou outros quiserem comentar sobre ficaria muito feliz :)
Excelente. Você mandou o ChatGPT fazer o texto como se fosse eu falando? :P :D
Eu não sei exatamente o que diz com "Por isso vejo que um estudo da tal lógica de programação deve vir acompanhado do estudo de uma, e se possível, várias linguagens de programação.", isso parece ser uma discordância do que eu falei, e tá tudo bem, eu estou pedindo para falar mais para eu entener se posso melhorar meu pensamento sobre isso ou entender melhor a frase. Ou confirmar a forte discordância.
Note que depois de aprender a programar você tem que mergulhar em linguagens reais que vai trabalhar e fazer comparaçaões e assim ir consolidando o conhecimento, mas é outro passo. Só para te dar uma base, não deve ter lido outras cosias que eu escrevi, eu recomendo aprender a programar com C (pelo menos quem quer ser programador sério). Eu não estou falando para aprender C, é diferente. Depois vai aprender outra linguagem, já que agora sabe programar. Usa C porque não precisa saber os detalhes dela mas não é uma linguagem artificial (pode usar o repl.it ou similar). Depois precisará saber bem Java, C#, Go, Rust, ou até Python, JS e PHP, embora em grande parte dos casos quem vai trabalhar com isso.. ah deixa pra lá :D eu já falei sobre também, mas não cabe aqui :) Quando for aprender uma delas agora de forma séria na linguagem, muito mais que a maioria faz, já estará comparando um pouco com C.
Tem outras formas válidas também.
Na ajuda que darei para as pessoas aprenderem melhor a programar, no meu blog/canal eu detalharei muito isso (não é curso).
E eu prego que depois de um tempo deve aprender paradigmas diferentes, mesmo que nunca use diretamente. Eu mesmo nunca aprendi de verdade o paradigma lógico, sei que está cada vez mais difícil abraçar "tudo", mas é uma falha minha, como da maioria.
E você pega um ponto interessante no parágrafo sobre imperativo/funcional, porque o que se fala que é lógica de programação é o imperativo :D E isso já é outra falha no ensino disso.
Eu também não tenho estudo formal sobre essas coisas, mas gosto de estudá-las aqui e ali, isso melhorou muito a forma que penso, e fiquei bem mais chato por isso, pelo menos aos olhos da maioria :D Meu formalismo está parcialmente na computação.
Depois verei os links, olhando por alguns segundos, o canal parece ser uma fionte interessante de conhecimento e reflexão, pena que esse tipo de canal não dura muito tempo porque as pessoas querem outra coisa. Se for importante eu vemho falar mais depois.